X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=d5163a09d4328c7ec2a5bc3cdf41d464baaac6eb;hb=559c2f648239fff4fec769b34b30ccff23491e31;hp=c5f73a9cdf4e1cadead2ccabf85a0f096e6d3c3a;hpb=4ce743a0a77d85d5e1722a3f2854ce163e40b353;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index c5f73a9cdf..d5163a09d4 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -31,13 +31,6 @@ #include "frontends/controllers/frontend_helpers.h" -namespace lyx { - -using support::isSGMLFilename; -using support::libFileSearch; -using support::makeRelPath; -using support::onlyPath; - using std::endl; using std::find; using std::string; @@ -46,6 +39,14 @@ using std::ostream; using std::ostringstream; using std::set; + +namespace lyx { + +using support::isSGMLFilename; +using support::libFileSearch; +using support::makeRelPath; +using support::onlyPath; + ///////////////////////////////////////////////////////////////////// // // Strings @@ -178,18 +179,13 @@ static string const changetracking_dvipost_def = "\\dvipost{osend color pop}\n" "\\dvipost{cbstart color push Blue}\n" "\\dvipost{cbend color pop}\n" - "\\newcommand{\\lyxinserted}[3]{\\changestart#3\\changeend}\n" + "\\newcommand{\\lyxadded}[3]{\\changestart#3\\changeend}\n" "\\newcommand{\\lyxdeleted}[3]{%\n" "\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n"; -// TODO -//static string const changetracking_soul_def = -// "\\newcommand{\\lyxinserted}[3]{\\uwave{\\textcolor{blue}{#3}}}\n" -// "\\newcommand{\\lyxdeleted}[3]{\\sout{\\textcolor{red}{#3}}}"; - static string const changetracking_none_def = - "\\newcommand{\\lyxinserted}[3]{#3}\n" - "\\newcommand{\\lyxdeleted}[3]{}"; + "\\newcommand{\\lyxadded}[3]{#3}\n" + "\\newcommand{\\lyxdeleted}[3]{}\n"; ///////////////////////////////////////////////////////////////////// @@ -259,7 +255,7 @@ void LaTeXFeatures::getAvailable() } -void LaTeXFeatures::useLayout(string const & layoutname) +void LaTeXFeatures::useLayout(docstring const & layoutname) { // Some code to avoid loops in dependency definition static int level = 0; @@ -267,15 +263,15 @@ void LaTeXFeatures::useLayout(string const & layoutname) if (level > maxlevel) { lyxerr << "LaTeXFeatures::useLayout: maximum level of " << "recursion attained by layout " - << layoutname << endl; + << to_utf8(layoutname) << endl; return; } TextClass const & tclass = params_.getTextClass(); if (tclass.hasLayout(layoutname)) { // Is this layout already in usedLayouts? - list::const_iterator cit = usedLayouts_.begin(); - list::const_iterator end = usedLayouts_.end(); + list::const_iterator cit = usedLayouts_.begin(); + list::const_iterator end = usedLayouts_.end(); for (; cit != end; ++cit) { if (layoutname == *cit) return; @@ -290,7 +286,7 @@ void LaTeXFeatures::useLayout(string const & layoutname) usedLayouts_.push_back(layoutname); } else { lyxerr << "LaTeXFeatures::useLayout: layout `" - << layoutname << "' does not exist in this class" + << to_utf8(layoutname) << "' does not exist in this class" << endl; } @@ -393,6 +389,7 @@ set LaTeXFeatures::getEncodingSet(string const & doc_encoding) const namespace { char const * simplefeatures[] = { +// note that the package order here will be the same in the LaTeX-output "array", "verbatim", "longtable", @@ -411,7 +408,17 @@ char const * simplefeatures[] = { "nicefrac", "tipa", "framed", + "pdfcolmk", + "soul", "textcomp", + "xcolor", + "pmboxdraw", + "bbding", + "ifsym", + "marvosym", + "txfonts", + "mathrsfs", + "ascii", }; int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *); @@ -439,8 +446,11 @@ string const LaTeXFeatures::getPackages() const // than those above. // - if (mustProvide("amsmath") - && params_.use_amsmath != BufferParams::package_off) { + // esint is preferred for esintoramsmath + if ((mustProvide("amsmath") && + params_.use_amsmath != BufferParams::package_off) || + (mustProvide("esintoramsmath") && + params_.use_esint == BufferParams::package_off)) { packages << "\\usepackage{amsmath}\n"; } @@ -448,11 +458,12 @@ string const LaTeXFeatures::getPackages() const // are used // wasysym redefines some integrals (e.g. iint) from amsmath. That // leads to inconsistent integrals. We only load this package if - // esint is used, since esint redefines all relevant integral - // symbols from wasysym and amsmath. + // 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://bugzilla.lyx.org/show_bug.cgi?id=1942 - if (mustProvide("wasysym") && isRequired("esint") && - params_.use_esint != BufferParams::package_off) + if (mustProvide("wasysym") && + (params_.use_esint != BufferParams::package_off || !isRequired("esint"))) packages << "\\usepackage{wasysym}\n"; // color.sty @@ -482,10 +493,18 @@ string const LaTeXFeatures::getPackages() const << "]{graphicx}\n"; } // shadecolor for shaded - if (mustProvide("framed")) { + if (mustProvide("framed") && mustProvide("color")) { RGBColor c = RGBColor(lcolor.getX11Name(Color::shadedbg)); - packages << "\\definecolor{shadecolor}{rgb}{" - << c.r/255 << ',' << c.g/255 << ',' << c.b/255 << "}\n"; + //255.0 to force conversion to double + //NOTE As Jürgen Spitzmüller pointed out, an alternative would be + //to use the xcolor package instead, and then we can do + // \define{shadcolor}{RGB}... + //and not do any conversion. We'd then need to require xcolor + //in InsetNote::validate(). + int const stmSize = packages.precision(2); + packages << "\\definecolor{shadecolor}{rgb}{" + << c.r / 255.0 << ',' << c.g / 255.0 << ',' << c.b / 255.0 << "}\n"; + packages.precision(stmSize); } // lyxskak.sty --- newer chess support based on skak.sty @@ -518,14 +537,14 @@ string const LaTeXFeatures::getPackages() const } // amssymb.sty - if (mustProvide("amssymb") + if (mustProvide("amssymb") || params_.use_amsmath == BufferParams::package_on) packages << "\\usepackage{amssymb}\n"; // esint must be after amsmath and wasysym, since it will redeclare // inconsistent integral symbols - if (mustProvide("esint") - && params_.use_esint != BufferParams::package_off) + if ((mustProvide("esint") || mustProvide("esintoramsmath")) && + params_.use_esint != BufferParams::package_off) packages << "\\usepackage{esint}\n"; // url.sty @@ -563,15 +582,15 @@ string const LaTeXFeatures::getPackages() const // but don't use the compatibility option since it is // incompatible to other packages. packages << "\\usepackage{nomencl}\n" - "% the following is useful when we have the old nomencl.sty package\n" - "\\providecommand{\\printnomenclature}{\\printglossary}\n" - "\\providecommand{\\makenomenclature}{\\makeglossary}\n" - "\\makenomenclature\n"; + "% the following is useful when we have the old nomencl.sty package\n" + "\\providecommand{\\printnomenclature}{\\printglossary}\n" + "\\providecommand{\\makenomenclature}{\\makeglossary}\n" + "\\makenomenclature\n"; } if (mustProvide("listings")) packages << "\\usepackage{listings}\n"; - + return packages.str(); } @@ -643,10 +662,28 @@ string const LaTeXFeatures::getMacros() const getFloatDefinitions(macros); // change tracking - if (mustProvide("dvipost")) + if (mustProvide("ct-dvipost")) { macros << changetracking_dvipost_def; - if (mustProvide("ct-none")) + } + if (mustProvide("ct-xcolor-soul")) { + int const prec = macros.precision(2); + + RGBColor cadd = RGBColor(lcolor.getX11Name(Color::addedtext)); + macros << "\\providecolor{lyxadded}{rgb}{" + << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n"; + + RGBColor cdel = RGBColor(lcolor.getX11Name(Color::deletedtext)); + macros << "\\providecolor{lyxdeleted}{rgb}{" + << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; + + macros.precision(prec); + + macros << "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}#3}}\n" + << "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\st{#3}}}\n"; + } + if (mustProvide("ct-none")) { macros << changetracking_none_def; + } return macros.str(); } @@ -676,8 +713,8 @@ docstring const LaTeXFeatures::getTClassPreamble() const tcpreamble << tclass.preamble(); - list::const_iterator cit = usedLayouts_.begin(); - list::const_iterator end = usedLayouts_.end(); + list::const_iterator cit = usedLayouts_.begin(); + list::const_iterator end = usedLayouts_.end(); for (; cit != end; ++cit) { tcpreamble << tclass[*cit]->preamble(); }