X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=a1190e0618ccd5b5d1ed4f456a9fe74209a8e0e8;hb=037b1e14789223c89e88e8bd74baffa4d0956571;hp=533f5ad69619c808fefb62134662d99f45f67180;hpb=a08cbf41cf2b3087029c19db49dfca5aa01a4b2d;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 533f5ad696..a1190e0618 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -235,43 +235,149 @@ static docstring const lyxdot_def = from_ascii( "%% A simple dot to overcome graphicx limitations\n" "\\newcommand{\\lyxdot}{.}\n"); -static docstring const changetracking_dvipost_def = from_ascii( - "%% Change tracking with dvipost\n" - "\\dvipostlayout\n" - "\\dvipost{osstart color push Red}\n" - "\\dvipost{osend color pop}\n" - "\\dvipost{cbstart color push Blue}\n" - "\\dvipost{cbend color pop}\n" - "\\DeclareRobustCommand{\\lyxadded}[4][]{\\changestart#4\\changeend}\n" - "\\DeclareRobustCommand{\\lyxdeleted}[4][]{%\n" - "\\changestart\\overstrikeon#4\\overstrikeoff\\changeend}\n"); +static docstring const changetracking_xcolor_ulem_base_def = from_ascii( + "%% Change tracking with ulem and xcolor: base macros\n" + "\\DeclareRobustCommand{\\mklyxadded}[1]{\\bgroup\\color{lyxadded}{}#1\\egroup}\n" + "\\DeclareRobustCommand{\\mklyxdeleted}[1]{\\bgroup\\color{lyxdeleted}\\mklyxsout{#1}\\egroup}\n" + "\\DeclareRobustCommand{\\mklyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n"); static docstring const changetracking_xcolor_ulem_def = from_ascii( - "%% Change tracking with ulem\n" - "\\DeclareRobustCommand{\\lyxadded}[4][]{{\\color{lyxadded}{}#4}}\n" - "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{\\color{lyxdeleted}\\lyxsout{#4}}}\n" - "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n"); + "%% Change tracking with ulem and xcolor: ct markup\n" + "\\DeclareRobustCommand{\\lyxadded}[4][]{\\mklyxadded{#4}}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[4][]{\\mklyxdeleted{#4}}\n"); + +static docstring const changetracking_xcolor_ulem_cb_def = from_ascii( + "%% Change tracking with ulem, xcolor and changebars: ct markup\n" + "\\DeclareRobustCommand{\\lyxadded}[4][]{%\n" + " \\protect\\cbstart\\mklyxadded{#4}%\n" + " \\protect\\cbend%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[4][]{%\n" + " \\protect\\cbstart\\mklyxdeleted{#4}%\n" + " \\protect\\cbend%\n" + "}\n"); static docstring const changetracking_xcolor_ulem_hyperref_def = from_ascii( - "%% Change tracking with ulem\n" - "\\DeclareRobustCommand{\\lyxadded}[4][]{{\\texorpdfstring{\\color{lyxadded}{}}{}#4}}\n" - "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{\\texorpdfstring{\\color{lyxdeleted}\\lyxsout{#4}}{}}}\n" - "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n"); - -static docstring const changetracking_tikz_math_sout_def = from_ascii( - "%% Strike out display math with tikz\n" - "\\usepackage{tikz}\n" + "%% Change tracking with ulem, xcolor, and hyperref: ct markup\n" + "\\DeclareRobustCommand{\\lyxadded}[4][]{\\texorpdfstring{\\mklyxadded{#4}}{#4}}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[4][]{\\texorpdfstring{\\mklyxdeleted{#4}}{}}\n"); + +static docstring const changetracking_xcolor_ulem_hyperref_cb_def = from_ascii( + "%% Change tracking with ulem, xcolor, hyperref and changebars: ct markup\n" + "\\DeclareRobustCommand{\\lyxadded}[4][]{%\n" + " \\texorpdfstring{\\protect\\cbstart\\mklyxadded{#4}%\n" + " \\protect\\cbend}{#4}%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxdeleted}[4][]{%\n" + " \\texorpdfstring{\\protect\\cbstart\\mklyxdeleted{#4}%\n" + " \\protect\\cbend}{}%\n" + "}\n"); + +static docstring const changetracking_tikz_object_sout_def = from_ascii( + "%% Strike out display math and text objects with tikz\n" "\\usetikzlibrary{calc}\n" - "\\newcommand{\\lyxmathsout}[1]{%\n" - " \\tikz[baseline=(math.base)]{\n" - " \\node[inner sep=0pt,outer sep=0pt](math){#1};\n" - " \\draw($(math.south west)+(2em,.5em)$)--($(math.north east)-(2em,.5em)$);\n" + "\\newcommand{\\lyxobjectsout}[1]{%\n" + " \\bgroup%\n" + " \\color{lyxdeleted}%\n" + " \\tikz{\n" + " \\node[inner sep=0pt,outer sep=0pt](lyxdelobj){#1};\n" + " \\draw($(lyxdelobj.south west)+(2em,.5em)$)--($(lyxdelobj.north east)-(2em,.5em)$);\n" " }\n" + " \\egroup%\n" + "}\n"); + +static docstring const changetracking_xcolor_ulem_object_def = from_ascii( + "%% Change tracking with ulem and xcolor: ct markup for complex objects\n" + "\\DeclareRobustCommand{\\lyxobjdeleted}[4][]{\\lyxobjectsout{#4}}\n" + "\\DeclareRobustCommand{\\lyxdisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\leavevmode\\\\%\n" + " \\lyxobjectsout{\\parbox{\\linewidth}{#4}}%\n" + " \\fi%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxudisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\leavevmode\\\\%\n" + " \\raisebox{-\\belowdisplayshortskip}{%\n" + " \\lyxobjectsout{\\parbox[b]{\\linewidth}{#4}}}%\n" + " \\leavevmode\\\\%\n" + " \\fi%\n" + "}\n"); + +static docstring const changetracking_xcolor_ulem_cb_object_def = from_ascii( + "%% Change tracking with ulem, xcolor and changebars:ct markup for complex objects\n" + "\\DeclareRobustCommand{\\lyxobjdeleted}[4][]{%\n" + " \\protect\\cbstart\\lyxobjectsout{#4}%\n" + " \\protect\\cbend%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxdisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\leavevmode\\\\%\n" + " \\protect\\cbstart%\n" + " \\lyxobjectsout{\\parbox{\\linewidth}{#4}}%\n" + " \\protect\\cbend%\n" + " \\fi%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxudisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\leavevmode\\\\%\n" + " \\raisebox{-\\belowdisplayshortskip}{%\n" + " \\protect\\cbstart%\n" + " \\lyxobjectsout{\\parbox[b]{\\linewidth}{#4}}}%\n" + " \\protect\\cbend%\n" + " \\leavevmode\\\\%\n" + " \\fi%\n" + "}\n"); + +static docstring const changetracking_xcolor_ulem_hyperref_object_def = from_ascii( + "%% Change tracking with ulem, xcolor, and hyperref: ct markup for complex objects\n" + "\\DeclareRobustCommand{\\lyxobjdeleted}[4][]{\\texorpdfstring{\\lyxobjectsout{#4}}{}}\n" + "\\DeclareRobustCommand{\\lyxdisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\texorpdfstring{\\leavevmode\\\\\\lyxobjectsout{\\parbox{\\linewidth}{#4}}}{}%\n" + " \\fi%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxudisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\texorpdfstring{\\leavevmode\\\\\\raisebox{-\\belowdisplayshortskip}{%\n" + " \\lyxobjectsout{\\parbox[b]{\\linewidth}{#4}}}}{}%\n" + " \\leavevmode\\\\%\n" + " \\fi%\n" + "}\n"); + +static docstring const changetracking_xcolor_ulem_hyperref_cb_object_def = from_ascii( + "%% Change tracking with ulem, xcolor, hyperref and changebars:\n" + "%% ct markup for complex objects\n" + "\\DeclareRobustCommand{\\lyxobjdeleted}[4][]{%\n" + " \\texorpdfstring{\\protect\\cbstart\\lyxobjectsout{#4}%\n" + " \\protect\\cbend}{}%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxdisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\texorpdfstring{\\leavevmode\\\\\\protect\\cbstart%\n" + " \\lyxobjectsout{\\parbox{\\linewidth}{#4}}%\n" + " \\protect\\cbend%\n" + " }{}%\n" + " \\fi%\n" + "}\n" + "\\DeclareRobustCommand{\\lyxudisplayobjdeleted}[4][]{%\n" + " \\ifx#4\\empty\\else%\n" + " \\texorpdfstring{\\leavevmode\\\\\\protect\\cbstart%\n" + " \\raisebox{-\\belowdisplayshortskip}{%\n" + " \\lyxobjectsout{\\parbox[b]{\\linewidth}{#4}}%\n" + " }%\n" + " \\leavevmode\\\\%\n" + " }{}%\n" + " \\fi%\n" "}\n"); static docstring const changetracking_none_def = from_ascii( + "%% Change tracking: Disable markup in output\n" "\\newcommand{\\lyxadded}[3]{#3}\n" - "\\newcommand{\\lyxdeleted}[3]{}\n"); + "\\newcommand{\\lyxdeleted}[3]{}\n" + "\\newcommand{\\lyxobjdeleted}[3]{}\n" + "\\newcommand{\\lyxdisplayobjdeleted}[3]{}\n" + "\\newcommand{\\lyxudisplayobjdeleted}[3]{}\n"); static docstring const textgreek_LGR_def = from_ascii( "\\DeclareFontEncoding{LGR}{}{}\n"); @@ -611,7 +717,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname, int level) return; Layout const & layout = tclass[layoutname]; - require(layout.requires()); + require(layout.required()); if (!layout.depends_on().empty()) { useLayout(layout.depends_on(), level + 1); @@ -638,7 +744,7 @@ void LaTeXFeatures::useInsetLayout(InsetLayout const & lay) != usedInsetLayouts_.end()) return; - require(lay.requires()); + require(lay.required()); usedInsetLayouts_.push_back(lname); } @@ -772,8 +878,8 @@ void LaTeXFeatures::useFloat(string const & name, bool subfloat) if (!fl.floattype().empty()) { if (fl.usesFloatPkg()) require("float"); - if (!fl.requires().empty()) { - vector reqs = getVectorFromString(fl.requires()); + if (!fl.required().empty()) { + vector reqs = getVectorFromString(fl.required()); for (auto const req : reqs) require(req); } @@ -785,8 +891,8 @@ void LaTeXFeatures::useLanguage(Language const * lang) { if (!lang->babel().empty() || !lang->polyglossia().empty()) UsedLanguages_.insert(lang); - if (!lang->requires().empty()) - require(lang->requires()); + if (!lang->required().empty()) + require(lang->required()); // currently only supported for Babel if (!lang->provides().empty() && useBabel()) provide(lang->provides()); @@ -1002,7 +1108,6 @@ char const * simplefeatures[] = { "float", "wrapfig", "booktabs", - "dvipost", "fancybox", "calc", "units", @@ -1048,6 +1153,7 @@ char const * simplefeatures[] = { "tablefootnote", "afterpage", "tabularx", + "tikz", "xltabular", "chessboard", "xskak", @@ -1176,6 +1282,14 @@ string const LaTeXFeatures::getPackages() const // The rest of these packages are somewhat more complicated // than those above. + if (mustProvide("changebar")) { + packages << "\\usepackage"; + if (runparams_.flavor == OutputParams::LATEX + || runparams_.flavor == OutputParams::DVILUATEX) + packages << "[dvips]"; + packages << "{changebar}\n"; + } + if (mustProvide("footnote")) { if (isRequired("hyperref")) packages << "\\usepackage{footnotehyper}\n"; @@ -1615,9 +1729,6 @@ TexString LaTeXFeatures::getMacros() const macros << lyxref_def << '\n'; // change tracking - if (mustProvide("ct-dvipost")) - macros << changetracking_dvipost_def; - if (mustProvide("ct-xcolor-ulem")) { streamsize const prec = macros.os().precision(2); @@ -1631,14 +1742,50 @@ TexString LaTeXFeatures::getMacros() const macros.os().precision(prec); - if (isRequired("hyperref")) - macros << changetracking_xcolor_ulem_hyperref_def; - else - macros << changetracking_xcolor_ulem_def; + macros << changetracking_xcolor_ulem_base_def; + + if (isRequired("changebar")) { + if (isRequired("hyperref")) + macros << changetracking_xcolor_ulem_hyperref_cb_def; + else + macros << changetracking_xcolor_ulem_cb_def; + } else { + if (isRequired("hyperref")) + macros << changetracking_xcolor_ulem_hyperref_def; + else + macros << changetracking_xcolor_ulem_def; + } } - if (mustProvide("ct-tikz-math-sout")) - macros << changetracking_tikz_math_sout_def; + if (mustProvide("ct-tikz-object-sout")) { + if (!mustProvide("ct-xcolor-ulem")) { + streamsize const prec = macros.os().precision(2); + + RGBColor cadd = rgbFromHexName(lcolor.getX11Name(Color_addedtext)); + macros << "\\providecolor{lyxadded}{rgb}{" + << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n"; + + RGBColor cdel = rgbFromHexName(lcolor.getX11Name(Color_deletedtext)); + macros << "\\providecolor{lyxdeleted}{rgb}{" + << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; + + macros.os().precision(prec); + } + + macros << changetracking_tikz_object_sout_def; + + if (isRequired("changebar")) { + if (isRequired("hyperref")) + macros << changetracking_xcolor_ulem_hyperref_cb_object_def; + else + macros << changetracking_xcolor_ulem_cb_object_def; + } else { + if (isRequired("hyperref")) + macros << changetracking_xcolor_ulem_hyperref_object_def; + else + macros << changetracking_xcolor_ulem_object_def; + } + } if (mustProvide("ct-none")) macros << changetracking_none_def;