抱歉,如果之前有人问过这个问题。我还没有找到这个问题的答案。我在突出显示由 newcommand 定义的文本时发现了一些问题:
\documentclass{article}
\usepackage{color,soul}
\newcommand{\etal}{\emph{et al.}}
\begin{document}
\hl{A statement \etal}
\end{document}
给出错误Package soul Error: Reconstruction failed.
令人惊奇的是,\hl{A statement \emph{et al.}}
效果很好。
我做错了什么?我能做些什么来解决这个问题?使用\emph{et al.}
而不是\etal
不是我的首选解决方案,因为有时我只想突出显示已经存在的文本。
这个答案也无法解决问题,因为\hl{A statement {\etal}}
返回相同的错误。我检查过另一个解决方案,但我不确定如何将它用于我自己定义的命令......
谢谢!
答案1
分析和 相关宏soul
的宏参数。所有字体切换宏(如和,后者当然已经过时)都已“注册”,以防止分析它们,而是立即执行它们(“扩展”),以便在扩展后执行突出显示。\hl
soul
\emph
\bf
soul
\hl{A statement \emph{et al.}}
可以工作,因为\emph
已经注册,但\etal
不是。不过,这可以通过
\soulregister\etal7
将启用\etal
此功能,稍微soul
“滥用”该功能。文档并未显示这是可能的。\soulregister
7
\documentclass{article}
\usepackage{color,soul}
\newcommand{\etal}{\emph{et al.}}
\soulregister{\etal}{7}
\begin{document}
\hl{A statement \emph{et al.}}
\hl{A statement \etal}
\end{document}