commit 8ee2ffaa52dfd7b1de547df36331f0343fc6a7a2
Author: Juergen Spitzmueller <[email protected]>
Date: Thu Apr 18 16:27:22 2019 +0200
Amend 3615a6a75bfe7b
Natbib provides separation of abbreviated and full author list also
beyond BibTeX
---
src/frontends/qt4/GuiBibitem.cpp | 15 ++++++++++++---
src/frontends/qt4/ui/BibitemUi.ui | 31 ++++++++++++++++++++++++-------
src/insets/InsetBibitem.cpp | 8 +++++++-
3 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/src/frontends/qt4/GuiBibitem.cpp b/src/frontends/qt4/GuiBibitem.cpp
index dddb507..462a870 100644
--- a/src/frontends/qt4/GuiBibitem.cpp
+++ b/src/frontends/qt4/GuiBibitem.cpp
@@ -36,6 +36,8 @@ GuiBibitem::GuiBibitem(QWidget * parent) :
InsetParamsWidget(parent)
this, SIGNAL(changed()));
connect(labelED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
+ connect(allAuthorsED, SIGNAL(textChanged(QString)),
+ this, SIGNAL(changed()));
connect(yearED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
connect(literalCB, SIGNAL(clicked()),
@@ -54,21 +56,28 @@ void GuiBibitem::paramsToDialog(Inset const * inset)
if (bp.citeEngine() == "natbib" && bp.citeEngineType() ==
ENGINE_TYPE_AUTHORYEAR) {
yearED->setHidden(false);
yearLA->setHidden(false);
- labelLA->setText(qt_("Author &Name:"));
- labelED->setToolTip(qt_("Insert the author name(s) here. The
year goes to the separate field."));
+ allAuthorsED->setHidden(false);
+ allAuthorsLA->setHidden(false);
+ labelLA->setText(qt_("Author &Names:"));
+ labelED->setToolTip(qt_("Insert the author name(s) for the
author-year reference here. "
+ "If you use an abbreviated list (with
'et al.'), the full list can go below."));
int const i = label.lastIndexOf("(");
int const j = label.lastIndexOf(")");
if (i != -1 && j != -1 && i < j) {
// Split Author(Year) to Author and Year
QString const year = label.left(j).mid(i + 1);
QString const author = label.left(i);
+ QString const allauthors = label.mid(j + 1);
labelED->setText(author);
yearED->setText(year);
+ allAuthorsED->setText(allauthors);
} else
labelED->setText(label);
} else {
yearED->setHidden(true);
yearLA->setHidden(true);
+ allAuthorsED->setHidden(true);
+ allAuthorsLA->setHidden(true);
labelLA->setText(qt_("&Label:"));
labelED->setToolTip(qt_("The label as it appears in the
document"));
labelED->setText(label);
@@ -81,7 +90,7 @@ docstring GuiBibitem::dialogToParams() const
InsetCommandParams params(insetCode());
QString label = labelED->text();
if (!yearED->isHidden())
- label += "(" + yearED->text() + ")";
+ label += "(" + yearED->text() + ")" + allAuthorsED->text();
params["key"] = qstring_to_ucs4(keyED->text());
params["label"] = qstring_to_ucs4(label);
params["literal"] = literalCB->isChecked()
diff --git a/src/frontends/qt4/ui/BibitemUi.ui
b/src/frontends/qt4/ui/BibitemUi.ui
index 01c2b79..a32a8c7 100644
--- a/src/frontends/qt4/ui/BibitemUi.ui
+++ b/src/frontends/qt4/ui/BibitemUi.ui
@@ -6,22 +6,22 @@
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>123</height>
+ <width>467</width>
+ <height>170</height>
</rect>
</property>
<property name="windowTitle">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
+ <item row="0" column="0" rowspan="2" colspan="2">
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="0" column="1">
+ <item row="1" column="1">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="keyLA">
@@ -36,7 +36,7 @@
</property>
</widget>
</item>
- <item row="0" column="1">
+ <item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="keyED">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -62,7 +62,7 @@
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="1" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
@@ -102,9 +102,26 @@
</item>
</layout>
</item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QLabel" name="allAuthorsLA">
+ <property name="text">
+ <string>A&ll Author Names:</string>
+ </property>
+ <property name="buddy">
+ <cstring>allAuthorsED</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QLineEdit" name="allAuthorsED">
+ <property name="toolTip">
+ <string>If you want to use an abbreviated author list (with 'et al.')
as well as a full list for author-year citation, you can put the full list here
and the abbreviated list above.</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
- <item row="1" column="1">
+ <item row="2" column="1">
<widget class="QCheckBox" name="literalCB">
<property name="toolTip">
<string>Pass content of the `Label' field literally to LaTeX. Check this
if you want to enter LaTeX code.</string>
diff --git a/src/insets/InsetBibitem.cpp b/src/insets/InsetBibitem.cpp
index 2060b1a..64e6a31 100644
--- a/src/insets/InsetBibitem.cpp
+++ b/src/insets/InsetBibitem.cpp
@@ -188,9 +188,15 @@ docstring InsetBibitem::bibLabel() const
if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL)
return autolabel_;
docstring label = getParam("label");
- if (!label.empty() && bp.citeEngine() == "natbib")
+ if (!label.empty() && bp.citeEngine() == "natbib") {
// Add a space before opening paren
label = subst(label, from_ascii("("), from_ascii(" ("));
+ // and strip off long author list
+ docstring striplabel;
+ label = rsplit(label, striplabel, ')');
+ if (!striplabel.empty())
+ label = striplabel + ")";
+ }
return label.empty() ? autolabel_ : label;
}