]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Do not warn about changed modules when changing modules.
[lyx.git] / src / LaTeXFeatures.cpp
index c68729f5aaf47768595126991941f1b3b511b176..4d6a54922847b062cb696830a4cd656788e9b8d2 100644 (file)
@@ -134,24 +134,6 @@ static docstring const paragraphleftindent_def = from_ascii(
        "}\n"
        "{\\end{list}}\n");
 
-static docstring const floatingfootnote_def = from_ascii(
-       "%% Special footnote code from the package 'stblftnt.sty'\n"
-       "%% Author: Robin Fairbairns -- Last revised Dec 13 1996\n"
-       "\\let\\SF@@footnote\\footnote\n"
-       "\\def\\footnote{\\ifx\\protect\\@typeset@protect\n"
-       "    \\expandafter\\SF@@footnote\n"
-       "  \\else\n"
-       "    \\expandafter\\SF@gobble@opt\n"
-       "  \\fi\n"
-       "}\n"
-       "\\expandafter\\def\\csname SF@gobble@opt \\endcsname{\\@ifnextchar[%]\n"
-       "  \\SF@gobble@twobracket\n"
-       "  \\@gobble\n"
-       "}\n"
-       "\\edef\\SF@gobble@opt{\\noexpand\\protect\n"
-       "  \\expandafter\\noexpand\\csname SF@gobble@opt \\endcsname}\n"
-       "\\def\\SF@gobble@twobracket[#1]#2{}\n");
-
 static docstring const binom_def = from_ascii(
        "%% Binom macro for standard LaTeX users\n"
        "\\newcommand{\\binom}[2]{{#1 \\choose #2}}\n");
@@ -426,9 +408,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 +435,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 +443,6 @@ void LaTeXFeatures::useLayout(docstring const & layoutname)
                       << to_utf8(layoutname) << "' does not exist in this class"
                       << endl;
        }
-
-       --level;
 }
 
 
@@ -741,7 +724,12 @@ char const * simplefeatures[] = {
        "tfrupee",
        "shapepar",
        "rsphrase",
-       "algorithm2e"
+       "algorithm2e",
+       "sectionbox",
+       "tcolorbox",
+       "pdfcomment",
+       "fixme",
+       "todonotes"
 };
 
 char const * bibliofeatures[] = {
@@ -827,6 +815,22 @@ string const LaTeXFeatures::getColorOptions() const
 }
 
 
+string const LaTeXFeatures::getPackageOptions() const
+{
+       ostringstream packageopts;
+       // Output all the package option stuff we have been asked to do.
+       map<string, string>::const_iterator it =
+               params_.documentClass().packageOptions().begin();
+       map<string, string>::const_iterator en =
+               params_.documentClass().packageOptions().end();
+       for (; it != en; ++it)
+               if (mustProvide(it->first))
+                       packageopts << "\\PassOptionsToPackage{" << it->second << "}"
+                                << "{" << it->first << "}\n";
+       return packageopts.str();
+}
+
+
 string const LaTeXFeatures::getPackages() const
 {
        ostringstream packages;
@@ -837,16 +841,6 @@ string const LaTeXFeatures::getPackages() const
        // also unknown packages can be requested. They are silently
        // swallowed now. We should change this eventually.
 
-       // Output all the package option stuff we have been asked to do.
-       map<string, string>::const_iterator it =
-           params_.documentClass().packageOptions().begin();
-       map<string, string>::const_iterator en =
-           params_.documentClass().packageOptions().end();
-       for (; it != en; ++it)
-               if (mustProvide(it->first))
-                       packages << "\\PassOptionsToPackage{" << it->second << "}"
-                                << "{" << it->first << "}\n";
-
        //  These are all the 'simple' includes.  i.e
        //  packages which we just \usepackage{package}
        for (int i = 0; i < nb_simplefeatures; ++i) {
@@ -887,19 +881,7 @@ string const LaTeXFeatures::getPackages() const
        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
-       // leads to inconsistent integrals. We only load this package if
-       // the document does not contain integrals (then isRequired("esint")
-       // is false) or if esint is used, since esint redefines all relevant
-       // integral symbols from wasysym and amsmath.
-       // See http://www.lyx.org/trac/ticket/1942
-       if (mustProvide("wasysym") &&
-           params_.use_package("wasysym") != BufferParams::package_off &&
-           (params_.use_package("esint") != BufferParams::package_off || !isRequired("esint")))
-               packages << "\\usepackage{wasysym}\n";
-
+       
        // accents must be loaded after amsmath
        if (mustProvide("accents") &&
            params_.use_package("accents") != BufferParams::package_off)
@@ -957,14 +939,27 @@ string const LaTeXFeatures::getPackages() const
        if (mustProvide("setspace") && !isProvided("SetSpace"))
                packages << "\\usepackage{setspace}\n";
 
-       // we need to assure that mhchem is loaded before esint
-       // because esint must be loaded AFTER amslatex and mhchem loads amlatex
+       // we need to assure that mhchem is loaded before esint and every other
+       // package that redefines command of amsmath because 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";
 
+       // 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
+       // leads to inconsistent integrals. We only load this package if
+       // the document does not contain integrals (then isRequired("esint")
+       // is false) or if esint is used, since esint redefines all relevant
+       // integral symbols from wasysym and amsmath.
+       // See http://www.lyx.org/trac/ticket/1942
+       if (mustProvide("wasysym") &&
+           params_.use_package("wasysym") != BufferParams::package_off &&
+           (params_.use_package("esint") != BufferParams::package_off || !isRequired("esint")))
+               packages << "\\usepackage{wasysym}\n";
+
        // esint must be after amsmath (and packages requiring amsmath, like mhchem)
        // and wasysym, since it will redeclare inconsistent integral symbols
        if (mustProvide("esint") &&
@@ -1043,6 +1038,12 @@ string const LaTeXFeatures::getPackages() const
        if (mustProvide("subscript") && !isRequired("fixltx2e"))
                packages << "\\usepackage{subscript}\n";
 
+       // footmisc must be loaded after setspace
+       // Set options here, load the package after the user preamble to
+       // avoid problems with manual loaded footmisc.
+       if (mustProvide("footmisc"))
+               packages << "\\PassOptionsToPackage{stable}{footmisc}\n";
+
        return packages.str();
 }
 
@@ -1171,8 +1172,6 @@ docstring const LaTeXFeatures::getMacros() const
        // other
        if (mustProvide("ParagraphLeftIndent"))
                macros << paragraphleftindent_def;
-       if (mustProvide("NeedLyXFootnoteCode"))
-               macros << floatingfootnote_def;
 
        // some problems with tex->html converters
        if (mustProvide("NeedTabularnewline"))