在我的文档中,我需要使用不同的颜色来突出显示文本。soul 包默认提供黄色。可以使用命令切换颜色\sethlcolor
。但是,这在图形标题中无法正常工作。
示例代码:
\documentclass[]{article}
\usepackage{soul}
\usepackage{color}
\newcommand{\hlcyan}[1]{{\sethlcolor{cyan}\hl{#1}}}
\begin{document}
An example of \hlcyan{highlighted words with hlcyan} in a normal paragraph.
\begin{figure}
\caption{A minimal caption in a figure environment with some
\hlcyan{highlighted text via the newly defined hlcyan command}
and a few remaining words.}
\end{figure}
\end{document}
基于 - 的方法\sethlcolor
在普通段落中有效。它在图形标题中也“有效”,即生成的 PDF 具有正确的突出显示(请参阅下面的图像)。但是,pdflatex
会抛出以下错误消息:
[...]
(c:/texlive/2014/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
)
! Argument of \@textcolor has an extra }.
<inserted text>
\par
l.11 ...lcyan command} and a few remaining words.}
Runaway argument?
! Paragraph ended before \@textcolor was complete.
<to be read again>
\par
l.11 ...lcyan command} and a few remaining words.}
[1{c:/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./doc.aux) )
(see the transcript file for additional information)<c:/texlive/2014/texmf-dist
/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on doc.pdf (1 page, 16490 bytes).
[...]
补充笔记:
- 在图标题中使用 plain
hl{...}
不会产生错误。 - 直接
{\sethlcolor{cyan}\hl{...}}
在图片标题中使用会引发同样的错误。也就是说,该错误与新命令的定义无关。 - 其实我做想要为不同的颜色定义自己的命令,这就是我将其包含在示例中的原因。
我将不胜感激任何指点。应该有一种方法可以让灵魂使用不同的颜色而不改变其行为。
答案1
您定义的命令很脆弱,在移动参数中会中断。您可以\protect
在移动参数中使用它,或者更好的是,从一开始就声明它是健壮的:
\documentclass[]{article}
\usepackage{soul}
\usepackage{color}
\DeclareRobustCommand{\hlcyan}[1]{{\sethlcolor{cyan}\hl{#1}}}
\begin{document}
An example of \hlcyan{highlighted words with hlcyan} in a normal paragraph.
\begin{figure}
\caption{A minimal caption in a figure environment with some
\hlcyan{highlighted text via the newly defined hlcyan command}
and a few remaining words.}
\end{figure}
\end{document}