错误:\hl(突出显示)新命令文本重建失败

错误:\hl(突出显示)新命令文本重建失败

抱歉,如果之前有人问过这个问题。我还没有找到这个问题的答案。我在突出显示由 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的宏参数。所有字体切换宏(如和,后者当然已经过时)都已“注册”,以防止分析它们,而是立即执行它们(“扩展”),以便在扩展后执行突出显示。\hlsoul\emph\bfsoul

\hl{A statement \emph{et al.}} 

可以工作,因为\emph已经注册,但\etal不是。不过,这可以通过

\soulregister\etal7

将启用\etal此功能,稍微soul“滥用”该功能。文档并未显示这是可能的。\soulregister7

\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}

在此处输入图片描述

相关内容