如何可靠地用灵魂切换突出显示颜色?

如何可靠地用灵魂切换突出显示颜色?

在我的文档中,我需要使用不同的颜色来突出显示文本。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).
[...]

生成的 PDF 文件的屏幕截图: 在此处输入图片描述

补充笔记:

  • 在图标题中使用 plainhl{...}不会产生错误。
  • 直接{\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}

在此处输入图片描述

相关内容