使用 soul 突出显示时出现 \ref 问题

使用 soul 突出显示时出现 \ref 问题

这是一个显示该问题的最小例子。

\documentclass[10pt]{article}
\usepackage[usenames,dvipsnames]{color}
\usepackage{soul}
%\soulregister{\ref}{1}
\begin{document}

\section*{x}\label{x}

\section*{y}
\hl{ Some text.
  Section~\ref{x}.
}
\end{document}

我收到错误

LaTeX Warning: Reference `{x}' on page 0 undefined on input line 12.

! Argument of \ref has an extra }.

问题出在\ref。注释掉以“Subsection”开头的行会使错误消失。\soulregister是用于字体命令的。我不知道 是否\ref是字体命令,但我无法\soulregister修复该问题(请参阅上面的注释行)。

答案1

将 括\ref{x}在 中是{ }可行的。soul然后将其作为一个元素而不是将其拆分,我猜。在我看来,它分两步读取\ref{x},然后将其重新组合在一起,同时添加另一组括号,即结果是\ref{{x}}。这对于字体命令来说并不重要,但\ref将内部括号作为标签名称的一部分。这会导致有关未知标签的警告。错误是由于\ref也在组soul内扩展而引起的{ },即{\ref}。不要问我为什么。

请注意,您不能标记 a,\section*因为它没有数字。

\documentclass[10pt]{article}
\usepackage[usenames,dvipsnames]{color}
\usepackage{soul}
%\soulregister{\ref}{1}
\begin{document}

\section{x}\label{x}

\section{y}
\hl{ Some text.
   Section~{\ref{x}}.
}
\end{document}

相关内容