X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=e4f563a456faf5b378792678d1b0b714979bea85;hb=f34394460a1c22937c9732f55f00aa6952764264;hp=94cdb637d03bb0a077867a3d03f2bb6e6098de20;hpb=e55aa4359f1c31065ead0de542fa134ee6acb6f7;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 94cdb637d0..e4f563a456 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -184,19 +184,19 @@ static docstring const changetracking_dvipost_def = from_ascii( "\\dvipost{osend color pop}\n" "\\dvipost{cbstart color push Blue}\n" "\\dvipost{cbend color pop}\n" - "\\newcommand{\\lyxadded}[3]{\\changestart#3\\changeend}\n" - "\\newcommand{\\lyxdeleted}[3]{%\n" + "\\DeclareRobustCommand{\\lyxadded}[3]{\\changestart#3\\changeend}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[3]{%\n" "\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n"); static docstring const changetracking_xcolor_ulem_def = from_ascii( "%% Change tracking with ulem\n" - "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}{}#3}}\n" - "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\sout{#3}}}\n"); + "\\DeclareRobustCommand{\\lyxadded}[3]{{\\color{lyxadded}{}#3}}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\sout{#3}}}\n"); static docstring const changetracking_xcolor_ulem_hyperref_def = from_ascii( "%% Change tracking with ulem\n" - "\\newcommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}{}}{}#3}}\n" - "\\newcommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\sout{#3}}{}}}\n"); + "\\DeclareRobustCommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}{}}{}#3}}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\sout{#3}}{}}}\n"); static docstring const changetracking_none_def = from_ascii( "\\newcommand{\\lyxadded}[3]{#3}\n" @@ -314,6 +314,25 @@ static docstring const rtloutputdblcol_def = from_ascii( "\\@mparswitchtrue\n"); +///////////////////////////////////////////////////////////////////// +// +// LyXHTML strings +// +///////////////////////////////////////////////////////////////////// + +static docstring const lyxnoun_style = from_ascii( + "dfn.lyxnoun {\n" + " font-variant: small-caps;\n" + "}\n"); + + +// this is how it normally renders, but it might not always do so. +static docstring const lyxstrikeout_style = from_ascii( + "del.strikeout {\n" + " text-decoration: line-through;\n" + "}\n"); + + ///////////////////////////////////////////////////////////////////// // // LaTeXFeatures @@ -327,7 +346,7 @@ LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p, {} -LaTeXFeatures::LangPackage LaTeXFeatures::langPackage(bool englishbabel) const +LaTeXFeatures::LangPackage LaTeXFeatures::langPackage() const { string const local_lp = bufferParams().lang_package; @@ -347,9 +366,6 @@ LaTeXFeatures::LangPackage LaTeXFeatures::langPackage(bool englishbabel) const * If babel is selected (either directly or via the "auto" * mechanism), we really do only require it if we have * a language that needs it. - * English alone normally does not require babel (since it is - * the default language of LaTeX). However, in some cases we - * need to surpass this exception (see Font::validate). */ bool const polyglossia_required = isRequired("polyglossia") @@ -357,8 +373,7 @@ LaTeXFeatures::LangPackage LaTeXFeatures::langPackage(bool englishbabel) const && !isProvided("babel") && this->hasOnlyPolyglossiaLanguages(); bool const babel_required = - ((englishbabel || bufferParams().language->lang() != "english") - && !bufferParams().language->babel().empty()) + !bufferParams().language->babel().empty() || !this->getBabelLanguages().empty(); if (local_lp == "auto") { @@ -501,6 +516,7 @@ bool LaTeXFeatures::isProvided(string const & name) const nomath); } + bool LaTeXFeatures::mustProvide(string const & name) const { return isRequired(name) && !isProvided(name); @@ -601,7 +617,7 @@ bool LaTeXFeatures::hasPolyglossiaExclusiveLanguages() const for (LanguageList::const_iterator cit = begin; cit != UsedLanguages_.end(); ++cit) { - if ((*cit)->babel().empty() && !(*cit)->polyglossia().empty() && (*cit)->requires().empty()) + if ((*cit)->isPolyglossiaExclusive()) return true; } return false; @@ -701,7 +717,7 @@ char const * simplefeatures[] = { "mathrsfs", "mathabx", "mathtools", - "cancel", + // "cancel", "ascii", "url", "covington", @@ -719,6 +735,21 @@ char const * simplefeatures[] = { "tfrupee" }; +char const * bibliofeatures[] = { + // Known bibliography packages (will be loaded before natbib) + "achicago", + "apacite", + "apalike", + "astron", + "authordate1-4", + "chicago", + "harvard", + "mslapa", + "named" +}; + +int const nb_bibliofeatures = sizeof(bibliofeatures) / sizeof(char const *); + int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *); } @@ -794,20 +825,25 @@ 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::const_iterator it = + params_.documentClass().packageOptions().begin(); + map::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) { if (mustProvide(simplefeatures[i])) - packages << "\\usepackage{" - << simplefeatures[i] << "}\n"; + packages << "\\usepackage{" << simplefeatures[i] << "}\n"; } - // // 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) @@ -821,6 +857,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"; // 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 @@ -849,6 +888,15 @@ string const LaTeXFeatures::getPackages() const params_.use_package("yhmath") != BufferParams::package_off) packages << "\\usepackage{yhmath}\n"; + // stmaryrd must be loaded after amsmath + if (mustProvide("stmaryrd") && + params_.use_package("stmaryrd") != BufferParams::package_off) + packages << "\\usepackage{stmaryrd}\n"; + + if (mustProvide("stackrel") && + params_.use_package("stackrel") != BufferParams::package_off) + packages << "\\usepackage{stackrel}\n"; + if (mustProvide("undertilde") && params_.use_package("undertilde") != BufferParams::package_off) packages << "\\usepackage{undertilde}\n"; @@ -888,6 +936,17 @@ string const LaTeXFeatures::getPackages() const params_.use_package("esint") != BufferParams::package_off) packages << "\\usepackage{esint}\n"; + // Known bibliography packages (simple \usepackage{package}) + for (int i = 0; i < nb_bibliofeatures; ++i) { + if (mustProvide(bibliofeatures[i])) + packages << "\\usepackage{" + << bibliofeatures[i] << "}\n"; + } + + // Compatibility between achicago and natbib + if (mustProvide("achicago") && mustProvide("natbib")) + packages << "\\let\\achicagobib\\thebibliography\n"; + // natbib.sty // Some classes load natbib themselves, but still allow (or even require) // plain numeric citations (ReVTeX is such a case, see bug 5182). @@ -901,6 +960,13 @@ string const LaTeXFeatures::getPackages() const packages << "]{natbib}\n"; } + // Compatibility between achicago and natbib + if (mustProvide("achicago") && mustProvide("natbib")) { + packages << "\\let\\thebibliography\\achicagobib\n"; + packages << "\\let\\SCcite\\astroncite\n"; + packages << "\\let\\UnexpandableProtect\\protect\n"; + } + // jurabib -- we need version 0.6 at least. if (mustProvide("jurabib")) packages << "\\usepackage{jurabib}[2004/01/25]\n"; @@ -1258,6 +1324,13 @@ docstring const LaTeXFeatures::getTClassHTMLStyles() const DocumentClass const & tclass = params_.documentClass(); odocstringstream tcpreamble; + if (mustProvide("noun")) + tcpreamble << lyxnoun_style; + // this isn't exact, but it won't hurt that much if it + // wasn't for this. + if (mustProvide("ulem")) + tcpreamble << lyxstrikeout_style; + tcpreamble << tclass.htmlstyles(); list::const_iterator cit = usedLayouts_.begin(); @@ -1280,6 +1353,7 @@ docstring const LaTeXFeatures::getTClassHTMLStyles() const namespace { + docstring const getFloatI18nPreamble(docstring const & type, docstring const & name, Language const * lang, Encoding const & enc, bool const polyglossia)