]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Revert "Fix bug with wrong baseline calculation in last paragraph"
[lyx.git] / src / LaTeXFeatures.cpp
index 4cbdea6953eee8c10a71152dd55642932edb3d5a..506af187c911d71d574e6d45f6f3f39f142040e2 100644 (file)
@@ -426,9 +426,14 @@ void LaTeXFeatures::require(set<string> const & names)
 
 
 void LaTeXFeatures::useLayout(docstring const & layoutname)
+{
+       useLayout(layoutname, 0);
+}
+
+
+void LaTeXFeatures::useLayout(docstring const & layoutname, int level)
 {
        // Some code to avoid loops in dependency definition
-       static int level = 0;
        const int maxlevel = 30;
        if (level > maxlevel) {
                lyxerr << "LaTeXFeatures::useLayout: maximum level of "
@@ -448,9 +453,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname)
                require(layout.requires());
 
                if (!layout.depends_on().empty()) {
-                       ++level;
-                       useLayout(layout.depends_on());
-                       --level;
+                       useLayout(layout.depends_on(), level + 1);
                }
                usedLayouts_.push_back(layoutname);
        } else {
@@ -458,8 +461,6 @@ void LaTeXFeatures::useLayout(docstring const & layoutname)
                       << to_utf8(layoutname) << "' does not exist in this class"
                       << endl;
        }
-
-       --level;
 }
 
 
@@ -600,6 +601,10 @@ bool LaTeXFeatures::hasLanguages() const
 
 bool LaTeXFeatures::hasOnlyPolyglossiaLanguages() const
 {
+       // first the main language
+       if (params_.language->polyglossia().empty())
+               return false;
+       // now the secondary languages
        LanguageList::const_iterator const begin = UsedLanguages_.begin();
        for (LanguageList::const_iterator cit = begin;
             cit != UsedLanguages_.end();
@@ -613,6 +618,10 @@ bool LaTeXFeatures::hasOnlyPolyglossiaLanguages() const
 
 bool LaTeXFeatures::hasPolyglossiaExclusiveLanguages() const
 {
+       // first the main language
+       if (params_.language->isPolyglossiaExclusive())
+               return true;
+       // now the secondary languages
        LanguageList::const_iterator const begin = UsedLanguages_.begin();
        for (LanguageList::const_iterator cit = begin;
             cit != UsedLanguages_.end();
@@ -701,9 +710,6 @@ char const * simplefeatures[] = {
        "fancybox",
        "calc",
        "units",
-       "tipa",
-       "tipx",
-       "tone",
        "framed",
        "soul",
        "textcomp",
@@ -731,8 +737,15 @@ char const * simplefeatures[] = {
        "pdfpages",
        "amscd",
        "slashed",
+       "multicol",
        "multirow",
-       "tfrupee"
+       "tfrupee",
+       "shapepar",
+       "rsphrase",
+       "algorithm2e",
+       "sectionbox",
+       "tcolorbox",
+       "pdfcomment"
 };
 
 char const * bibliofeatures[] = {
@@ -848,10 +861,25 @@ string const LaTeXFeatures::getPackages() const
        // The rest of these packages are somewhat more complicated
        // than those above.
 
-       // if fontspec is used, AMS packages have to be loaded before
-       // fontspec (in BufferParams)
+       // The tipa package and its extensions (tipx, tone) must not
+       // be loaded with non-TeX fonts, since fontspec includes the
+       // respective macros
+       if (mustProvide("tipa") && !params_.useNonTeXFonts)
+               packages << "\\usepackage{tipa}\n";
+       if (mustProvide("tipx") && !params_.useNonTeXFonts)
+               packages << "\\usepackage{tipx}\n";
+       if (mustProvide("tone") && !params_.useNonTeXFonts)
+               packages << "\\usepackage{tone}\n";
+
+       // if fontspec or newtxmath is used, AMS packages have to be loaded
+       // before fontspec (in BufferParams)
        string const amsPackages = loadAMSPackages();
-       if (!params_.useNonTeXFonts && !amsPackages.empty())
+       bool const ot1 = (params_.font_encoding() == "default" || params_.font_encoding() == "OT1");
+       bool const use_newtxmath =
+               theLaTeXFonts().getLaTeXFont(from_ascii(params_.fonts_math)).getUsedPackage(
+                       ot1, false, false) == "newtxmath";
+       
+       if (!params_.useNonTeXFonts && !use_newtxmath && !amsPackages.empty())
                packages << amsPackages;
 
        // fixltx2e must be loaded after amsthm, since amsthm produces an error with
@@ -860,9 +888,9 @@ string const LaTeXFeatures::getPackages() const
        if (mustProvide("fixltx2e"))
                packages << "\\usepackage{fixltx2e}\n";
 
-        if (mustProvide("cancel") &&
-            params_.use_package("cancel") != BufferParams::package_off)
-                packages << "\\usepackage{cancel}\n";
+       if (mustProvide("cancel") &&
+           params_.use_package("cancel") != BufferParams::package_off)
+               packages << "\\usepackage{cancel}\n";
        // wasysym is a simple feature, but it must be after amsmath if both
        // are used
        // wasysym redefines some integrals (e.g. iint) from amsmath. That
@@ -933,8 +961,16 @@ string const LaTeXFeatures::getPackages() const
        if (mustProvide("setspace") && !isProvided("SetSpace"))
                packages << "\\usepackage{setspace}\n";
 
-       // esint must be after amsmath and wasysym, since it will redeclare
-       // inconsistent integral symbols
+       // we need to assure that mhchem is loaded before esint
+       // because esint must be loaded AFTER amslatex and mhchem loads amlatex
+       // (this info is from the author of mhchem from June 2013)
+       if (mustProvide("mhchem") &&
+           params_.use_package("mhchem") != BufferParams::package_off)
+               packages << "\\PassOptionsToPackage{version=3}{mhchem}\n"
+                           "\\usepackage{mhchem}\n";
+
+       // esint must be after amsmath (and packages requiring amsmath, like mhchem)
+       // and wasysym, since it will redeclare inconsistent integral symbols
        if (mustProvide("esint") &&
            params_.use_package("esint") != BufferParams::package_off)
                packages << "\\usepackage{esint}\n";
@@ -996,11 +1032,6 @@ string const LaTeXFeatures::getPackages() const
                packages << "\\PassOptionsToPackage{normalem}{ulem}\n"
                            "\\usepackage{ulem}\n";
 
-       if (mustProvide("mhchem") &&
-           params_.use_package("mhchem") != BufferParams::package_off)
-               packages << "\\PassOptionsToPackage{version=3}{mhchem}\n"
-                           "\\usepackage{mhchem}\n";
-
        if (mustProvide("nomencl")) {
                // Make it work with the new and old version of the package,
                // but don't use the compatibility option since it is
@@ -1669,7 +1700,8 @@ void LaTeXFeatures::getFloatDefinitions(odocstream & os) const
                        // effect. (Lgb)
                }
                if (cit->second)
-                       os << "\n\\newsubfloat{" << from_ascii(fl.floattype()) << "}\n";
+                       // The subfig package is loaded later
+                       os << "\n\\AtBeginDocument{\\newsubfloat{" << from_ascii(fl.floattype()) << "}}\n";
        }
 }