]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Fix bug #11716
[lyx.git] / src / LaTeXFeatures.cpp
index d13c35d891f5447d605cc308f48344cdd9cb0152..c1e259748b974dc3258fd4155252887d5eec81e1 100644 (file)
@@ -298,21 +298,109 @@ static docstring const changetracking_xcolor_ulem_hyperref_cb_def = from_ascii(
 
 static docstring const changetracking_tikz_object_sout_def = from_ascii(
        "%% Strike out display math and text objects with tikz\n"
-       "\\usepackage{tikz}\n"
        "\\usetikzlibrary{calc}\n"
        "\\newcommand{\\lyxobjectsout}[1]{%\n"
        "  \\bgroup%\n"
        "  \\color{lyxdeleted}%\n"
-       "  \\tikz[baseline=(obj.base)]{\n"
-       "    \\node[inner sep=0pt,outer sep=0pt](obj){#1};\n"
-       "    \\draw($(obj.south west)+(2em,.5em)$)--($(obj.north east)-(2em,.5em)$);\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");
@@ -1089,6 +1177,7 @@ char const * simplefeatures[] = {
        "tablefootnote",
        "afterpage",
        "tabularx",
+       "tikz",
        "xltabular",
        "chessboard",
        "xskak",
@@ -1218,7 +1307,11 @@ string const LaTeXFeatures::getPackages() const
        // than those above.
 
        if (mustProvide("changebar") && !mustProvide("ct-dvipost")) {
-               packages << "\\usepackage{changebar}\n";
+               packages << "\\usepackage";
+               if (runparams_.flavor == OutputParams::LATEX
+                   || runparams_.flavor == OutputParams::DVILUATEX)
+                       packages << "[dvips]";
+               packages << "{changebar}\n";
        }
 
        if (mustProvide("footnote")) {
@@ -1695,8 +1788,35 @@ TexString LaTeXFeatures::getMacros() const
                }
        }
 
-       if (mustProvide("ct-tikz-object-sout"))
+       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;