X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=cec1078a5658da44322eebdb2782f33f963fa962;hb=1cbac6fcb40d6e0803198624c047769adec2fe09;hp=abf7e38cae943337104af43e50eff727d58d7a44;hpb=0b31fcd083d5f75504d494102fca62530e8826d2;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index abf7e38cae..cec1078a56 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -193,6 +193,12 @@ static docstring const tabularnewline_def = from_ascii( "%% Because html converters don't know tabularnewline\n" "\\providecommand{\\tabularnewline}{\\\\}\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. // Idea from http://www.tex.ac.uk/cgi-bin/texfaq2html?label=unkgrfextn @@ -539,84 +545,48 @@ static docstring const lyxmintcaption_def = from_ascii( " \\ifx#1b\\vskip\\baselineskip\\fi\n" "}\n"); -docstring const lyxgreyedoutDef(bool const ct) -{ - odocstringstream ods; - - ods << "%% The greyedout annotation environment\n" - << "\\newenvironment{lyxgreyedout}\n" - << "{"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n" - << " {\\ignorespacesafterend\\egroup}\n"; - - return ods.str(); -} - -docstring const lyxgreyedoutRTLDef(bool const ct) -{ - odocstringstream ods; - - ods << "%% The greyedout annotation environment (with RTL support)\n" - << "\\NewEnviron{lyxgreyedout}{%\n" - << "\\if@rl%\n" - << "\\everypar{"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\textcolor{note_fontcolor}\\beginL\\ignorespaces}%\n" - << "\\BODY\\everypar{\\ignorespacesafterend\\endL}\n" - << "\\else%\n"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - << "\\BODY\\ignorespacesafterend\\egroup\n" - << "\\fi}\n"; - - return ods.str(); -} -docstring const lyxgreyedoutLuaRTLDef(bool const ct) +docstring const lyxgreyedoutDef(bool const rtl, bool const ct, bool const lua, bool const babel) { odocstringstream ods; - ods << "%% The greyedout annotation environment (with RTL support)\n" - << "\\NewEnviron{lyxgreyedout}{%\n" - << "\\if@RTL%\n" - << "\\everypar{"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" - << "\\BODY\\everypar{\\ignorespacesafterend}\n" - << "\\else%\n"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - << "\\BODY\\ignorespacesafterend\\egroup\n" - << "\\fi}\n"; - - return ods.str(); -} - -docstring const lyxgreyedoutLuaRTLBabelDef(bool const ct) -{ - 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\\textcolor{note_fontcolor}\\ignorespaces%\n"; + else + ods << " \\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 << " \\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 << "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n" + << "{\\ignorespacesafterend\\egroup}\n"; + } - ods << "%% The greyedout annotation environment (with RTL support)\n" - << "\\NewEnviron{lyxgreyedout}{%\n" - << "\\if@rl%\n" - << "\\everypar{"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" - << "\\BODY\\everypar{\\ignorespacesafterend}\n" - << "\\else%\n"; - if (ct) - ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}"; - ods << "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" - << "\\BODY\\ignorespacesafterend\\egroup\n" - << "\\fi}\n"; - return ods.str(); } @@ -1731,23 +1701,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")) { - bool const ct = mustProvide("ct-xcolor-ulem"); - // We need different version for RTL (#8647) - if (hasRTLLanguage()) { - if (runparams_.flavor == Flavor::LuaTeX) - if (useBabel()) - macros << lyxgreyedoutLuaRTLBabelDef(ct); - else - macros << lyxgreyedoutLuaRTLDef(ct); - else - macros << lyxgreyedoutRTLDef(ct); - } else - macros << lyxgreyedoutDef(ct); - } + 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';