X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=bcf9ddc82d7c1cf4cf5391bb70260bce7548d1db;hb=48d9d01a826eb9f1c1e7c62edb664ec97f6a6e8d;hp=3acbe41df2740180d892048b15563230b20e6bbf;hpb=e3c1fc2ad522d917ca4b9c09527eb1882c199c9b;p=features.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 3acbe41df2..bcf9ddc82d 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -193,44 +193,11 @@ static docstring const tabularnewline_def = from_ascii( "%% Because html converters don't know tabularnewline\n" "\\providecommand{\\tabularnewline}{\\\\}\n"); -static docstring const lyxgreyedout_def = from_ascii( - "%% The greyedout annotation environment\n" - "\\newenvironment{lyxgreyedout}\n" - " {\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n" - " {\\ignorespacesafterend\\egroup}\n"); - -static docstring const lyxgreyedout_rtl_def = from_ascii( - "%% The greyedout annotation environment (with RTL support)\n" - "\\NewEnviron{lyxgreyedout}{%\n" - "\\if@rl%\n" - "\\everypar{\\textcolor{note_fontcolor}\\beginL\\ignorespaces}%\n" - "\\BODY\\everypar{\\ignorespacesafterend\\endL}\n" - "\\else%\n" - "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - "\\BODY\\ignorespacesafterend\\egroup\n" - "\\fi}\n"); - -static docstring const lyxgreyedout_luartl_def = from_ascii( - "%% The greyedout annotation environment (with RTL support)\n" - "\\NewEnviron{lyxgreyedout}{%\n" - "\\if@RTL%\n" - "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" - "\\BODY\\everypar{\\ignorespacesafterend}\n" - "\\else%\n" - "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - "\\BODY\\ignorespacesafterend\\egroup\n" - "\\fi}\n"); - -static docstring const lyxgreyedout_luartl_babel_def = from_ascii( - "%% The greyedout annotation environment (with RTL support)\n" - "\\NewEnviron{lyxgreyedout}{%\n" - "\\if@rl%\n" - "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" - "\\BODY\\everypar{\\ignorespacesafterend}\n" - "\\else%\n" - "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - "\\BODY\\ignorespacesafterend\\egroup\n" - "\\fi}\n"); +static docstring const cellvarwidth_def = from_ascii( + "%% Variable width box for table cells\n" + "\\newenvironment{cellvarwidth}[1][t]\n" + " {\\begin{varwidth}[#1]{\\linewidth}}\n" + " {\\@finalstrut\\@arstrutbox\\end{varwidth}}\n"); // We want to omit the file extension for includegraphics, but this does not // work when the filename contains other dots. @@ -503,6 +470,7 @@ static docstring const textschwa_def = from_ascii( // split-level fractions static docstring const xfrac_def = from_ascii( "\\usepackage{xfrac}\n"); + static docstring const smallLetterFrac_def = from_ascii( "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{default}{text}\n" " {phantom=c, scale-factor=1.0, slash-left-kern=-.05em}\n" @@ -578,6 +546,52 @@ static docstring const lyxmintcaption_def = from_ascii( "}\n"); +docstring const lyxgreyedoutDef(bool const rtl, bool const ct, bool const lua, bool const babel) +{ + odocstringstream ods; + + if (rtl) { + ods << "%% The greyedout annotation environment (with RTL support)\n" + << "\\NewEnviron{lyxgreyedout}{%\n"; + if (lua && !babel) + // luabidi uses this switch + ods << " \\if@RTL%\n"; + else + ods << " \\if@rl%\n"; + ods << " \\everypar{%\n"; + if (lua) + ods << " \\pardir TRT \\textdir TRT\\normalfont\\normalsize\\textcolor{note_fontcolor}\\ignorespaces%\n"; + else + ods << " \\normalfont\\normalsize\\textcolor{note_fontcolor}\\beginL\\ignorespaces%\n"; + ods << " }%\n"; + if (ct) + ods << " \\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n"; + if (lua) + ods << " \\BODY\\everypar{\\ignorespacesafterend}%\n"; + else + ods << " \\BODY\\everypar{\\ignorespacesafterend\\endL}%\n"; + ods << " \\else%\n"; + if (ct) + ods << " \\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n"; + ods << " \\normalfont\\normalsize\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" + << " \\BODY\\ignorespacesafterend\\egroup%\n" + << " \\fi%\n" + << "}\n"; + } else { + ods << "%% The greyedout annotation environment\n" + << "\\newenvironment{lyxgreyedout}\n" + << "{"; + if (ct) + ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n "; + ods << "\\normalfont\\normalsize\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n" + << "{\\ignorespacesafterend\\egroup}\n"; + } + + return ods.str(); +} + + + ///////////////////////////////////////////////////////////////////// // // LyXHTML strings @@ -769,8 +783,8 @@ bool LaTeXFeatures::isProvided(string const & name) const if (params_.useNonTeXFonts) return params_.documentClass().provides(name); - bool const ot1 = (params_.main_font_encoding() == "default" - || params_.main_font_encoding() == "OT1"); + bool const ot1 = (runparams().main_fontenc == "default" + || runparams().main_fontenc == "OT1"); bool const complete = (params_.fontsSans() == "default" && params_.fontsTypewriter() == "default"); bool const nomath = (params_.fontsMath() == "default"); @@ -823,7 +837,7 @@ void addSnippet(std::list & list, TexString ts, bool allow_dupes) return ts.str == ts2.str; }) ) - list.push_back(move(ts)); + list.push_back(std::move(ts)); } @@ -840,7 +854,7 @@ TexString getSnippets(std::list const & list) void LaTeXFeatures::addPreambleSnippet(TexString snippet, bool allow_dupes) { - addSnippet(preamble_snippets_, move(snippet), allow_dupes); + addSnippet(preamble_snippets_, std::move(snippet), allow_dupes); } @@ -1301,8 +1315,8 @@ string const LaTeXFeatures::getPackages() const // if fontspec or newtxmath is used, AMS packages have to be loaded // before fontspec (in BufferParams) string const amsPackages = loadAMSPackages(); - bool const ot1 = (params_.main_font_encoding() == "default" - || params_.main_font_encoding() == "OT1"); + bool const ot1 = (runparams().main_fontenc == "default" + || runparams().main_fontenc == "OT1"); bool const use_newtxmath = theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage( ot1, false, false) == "newtxmath"; @@ -1497,7 +1511,8 @@ string const LaTeXFeatures::getPackages() const } // fixltx2e provides subscript - if (mustProvide("subscript") && !isRequired("fixltx2e")) + if (mustProvide("subscript") && !isRequired("fixltx2e") + && !isAvailable("LaTeX-2005/12/01")) packages << "\\usepackage{subscript}\n"; // footmisc must be loaded after setspace @@ -1570,15 +1585,15 @@ TexString LaTeXFeatures::getMacros() const macros << lyxZWSP_def << '\n'; if (!usePolyglossia() && mustProvide("textgreek")) { - // ensure LGR font encoding is defined also if fontenc is not loaded by LyX - if (params_.main_font_encoding() == "default") + // ensure LGR font encoding is defined also if fontenc is not loaded by LyX + if (runparams().main_fontenc == "default") macros << textgreek_LGR_def; macros << textgreek_def << '\n'; } if (!usePolyglossia() && mustProvide("textcyrillic")) { // ensure T2A font encoding is set up also if fontenc is not loaded by LyX - if (params_.main_font_encoding() == "default") + if (runparams().main_fontenc == "default") macros << textcyr_T2A_def; macros << textcyr_def << '\n'; } @@ -1687,22 +1702,17 @@ TexString LaTeXFeatures::getMacros() const if (mustProvide("NeedTabularnewline")) macros << tabularnewline_def; + if (mustProvide("cellvarwidth")) + macros << cellvarwidth_def; + // greyed-out environment (note inset) // the color is specified in the routine // getColorOptions() to avoid LaTeX-package clashes - if (mustProvide("lyxgreyedout")) { - // We need different version for RTL (#8647) - if (hasRTLLanguage()) { - if (runparams_.flavor == Flavor::LuaTeX) - if (useBabel()) - macros << lyxgreyedout_luartl_babel_def; - else - macros << lyxgreyedout_luartl_def; - else - macros << lyxgreyedout_rtl_def; - } else - macros << lyxgreyedout_def; - } + if (mustProvide("lyxgreyedout")) + // We need different version for RTL (#8647), with change tracking (#12025) + // and for some specific engine/language package combinations + macros << lyxgreyedoutDef(hasRTLLanguage(), mustProvide("ct-xcolor-ulem"), + (runparams_.flavor == Flavor::LuaTeX), useBabel()); if (mustProvide("lyxdot")) macros << lyxdot_def << '\n'; @@ -1717,11 +1727,11 @@ TexString LaTeXFeatures::getMacros() const if (mustProvide("ct-xcolor-ulem")) { streamsize const prec = macros.os().precision(2); - RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext)); + RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext_output)); macros << "\\providecolor{lyxadded}{rgb}{" << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n"; - RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext)); + RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext_output)); macros << "\\providecolor{lyxdeleted}{rgb}{" << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; @@ -1746,11 +1756,11 @@ TexString LaTeXFeatures::getMacros() const if (!mustProvide("ct-xcolor-ulem")) { streamsize const prec = macros.os().precision(2); - RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext)); + RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext_output)); macros << "\\providecolor{lyxadded}{rgb}{" << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n"; - RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext)); + RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext_output)); macros << "\\providecolor{lyxdeleted}{rgb}{" << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n";