]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
thinko
[lyx.git] / src / LaTeXFeatures.cpp
index 533f5ad69619c808fefb62134662d99f45f67180..a1190e0618ccd5b5d1ed4f456a9fe74209a8e0e8 100644 (file)
@@ -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<string> reqs = getVectorFromString(fl.requires());
+               if (!fl.required().empty()) {
+                       vector<string> 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;