]> git.lyx.org Git - lyx.git/commitdiff
Consider class-provided citation engines
authorJuergen Spitzmueller <spitz@lyx.org>
Thu, 8 Feb 2018 12:25:19 +0000 (13:25 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Thu, 8 Feb 2018 12:25:19 +0000 (13:25 +0100)
Do not attempt to load, nor allow to set, a different engine in this
case.

Fixes: #11022
src/BufferParams.cpp
src/LaTeXFeatures.cpp
src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/GuiDocument.h

index 8cb0c2cae6f647bf28812e2a3057c28425c73816..15de3388d682a3e6bd4d66395585f1a9f6787cb1 100644 (file)
@@ -2322,7 +2322,11 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
        }
 
        // ... but before biblatex (see #7065)
-       if (features.mustProvide("biblatex")) {
+       if (features.mustProvide("biblatex")
+           && !features.isProvided("biblatex-natbib")
+           && !features.isProvided("natbib-internal")
+           && !features.isProvided("natbib")
+           && !features.isProvided("jurabib")) {
                string delim = "";
                string opts;
                os << "\\usepackage";
index 78c3e5a5e8f0ef55edec531956d93fb13a4349b0..281d30df86ba61a8ce52f87f82cf2ed33650bdc8 100644 (file)
@@ -1231,7 +1231,11 @@ string const LaTeXFeatures::getPackages() const
        // Some classes load natbib themselves, but still allow (or even require)
        // plain numeric citations (ReVTeX is such a case, see bug 5182).
        // This special case is indicated by the "natbib-internal" key.
-       if (mustProvide("natbib") && !isProvided("natbib-internal")) {
+       if (mustProvide("natbib")
+           && !isProvided("natbib-internal")
+           && !isProvided("biblatex")
+           && !isProvided("biblatex-natbib")
+           && !isProvided("jurabib")) {
                packages << "\\usepackage[";
                if (params_.citeEngineType() == ENGINE_TYPE_NUMERICAL)
                        packages << "numbers";
@@ -1250,7 +1254,11 @@ string const LaTeXFeatures::getPackages() const
        }
 
        // jurabib -- we need version 0.6 at least.
-       if (mustProvide("jurabib")) {
+       if (mustProvide("jurabib")
+           && !isProvided("natbib-internal")
+           && !isProvided("natbib")
+           && !isProvided("biblatex")
+           && !isProvided("biblatex-natbib")) {
                packages << "\\usepackage";
                if (!params_.biblio_opts.empty())
                        packages << '[' << params_.biblio_opts << ']';
index 89437d1d06ee1b5fc009136489f310693febbe03..85318bc7f0ab1058f37f62409e54b0ff432f8b53 100644 (file)
@@ -2445,6 +2445,28 @@ void GuiDocument::biblioChanged()
 }
 
 
+void GuiDocument::checkPossibleCiteEngines()
+{
+       // Check if the class provides a specific engine,
+       // and if so, enforce this.
+       string force_engine;
+       if (documentClass().provides("natbib")
+           || documentClass().provides("natbib-internal"))
+               force_engine = "natbib";
+       else if (documentClass().provides("jurabib"))
+               force_engine = "jurabib";
+       else if (documentClass().provides("biblatex"))
+               force_engine = "biblatex";
+       else if (documentClass().provides("biblatex-natbib"))
+               force_engine = "biblatex-natbib";
+
+       if (!force_engine.empty())
+               biblioModule->citeEngineCO->setCurrentIndex(
+                       biblioModule->citeEngineCO->findData(toqstr(force_engine)));
+       biblioModule->citeEngineCO->setEnabled(force_engine.empty());
+}
+
+
 void GuiDocument::rescanBibFiles()
 {
        if (isBiblatex())
@@ -3326,6 +3348,8 @@ void GuiDocument::paramsToDialog()
        updateEngineType(documentClass().opt_enginetype(),
                bp_.citeEngineType());
 
+       checkPossibleCiteEngines();
+
        biblioModule->citeStyleCO->setCurrentIndex(
                biblioModule->citeStyleCO->findData(bp_.citeEngineType()));
 
index be1b7e489f5f9eb392f0f889803940bc53fc265a..1fe1dc74a176fbd5c766b726767e280c237edce8 100644 (file)
@@ -296,6 +296,8 @@ private:
        ///
        bool isBiblatex() const;
        ///
+       void checkPossibleCiteEngines();
+       ///
        BufferParams bp_;
        /// List of names of available modules
        std::list<modInfoStruct> moduleNames_;