以下 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
如果您不太清楚某个命令,可以使用 重新定义该命令。