\def 的 Hyperref 错误

\def 的 Hyperref 错误

以下 MWE 显示了该问题,当对 hyperref 的调用被注释掉时该问题就会消失:

\documentclass{article}

\def\n{\textup{\tiny N}}
\def\t{\textup{\tiny T}}

\usepackage{hyperref}

\begin{document}

${}_{\t}$
$_{\t}$
${}_{\t}$
$_\t$

\end{document}

hyperref但是,当在两者之前调用时,编译效果很好\def

答案1

如果你使用\newcommand而不是\def,你会清楚地看到问题的根源:

! LaTeX Error: Command \t already defined.
               Or name \end... illegal, see p.192 of the manual.

\t命令在 LaTeX 内部字符表示中定义为“tie 重音符”,并hyperref假定这是 的含义\t。由于它必须进行多次修补才能正常工作,因此最终会将其\t重新定义为其原始含义,如果您在\show\t后面添加\begin{document}

> \t=macro:
->\PD1-cmd \t \PD1\t .

如果没有你的重新定义,没有hyperref,你会得到

> \t=macro:
->\OML-cmd \t \OML\t .

本质上是相同的(由于技术原因,使用时编码名称可能会发生变化,\show但这超出了本答案的范围)。

\def寓意:如果你不清楚自己在做什么,就不要使用。绝不\renewcommand如果您不太清楚某个命令,可以使用 重新定义该命令。

相关内容