]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
endl is defined in ostream, iomanip is not enough (it matters for gcc 4.3)
[lyx.git] / src / LaTeXFeatures.cpp
index 8a142ce876d9910376db17dce35b3dd27597c13d..1e809380179ac19c81036f8074bf4a7296e62f2a 100644 (file)
@@ -36,6 +36,7 @@
 using namespace std;
 using namespace lyx::support;
 
+
 namespace lyx {
 
 /////////////////////////////////////////////////////////////////////
@@ -136,10 +137,6 @@ static string const floatingfootnote_def =
        "  \\expandafter\\noexpand\\csname SF@gobble@opt \\endcsname}\n"
        "\\def\\SF@gobble@twobracket[#1]#2{}\n";
 
-static string const boldsymbol_def =
-       "%% Bold symbol macro for standard LaTeX users\n"
-       "\\providecommand{\\boldsymbol}[1]{\\mbox{\\boldmath $#1$}}\n";
-
 static string const binom_def =
        "%% Binom macro for standard LaTeX users\n"
        "\\newcommand{\\binom}[2]{{#1 \\choose #2}}\n";
@@ -201,101 +198,6 @@ static string const textcyr_def =
        " \\def\\encodingdefault{T2A}}\n"
        "\\DeclareRobustCommand{\\textcyr}[1]{\\leavevmode{\\cyrtext #1}}\n"
        "\\DeclareFontEncoding{T2A}{}{}\n";
-
-static string const newlyxcommand_def =
-       "%% Math macros with multiple optional parameters\n"
-       "% #1<-\\foo\n"
-       "\\def\\newlyxcommand#1{\n"
-       "  \\@ifnextchar[%]\n"
-       "  {\\newlyxcommand@arity{#1}}\n"
-       "  {\\newlyxcommand@arity{#1}[0]}\n"
-       "}\n"
-       "\n"
-       "% #1<-\\foo #2<-arity\n"
-       "\\def\\newlyxcommand@arity#1[#2]{\n"
-       "  \\@ifnextchar[%]\n"
-       "  {\\newlyxcommand@firstopt{#1}{}{#2}}\n"
-       "  {\\newlyxcommand@def#1{#2}}\n"
-       "}\n"
-       "\n"
-       "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
-       "\\def\\newlyxcommand@firstopt#1#2#3[#4]{\n"
-       "  % ##1<-\\foo@\n"
-       "  \\def\\@defclause##1{\n"
-       "    \\def#1{\n"
-       "      \\@ifnextchar[%]\n"
-       "      {##1{}{#4}}\n"
-       "      {##1{}{#4}[#4]}}\n"
-       "  }\n"
-       "  \\expandafter\\@defclause\\csname\\expandafter\\@gobble\\string#1@\\endcsname\n"
-       "  \\@ifnextchar[%]\n"
-       "  {\\newlyxcommand@opt{#1}{#2}{#3}}\n"
-       "  {\\newlyxcommand@last{#1}{#2}{#3}[#4]}\n"
-       "}\n"
-       "\n"
-       "\\begingroup\n"
-       "\\catcode`\\Q=3\n"
-       "\\gdef\\@myempty{Q}\n"
-       "\\endgroup\n"
-       "\n"
-       "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
-       "\\def\\newlyxcommand@opt#1#2#3[#4]{\n"
-       "  % ##1<-\\foo@iii ##2<-\\foo@iiii \n"
-       "  % ####1<-{a}{b}{c} ####2<-default value ####3<- default arg\n"
-       "  \\def\\@defclause##1##2{\n"
-       "    \\def##1####1####2[####3]{\n"
-       "      \\ifx\\@myempty####3\\@myempty%\n"
-       "        \\def\\@callnext{\n"
-       "          \\@ifnextchar[%]\n"
-       "          {##2{####1{####2}}{#4}}\n"
-       "          {##2{####1{####2}}{#4}[#4]}\n"
-       "      }\n"
-       "      \\else\n"
-       "        \\def\\@callnext{\n"
-       "          \\@ifnextchar[%]\n"
-       "          {##2{####1{####3}}{#4}}\n"
-       "          {##2{####1{####3}}{#4}[#4]}\n"
-       "      }\n"
-       "      \\fi\n"
-       "      \\@callnext\n"
-       "    }\n"
-       "  }\n"
-       "  \\expandafter\\def\\expandafter\\@clausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2\\endcsname}\n"
-       "  \\expandafter\\def\\expandafter\\@nextclausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname}\n"
-       "  \\expandafter\\expandafter\\expandafter  \n"
-       "  \\@defclause\\expandafter\\@clausename\\@nextclausename\n"
-       "  \\@ifnextchar[%]\n"
-       "  {\\newlyxcommand@opt{#1}{#2i}{#3}}\n"
-       "  {\\newlyxcommand@last{#1}{#2i}{#3}[#4]}\n"
-       "}\n"
-       "\n"
-       "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
-       "\\def\\newlyxcommand@last#1#2#3[#4]{\n"
-       "  \\def\\@defclause##1##2{\n"
-       "    \\def##1####1####2[####3]{\n"
-       "      \\ifx\\@myempty####3\\@myempty%\n"
-       "        \\def\\@callnext{##2####1{####2}}\n"
-       "      \\else\n"
-       "        \\def\\@callnext{##2####1{####3}}\n"
-       "      \\fi\n"
-       "      \\@callnext\n"
-       "    }\n"
-       "  }\n"
-       "  \\expandafter\\def\\expandafter\\@clausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2\\endcsname}\n"
-       "  \\expandafter\\def\\expandafter\\@nextclausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname}\n"
-       "  \\expandafter\\expandafter\\expandafter\n"
-       "  \\@defclause\\expandafter\\@clausename\\@nextclausename\n"
-       "  \\expandafter\\newlyxcommand@def\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname{#3}\n"
-       "}\n"
-       "\n"
-       "% #1<-\\foo #2<-arity #3<-definition\n"
-       "\\def\\newlyxcommand@def#1#2#3{\n"
-       "  \\ifx#20\n"
-       "  \\def#1{#3}\n"
-       "  \\else\n"
-       "  \\def\\@splitargs##1#2##2.{\\def#1##1#2}\\@splitargs##1##2##3##4##5##6##7##8##9.{#3}\n"
-       "  \\fi\n"
-       "}\n";
        
 /////////////////////////////////////////////////////////////////////
 //
@@ -335,7 +237,7 @@ void LaTeXFeatures::require(set<string> const & names)
 
 void LaTeXFeatures::getAvailable()
 {
-       Lexer lex(0, 0);
+       Lexer lex;
        support::FileName const real_file = libFileSearch("", "packages.lst");
 
        if (real_file.empty())
@@ -382,7 +284,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname)
                    != usedLayouts_.end())
                        return;
 
