commit d1a77eadc1cf16ee3e0bd5008c6a8f74f3087442
Author: Juergen Spitzmueller <[email protected]>
Date:   Sun Sep 1 10:21:21 2013 +0200

    Load AMS packages before newtxmath (#8824)

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index c98e1f9..55c2fa1 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -1445,9 +1445,13 @@ bool BufferParams::writeLaTeX(otexstream & os, 
LaTeXFeatures & features,
        os << '{' << from_ascii(tclass.latexname()) << "}\n";
        // end of \documentclass defs
 
-       // if we use fontspec, we have to load the AMS packages here
+       // if we use fontspec or newtxmath, we have to load the AMS packages 
here
        string const ams = features.loadAMSPackages();
-       if (useNonTeXFonts && !ams.empty())
+       bool const ot1 = (font_encoding() == "default" || font_encoding() == 
"OT1");
+       bool const use_newtxmath =
+               
theLaTeXFonts().getLaTeXFont(from_ascii(fonts_math)).getUsedPackage(
+                       ot1, false, false) == "newtxmath";
+       if ((useNonTeXFonts || use_newtxmath) && !ams.empty())
                os << from_ascii(ams);
 
        if (useNonTeXFonts) {
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index d4074d6..9292938 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -851,10 +851,15 @@ 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)
+       // 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
@@ -863,9 +868,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
diff --git a/src/LaTeXFonts.cpp b/src/LaTeXFonts.cpp
index e37ad2e..676179f 100644
--- a/src/LaTeXFonts.cpp
+++ b/src/LaTeXFonts.cpp
@@ -193,6 +193,15 @@ docstring const LaTeXFont::getUsedFont(bool ot1, bool 
complete, bool nomath)
 }
 
 
+docstring const LaTeXFont::getUsedPackage(bool ot1, bool complete, bool nomath)
+{
+       docstring const usedfont = getUsedFont(ot1, complete, nomath);
+       if (usedfont.empty())
+               return docstring();
+       return theLaTeXFonts().getLaTeXFont(usedfont).package();
+}
+
+
 string const LaTeXFont::getAvailablePackage(bool dryrun)
 {
        if (package_.empty())
diff --git a/src/LaTeXFonts.h b/src/LaTeXFonts.h
index 8c9da88..a50a077 100644
--- a/src/LaTeXFonts.h
+++ b/src/LaTeXFonts.h
@@ -82,6 +82,8 @@ public:
                                       int const & scale = 100);
        /// Return the actually used font
        docstring const getUsedFont(bool ot1, bool complete, bool nomath);
+       /// Return the actually used package
+       docstring const getUsedPackage(bool ot1, bool complete, bool nomath);
        ///
        bool read(Lexer & lex);
        ///

Reply via email to