]> git.lyx.org Git - features.git/blobdiff - src/LaTeXFeatures.cpp
Output package options before loading any package.
[features.git] / src / LaTeXFeatures.cpp
index a7974b62c5ac062ef2bb95ee0599e71de04710bc..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");
@@ -833,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;
@@ -843,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) {
@@ -893,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)
@@ -963,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") &&
@@ -1049,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();
 }
 
@@ -1177,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"))