]> git.lyx.org Git - features.git/commitdiff
Amend 3615a6a75bfe7b
authorJuergen Spitzmueller <spitz@lyx.org>
Thu, 18 Apr 2019 14:27:22 +0000 (16:27 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Thu, 18 Apr 2019 14:27:22 +0000 (16:27 +0200)
Natbib provides separation of abbreviated and full author list also
beyond BibTeX

src/frontends/qt4/GuiBibitem.cpp
src/frontends/qt4/ui/BibitemUi.ui
src/insets/InsetBibitem.cpp

index dddb5079450bb801e085307ea3e9c73e2ff7f5bf..462a8705f572817efef0d00356d14e98d264e5fe 100644 (file)
@@ -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()
index 01c2b7928b9a82700687940f154fdee15172e4b8..a32a8c71e1a48aef581b1627b8ea7e16127d6db7 100644 (file)
@@ -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>
        </item>
       </layout>
      </item>
+     <item row="2" column="0" colspan="2">
+      <widget class="QLabel" name="allAuthorsLA">
+       <property name="text">
+        <string>A&amp;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>
index 2060b1a1c9f176c9ff537f6ba6d53fb42feaf441..64e6a31bf5851e043e65f2a7b66ba321188bfe0f 100644 (file)
@@ -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;
 }