Protect underlined \ref{} commands by enclosing them in \mbox{}.

This is the same protection used for \cite{}. Although "ulem" commands
don't strictly need this protection with \ref{} and friends, this helps
when one wants to use another package souch as "soul".
Indeed, ulem's \uline{} doesn't hyphenate words, while soul's \ul{} does,
and thus the output is much nicer.

With this patch, replacing ulem with soul is as simple as adding
\usepackage{soul}
\renewcommand{\uline}[1]{\ul{#1}}
to the preamble, without worrying about manually enclosing in \mbox the
\ref commands. In any case, the output from ulem remains unchanged.

Another possibility offered by soul is that of typesetting as
"yellow highlighted" the underlined text. This is achieved by adding
\usepackage{color,soul}
\renewcommand{\uline}[1]{\hl{#1}}
to the preamble.
This commit is contained in:
Enrico Forestieri 2012-08-30 14:09:23 +02:00
parent 458c143e49
commit 91afc2430d

View File

@ -142,6 +142,9 @@ void InsetRef::latex(otexstream & os, OutputParams const & rp) const
string const cmd = getCmdName(); string const cmd = getCmdName();
docstring const data = getEscapedLabel(rp); docstring const data = getEscapedLabel(rp);
if (rp.inulemcmd)
os << "\\mbox{";
if (cmd == "eqref" && buffer().params().use_refstyle) { if (cmd == "eqref" && buffer().params().use_refstyle) {
// we advertise this as printing "(n)", so we'll do that, at least // we advertise this as printing "(n)", so we'll do that, at least
// for refstyle, since refstlye's own \eqref prints, by default, // for refstyle, since refstlye's own \eqref prints, by default,
@ -163,6 +166,9 @@ void InsetRef::latex(otexstream & os, OutputParams const & rp) const
p["reference"] = ref; p["reference"] = ref;
os << p.getCommand(rp); os << p.getCommand(rp);
} }
if (rp.inulemcmd)
os << "}";
} }