]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Paragraph::inInset() shall not be used if the owner inset was not initialized. Make...
[lyx.git] / src / LaTeXFeatures.cpp
index a6ce6c3391b03c5fe1a615c71bf9dce0596d7a16..cf85ec564880e4ee7a45761877088ec115d4e162 100644 (file)
@@ -198,7 +198,23 @@ static string const textcyr_def =
        " \\def\\encodingdefault{T2A}}\n"
        "\\DeclareRobustCommand{\\textcyr}[1]{\\leavevmode{\\cyrtext #1}}\n"
        "\\DeclareFontEncoding{T2A}{}{}\n";
-       
+
+static string const lyxmathsym_def =
+       "\\DeclareRobustCommand{\\lyxmathsym}[1]{%\n"
+       " \\ifmmode\\begingroup\n"
+       " \\edef\\b@ld{bold}%\n"
+       " \\def\\rmorbf##1{\\ifx\\math@version\\b@ld\\textbf{##1}\\else\\textrm{##1}\\fi}%\n"
+       " \\mathchoice{\\hbox{\\rmorbf{#1}}}{\\hbox{\\rmorbf{#1}}}%\n"
+       "  {\\hbox{\\smaller[2]\\rmorbf{#1}}}{\\hbox{\\smaller[3]\\rmorbf{#1}}}%\n"
+       " \\endgroup\\else#1\\fi}\n";
+
+static string const papersizedvi_def =
+       "\\special{papersize=\\the\\paperwidth,\\the\\paperheight}\n";
+
+static string const papersizepdf_def =
+       "\\pdfpageheight\\paperheight\n"
+       "\\pdfpagewidth\\paperwidth\n";
+
 /////////////////////////////////////////////////////////////////////
 //
 // LaTeXFeatures
@@ -355,10 +371,15 @@ void LaTeXFeatures::useLanguage(Language const * lang)
 {
        if (!lang->babel().empty())
                UsedLanguages_.insert(lang);
+       if (lang->lang() == "vietnamese")
+               require("vietnamese");
        // CJK languages do not have a babel name.
        // They use the CJK package
        if (lang->encoding()->package() == Encoding::CJK)
                require("CJK");
+       // japanese package is special
+       if (lang->encoding()->package() == Encoding::japanese)
+               require("japanese");
 }
 
 
@@ -400,7 +421,8 @@ set<string> LaTeXFeatures::getEncodingSet(string const & doc_encoding) const
        LanguageList::const_iterator end = UsedLanguages_.end();
        for (; it != end; ++it)
                if ((*it)->encoding()->latexName() != doc_encoding &&
-                   (*it)->encoding()->package() == Encoding::inputenc)
+                   ((*it)->encoding()->package() == Encoding::inputenc
+                    || (*it)->encoding()->package() == Encoding::japanese))
                        encodings.insert((*it)->encoding()->latexName());
        return encodings;
 }
@@ -415,7 +437,7 @@ char const * simplefeatures[] = {
        "rotating",
        "latexsym",
        "pifont",
-       "subfig",
+       // subfig is handled in BufferParams.cpp
        "varioref",
        "prettyref",
        /*For a successful cooperation of the `wrapfig' package with the
@@ -449,8 +471,11 @@ char const * simplefeatures[] = {
        "endnotes",
        "ifthen",
        "amsthm",
-       "listings",
-       "bm"
+       // listings is handled in BufferParams.cpp
+       "bm",
+       "pdfpages",
+       "relsize",
+       "amscd"
 };
 
 int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *);
@@ -560,7 +585,7 @@ string const LaTeXFeatures::getPackages() const
 
        // setspace.sty
        if (mustProvide("setspace") && !tclass.provides("SetSpace"))
-    packages << "\\usepackage{setspace}\n";
+               packages << "\\usepackage{setspace}\n";
 
        // amssymb.sty
        if (mustProvide("amssymb")
@@ -574,9 +599,12 @@ string const LaTeXFeatures::getPackages() const
                packages << "\\usepackage{esint}\n";
 
        // natbib.sty
-       if (mustProvide("natbib")) {
+       // 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") && !tclass.provides("natbib-internal")) {
                packages << "\\usepackage[";
-               if (params_.citeEngine() == biblio::ENGINE_NATBIB_NUMERICAL)
+               if (params_.citeEngine() == ENGINE_NATBIB_NUMERICAL)
                        packages << "numbers";
                else
                        packages << "authoryear";
@@ -625,6 +653,12 @@ string const LaTeXFeatures::getMacros() const
        for (; pit != pend; ++pit)
                macros << *pit << '\n';
 
+       if (mustProvide("papersize"))
+               if (runparams_.flavor == OutputParams::LATEX)
+                       macros << papersizedvi_def << '\n';
+               else
+                       macros << papersizepdf_def << '\n';
+
        if (mustProvide("LyX"))
                macros << lyx_def << '\n';
 
@@ -643,6 +677,9 @@ string const LaTeXFeatures::getMacros() const
        if (mustProvide("textcyr"))
                macros << textcyr_def << '\n';
 
+       if (mustProvide("lyxmathsym"))
+               macros << lyxmathsym_def << '\n';
+
        // quotes.
        if (mustProvide("quotesinglbase"))
                macros << quotesinglbase_def << '\n';
@@ -778,7 +815,8 @@ docstring const LaTeXFeatures::getIncludedFiles(string const & fname) const
 }
 
 
-void LaTeXFeatures::showStruct() const {
+void LaTeXFeatures::showStruct() const
+{
        lyxerr << "LyX needs the following commands when LaTeXing:"
               << "\n***** Packages:" << getPackages()
               << "\n***** Macros:" << getMacros()