X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=16ec4c19864517ca3e0c76aa66e652ad0b87a86f;hb=670efa8f646218f2a378f0cc614c4c37a9f6b89a;hp=562e0e2a00bc2bf6c693d472c9d03596154b40f9;hpb=af16acb0b4c5379ac87fe0c9fae384af1babdc3a;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 562e0e2a00..16ec4c1986 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -134,6 +134,24 @@ static docstring const paragraphleftindent_def = from_ascii( "}\n" "{\\end{list}}\n"); +static docstring const floatingfootnote_def = from_ascii( + "%% Special footnote code from the package 'stblftnt.sty'\n" + "%% Author: Robin Fairbairns -- Last revised Dec 13 1996\n" + "\\let\\SF@@footnote\\footnote\n" + "\\def\\footnote{\\ifx\\protect\\@typeset@protect\n" + " \\expandafter\\SF@@footnote\n" + " \\else\n" + " \\expandafter\\SF@gobble@opt\n" + " \\fi\n" + "}\n" + "\\expandafter\\def\\csname SF@gobble@opt \\endcsname{\\@ifnextchar[%]\n" + " \\SF@gobble@twobracket\n" + " \\@gobble\n" + "}\n" + "\\edef\\SF@gobble@opt{\\noexpand\\protect\n" + " \\expandafter\\noexpand\\csname SF@gobble@opt \\endcsname}\n" + "\\def\\SF@gobble@twobracket[#1]#2{}\n"); + static docstring const binom_def = from_ascii( "%% Binom macro for standard LaTeX users\n" "\\newcommand{\\binom}[2]{{#1 \\choose #2}}\n"); @@ -382,14 +400,14 @@ LaTeXFeatures::LangPackage LaTeXFeatures::langPackage() const if (local_lp == "none") return LANG_PACK_NONE; - /* If "auto" is selected, we load polyglossia if required, + /* If "auto" is selected, we load polyglossia with non-TeX fonts, * else we select babel. * 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. */ bool const polyglossia_required = - isRequired("polyglossia") + params_.useNonTeXFonts && isAvailable("polyglossia") && !isProvided("babel") && this->hasOnlyPolyglossiaLanguages(); @@ -516,24 +534,24 @@ bool LaTeXFeatures::isProvided(string const & name) const bool const ot1 = (params_.font_encoding() == "default" || params_.font_encoding() == "OT1"); - bool const complete = (params_.fonts_sans == "default") - && (params_.fonts_typewriter == "default"); - bool const nomath = (params_.fonts_math == "default"); + bool const complete = (params_.fontsSans() == "default" + && params_.fontsTypewriter() == "default"); + bool const nomath = (params_.fontsMath() == "default"); return params_.documentClass().provides(name) || theLaTeXFonts().getLaTeXFont( - from_ascii(params_.fonts_roman)).provides(name, ot1, + from_ascii(params_.fontsRoman())).provides(name, ot1, complete, nomath) || theLaTeXFonts().getLaTeXFont( - from_ascii(params_.fonts_sans)).provides(name, ot1, + from_ascii(params_.fontsSans())).provides(name, ot1, complete, nomath) || theLaTeXFonts().getLaTeXFont( - from_ascii(params_.fonts_typewriter)).provides(name, ot1, + from_ascii(params_.fontsTypewriter())).provides(name, ot1, complete, nomath) || theLaTeXFonts().getLaTeXFont( - from_ascii(params_.fonts_math)).provides(name, ot1, + from_ascii(params_.fontsMath())).provides(name, ot1, complete, nomath); // TODO: "textbaltic" provided, if the font-encoding is "L7x" @@ -561,11 +579,12 @@ bool LaTeXFeatures::isAvailable(string const & name) } -void LaTeXFeatures::addPreambleSnippet(string const & preamble) +void LaTeXFeatures::addPreambleSnippet(string const & preamble, + bool allowdupes) { SnippetList::const_iterator begin = preamble_snippets_.begin(); SnippetList::const_iterator end = preamble_snippets_.end(); - if (find(begin, end, preamble) == end) + if (allowdupes || find(begin, end, preamble) == end) preamble_snippets_.push_back(preamble); } @@ -711,8 +730,9 @@ set LaTeXFeatures::getEncodingSet(string const & doc_encoding) const void LaTeXFeatures::getFontEncodings(vector & encodings) const { - // these must be loaded if glyphs of this script - // are used (notwithstanding the language) + // these must be loaded if glyphs of this script are used + // unless a language providing them is used in the document + // FIXME: currently the option is written twice in this case if (mustProvide("textgreek")) encodings.insert(encodings.begin(), "LGR"); if (mustProvide("textcyr")) @@ -796,7 +816,8 @@ char const * simplefeatures[] = { "pdfcomment", "fixme", "todonotes", - "forest" + "forest", + "varwidth" }; char const * bibliofeatures[] = { @@ -933,7 +954,7 @@ string const LaTeXFeatures::getPackages() const string const amsPackages = loadAMSPackages(); bool const ot1 = (params_.font_encoding() == "default" || params_.font_encoding() == "OT1"); bool const use_newtxmath = - theLaTeXFonts().getLaTeXFont(from_ascii(params_.fonts_math)).getUsedPackage( + theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage( ot1, false, false) == "newtxmath"; if (!params_.useNonTeXFonts && !use_newtxmath && !amsPackages.empty()) @@ -1112,6 +1133,10 @@ string const LaTeXFeatures::getPackages() const if (mustProvide("footmisc")) packages << "\\PassOptionsToPackage{stable}{footmisc}\n"; + if (mustProvide("microtype")){ + packages << "\\usepackage{microtype}\n"; + } + return packages.str(); } @@ -1254,6 +1279,8 @@ docstring const LaTeXFeatures::getMacros() const // other if (mustProvide("ParagraphLeftIndent")) macros << paragraphleftindent_def; + if (mustProvide("NeedLyXFootnoteCode")) + macros << floatingfootnote_def; // some problems with tex->html converters if (mustProvide("NeedTabularnewline"))