Jürgen Spitzmüller schrieb:
Michael Gerz wrote:
After some (short) investigation, I came to the conclusion that using
the colors defined within LyX is not that trivial.
Why? Look at shadecolor (in LaTeXFeatures.cpp) for a model.
Something like (untested):
Ah, learning from the expert!
Thanks, Jürgen. Are you happy with the attached patch?
Michael
Index: src/Changes.cpp
===================================================================
--- src/Changes.cpp (Revision 18282)
+++ src/Changes.cpp (Arbeitskopie)
@@ -303,7 +303,7 @@
int column = 0;
if (oldChange.type != Change::UNCHANGED) {
- os << '}'; // close \lyxinserted or \lyxdeleted
+ os << '}'; // close \lyxadded or \lyxdeleted
column++;
}
@@ -318,7 +318,7 @@
os << str;
column += str.size();
} else if (change.type == Change::INSERTED) {
- docstring str = "\\lyxinserted{" +
+ docstring str = "\\lyxadded{" +
bparams.authors().get(change.author).name() + "}{" +
chgTime + "}{";
os << str;
Index: src/Color.h
===================================================================
--- src/Color.h (Revision 18282)
+++ src/Color.h (Arbeitskopie)
@@ -153,10 +153,10 @@
appendix,
/// changebar color
changebar,
- /// strike-out color
- strikeout,
+ /// deleted text color
+ deletedtext,
/// added text color
- newtext,
+ addedtext,
/// Top and bottom line color
topline,
/// Table line color
Index: src/insets/InsetTabular.cpp
===================================================================
--- src/insets/InsetTabular.cpp (Revision 18282)
+++ src/insets/InsetTabular.cpp (Arbeitskopie)
@@ -3105,8 +3105,8 @@
Color::color onoffcol = Color::tabularonoffline;
if (erased) {
- col = Color::strikeout;
- onoffcol = Color::strikeout;
+ col = Color::deletedtext;
+ onoffcol = Color::deletedtext;
}
if (!tabular.topAlreadyDrawn(cell)) {
Index: src/BufferView.cpp
===================================================================
--- src/BufferView.cpp (Revision 18282)
+++ src/BufferView.cpp (Arbeitskopie)
@@ -891,18 +891,22 @@
case LFUN_CHANGES_OUTPUT:
buffer_->params().outputChanges = !buffer_->params().outputChanges;
if (buffer_->params().outputChanges) {
- if (!LaTeXFeatures::isAvailable("dvipost")) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (!dvipost && !xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output, "
- "because dvipost is not installed.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
- } else {
+ "because neither dvipost nor xcolor/soul are installed.\n"
+ "Please install these packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ } else if (!xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output "
- "when using pdflatex.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
+ "when using pdflatex, because xcolor and soul are not installed.\n"
+ "Please install both packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
}
}
break;
Index: src/LaTeXFeatures.cpp
===================================================================
--- src/LaTeXFeatures.cpp (Revision 18282)
+++ src/LaTeXFeatures.cpp (Arbeitskopie)
@@ -178,18 +178,13 @@
"\\dvipost{osend color pop}\n"
"\\dvipost{cbstart color push Blue}\n"
"\\dvipost{cbend color pop}\n"
- "\\newcommand{\\lyxinserted}[3]{\\changestart#3\\changeend}\n"
+ "\\newcommand{\\lyxadded}[3]{\\changestart#3\\changeend}\n"
"\\newcommand{\\lyxdeleted}[3]{%\n"
"\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n";
-// TODO
-//static string const changetracking_soul_def =
-// "\\newcommand{\\lyxinserted}[3]{\\uwave{\\textcolor{blue}{#3}}}\n"
-// "\\newcommand{\\lyxdeleted}[3]{\\sout{\\textcolor{red}{#3}}}";
-
static string const changetracking_none_def =
- "\\newcommand{\\lyxinserted}[3]{#3}\n"
- "\\newcommand{\\lyxdeleted}[3]{}";
+ "\\newcommand{\\lyxadded}[3]{#3}\n"
+ "\\newcommand{\\lyxdeleted}[3]{}\n";
/////////////////////////////////////////////////////////////////////
@@ -411,7 +406,10 @@
"nicefrac",
"tipa",
"framed",
+ "pdfcolmk",
+ "soul",
"textcomp",
+ "xcolor",
};
int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *);
@@ -643,10 +641,24 @@
getFloatDefinitions(macros);
// change tracking
- if (mustProvide("dvipost"))
+ if (mustProvide("ct-dvipost")) {
macros << changetracking_dvipost_def;
- if (mustProvide("ct-none"))
+ }
+ if (mustProvide("ct-xcolor-soul")) {
+ RGBColor cadd = RGBColor(lcolor.getX11Name(Color::addedtext));
+ macros << "\\providecolor{lyxadded}{rgb}{"
+ << cadd.r/255 << ',' << cadd.g/255 << ',' << cadd.b/255 << "}\n";
+
+ RGBColor cdel = RGBColor(lcolor.getX11Name(Color::deletedtext));
+ macros << "\\providecolor{lyxdeleted}{rgb}{"
+ << cdel.r/255 << ',' << cdel.g/255 << ',' << cdel.b/255 << "}\n";
+
+ macros << "\\newcommand{\\lyxadded}[3]{\\textcolor{lyxadded}{#3}}\n"
+ << "\\newcommand{\\lyxdeleted}[3]{\\textcolor{lyxdeleted}{\\st{#3}}}\n";
+ }
+ if (mustProvide("ct-none")) {
macros << changetracking_none_def;
+ }
return macros.str();
}
Index: src/rowpainter.cpp
===================================================================
--- src/rowpainter.cpp (Revision 18282)
+++ src/rowpainter.cpp (Arbeitskopie)
@@ -368,9 +368,9 @@
if (prev_change != Change::UNCHANGED) {
Font copy(font);
if (prev_change == Change::DELETED) {
- copy.setColor(Color::strikeout);
+ copy.setColor(Color::deletedtext);
} else if (prev_change == Change::INSERTED) {
- copy.setColor(Color::newtext);
+ copy.setColor(Color::addedtext);
}
x_ += pain_.text(int(x_), yo_, s, copy);
} else {
@@ -669,7 +669,7 @@
if (par_.isInserted(par_.size()) || par_.isDeleted(par_.size())) {
FontMetrics const & fm = theFontMetrics(bv_.buffer()->params().getFont());
int const length = fm.maxAscent() / 2;
- Color::color col = par_.isInserted(par_.size()) ? Color::newtext : Color::strikeout;
+ Color::color col = par_.isInserted(par_.size()) ? Color::addedtext : Color::deletedtext;
pain_.line(int(x_) + 1, yo_ + 2, int(x_) + 1, yo_ + 2 - length, col,
Painter::line_solid, Painter::line_thick);
@@ -779,7 +779,7 @@
= theFontMetrics(bv_.buffer()->params().getFont());
int const middle = yo_ - fm.maxAscent() / 3;
pain_.line(last_strikeout_x, middle, int(x_), middle,
- Color::strikeout, Painter::line_solid, Painter::line_thin);
+ Color::deletedtext, Painter::line_solid, Painter::line_thin);
running_strikeout = false;
}
@@ -834,7 +834,7 @@
= theFontMetrics(bv_.buffer()->params().getFont());
int const middle = yo_ - fm.maxAscent() / 3;
pain_.line(last_strikeout_x, middle, int(x_), middle,
- Color::strikeout, Painter::line_solid, Painter::line_thin);
+ Color::deletedtext, Painter::line_solid, Painter::line_thin);
running_strikeout = false;
}
}
Index: src/Buffer.cpp
===================================================================
--- src/Buffer.cpp (Revision 18282)
+++ src/Buffer.cpp (Arbeitskopie)
@@ -506,18 +506,22 @@
}
if (params().outputChanges) {
- if (!LaTeXFeatures::isAvailable("dvipost")) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (!dvipost && !xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output, "
- "because dvipost is not installed.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
- } else {
+ "because neither dvipost nor xcolor/soul are installed.\n"
+ "Please install these packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ } else if (!xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output "
- "when using pdflatex.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
+ "when using pdflatex, because xcolor and soul are not installed.\n"
+ "Please install both packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
}
}
@@ -1215,14 +1219,30 @@
TextClass const & tclass = params().getTextClass();
if (params().outputChanges) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
if (features.runparams().flavor == OutputParams::LATEX) {
- if (LaTeXFeatures::isAvailable("dvipost")) {
+ if (dvipost) {
+ features.require("ct-dvipost");
features.require("dvipost");
+ } else if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ } else {
+ features.require("ct-none");
+ }
+ } else if (features.runparams().flavor == OutputParams::PDFLATEX ) {
+ if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ features.require("pdfcolmk"); // improves color handling in PDF output
} else {
features.require("ct-none");
}
- } else if (features.runparams().flavor == OutputParams::PDFLATEX ) {
- features.require("ct-none");
}
}
Index: src/Color.cpp
===================================================================
--- src/Color.cpp (Revision 18282)
+++ src/Color.cpp (Arbeitskopie)
@@ -309,8 +309,8 @@
{ eolmarker, N_("end-of-line marker"), "eolmarker", "Brown", "eolmarker" },
{ appendix, N_("appendix marker"), "appendix", "Brown", "appendix" },
{ changebar, N_("change bar"), "changebar", "Blue", "changebar" },
- { strikeout, N_("Deleted text"), "strikeout", "Red", "strikeout" },
- { newtext, N_("Added text"), "newtext", "Blue", "newtext" },
+ { deletedtext, N_("Deleted text"), "deletedtext", "Red", "deletedtext" },
+ { addedtext, N_("Added text"), "addedtext", "Blue", "addedtext" },
{ added_space, N_("added space markers"), "added_space", "Brown", "added_space" },
{ topline, N_("top/bottom line"), "topline", "Brown", "topline" },
{ tabularline, N_("table line"), "tabularline", "black",
Index: lib/chkconfig.ltx
===================================================================
--- lib/chkconfig.ltx (Revision 18282)
+++ lib/chkconfig.ltx (Arbeitskopie)
@@ -238,14 +238,17 @@
\TestPackage{longtable}
\TestPackage{natbib}
\TestPackage{nomencl}
+\TestPackage{pdfcolmk}
\TestPackage{prettyref}
\TestPackage{preview}
\TestPackage{rotating}
\TestPackage{setspace}
+\TestPackage{soul}
\TestPackage{subfigure}
\TestPackage{textcomp}
\TestPackage{varioref}
\TestPackage{url}
+\TestPackage{xcolor}
% The test for the graphics package is slightly more involved...
\newcommand\groption{dvips}