-               Layout const & layout = *tclass[layoutname];
+               Layout const & layout = tclass[layoutname];
                require(layout.requires());
 
                if (!layout.depends_on().empty()) {
@@ -547,7 +449,9 @@ char const * simplefeatures[] = {
        "endnotes",
        "ifthen",
        "amsthm",
-       "listings"
+       "listings",
+       "bm",
+       "pdfpages"
 };
 
 int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *);
@@ -587,6 +491,9 @@ string const LaTeXFeatures::getPackages() const
            (mustProvide("esintoramsmath") &&
             params_.use_esint == BufferParams::package_off)) {
                packages << "\\usepackage{amsmath}\n";
+       } else if (mustProvide("amsbsy")) {
+               // amsbsy is already provided by amsmath
+               packages << "\\usepackage{amsbsy}\n";
        }
        
        // wasysym is a simple feature, but it must be after amsmath if both
@@ -614,9 +521,8 @@ string const LaTeXFeatures::getPackages() const
        }
 
        // pdfcolmk must be loaded after color
-       if (mustProvide("pdfcolmk")) {
+       if (mustProvide("pdfcolmk"))
                packages << "\\usepackage{pdfcolmk}\n";
-       }
 
        // makeidx.sty
        if (isRequired("makeidx")) {
@@ -650,13 +556,12 @@ string const LaTeXFeatures::getPackages() const
        }
 
        // lyxskak.sty --- newer chess support based on skak.sty
-       if (mustProvide("chess")) {
+       if (mustProvide("chess"))
                packages << "\\usepackage[ps,mover]{lyxskak}\n";
-       }
 
        // setspace.sty
        if (mustProvide("setspace") && !tclass.provides("SetSpace"))
-                   packages << "\\usepackage{setspace}\n";
+    packages << "\\usepackage{setspace}\n";
 
        // amssymb.sty
        if (mustProvide("amssymb")
@@ -672,24 +577,25 @@ string const LaTeXFeatures::getPackages() const
        // natbib.sty
        if (mustProvide("natbib")) {
                packages << "\\usepackage[";
-               if (params_.getEngine() == biblio::ENGINE_NATBIB_NUMERICAL) {
+               if (params_.citeEngine() == ENGINE_NATBIB_NUMERICAL)
                        packages << "numbers";
-               } else {
+               else
                        packages << "authoryear";
-               }
                packages << "]{natbib}\n";
        }
 
        // jurabib -- we need version 0.6 at least.
-       if (mustProvide("jurabib")) {
+       if (mustProvide("jurabib"))
                packages << "\\usepackage{jurabib}[2004/01/25]\n";
-       }
+       
+       // xargs -- we need version 1.09 at least
+       if (mustProvide("xargs"))
+               packages << "\\usepackage{xargs}[2008/03/08]\n";
 
        // bibtopic -- the dot provides the aux file naming which
        // LyX can detect.
-       if (mustProvide("bibtopic")) {
+       if (mustProvide("bibtopic"))
                packages << "\\usepackage[dot]{bibtopic}\n";
-       }
 
        if (mustProvide("xy"))
                packages << "\\usepackage[all]{xy}\n";
@@ -753,14 +659,10 @@ string const LaTeXFeatures::getMacros() const
                macros << guillemotright_def << '\n';
 
        // Math mode
-       if (mustProvide("boldsymbol") && !isRequired("amsmath"))
-               macros << boldsymbol_def << '\n';
        if (mustProvide("binom") && !isRequired("amsmath"))
                macros << binom_def << '\n';
        if (mustProvide("mathcircumflex"))
                macros << mathcircumflex_def << '\n';
-       if (mustProvide("newlyxcommand"))
-               macros << newlyxcommand_def << '\n';
 
        // other
        if (mustProvide("ParagraphLeftIndent"))
@@ -839,7 +741,7 @@ docstring const LaTeXFeatures::getTClassPreamble() const
        list<docstring>::const_iterator cit = usedLayouts_.begin();
        list<docstring>::const_iterator end = usedLayouts_.end();
        for (; cit != end; ++cit) {
-               tcpreamble << tclass[*cit]->preamble();
+               tcpreamble << tclass[*cit].preamble();
        }
 
        return tcpreamble.str();
@@ -877,7 +779,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()