' 的下标等价于 \prime?

' 的下标等价于 \prime?

'我正在研究 TeXbook,偶然发现了讨论和的部分(第 130 页)\prime。Knuth 提到 TeX 将其视为\prime仅出现在上标中的大符号,而不是将其变成已经移至上标位置的小符号。部分原因是有些作者实际上\prime在下标位置使用了。

我知道$y'_1+y''_2$会产生与 等效的印刷输出$y^\prime_1+y^{\prime\prime}_2$,但我想知道是否有与'\prime放入下标位置等效的输出。

例如,$h'$在印刷上等同于$h^\prime$,但$h_\prime$等同于任何“更快”的表达(即涉及撇号或类似符号)?我尝试了$h_'$,但这会产生错误;然后我尝试了$h_{'}$,但我意识到这相当于输入$h_{{}^\prime}$

基本上,是否存在一个字符,X其中$hX$$h_\prime$是等价的?

答案1

只需模仿内核所做的事情\prime

\documentclass{article}

\makeatletter
\def\active@math@sprime{_\bgroup\sprim@s}
{\catcode`\`=\active \global\let`\active@math@sprime}
\def\sprim@s{%
  \prime\futurelet\@let@token\spr@m@s}
\def\spr@m@s{%
  \ifx`\@let@token
    \expandafter\spr@@@s
  \else
    \ifx_\@let@token
      \expandafter\expandafter\expandafter\spr@@@t
    \else
      \egroup
    \fi
  \fi}
\def\spr@@@s#1{\sprim@s}
\def\spr@@@t#1#2{#2\egroup}
\mathcode`\`="8000
\makeatother

\begin{document}

Normal use: `test'.

Math: $h`$ and $h``$ and also $h`_{1}$.

\end{document}

在此处输入图片描述

这是做什么的?首先,数学模式下的反引号将被视为活动字符,因为\mathcode`\`="8000;TeX 将寻找 的定义作为`活动字符,即\active@math@sprime

当它在可能的反引号序列中首次出现时,TeX 会扩展\active@math@sprime,从而执行。这会启动一个下标,利用是合法语法_\bgroup\sprim@s的事实。现在被扩展,它会排版并执行_\bgroup<tokens>\egroup\sprim@s\prime

\futurelet\@let@token\spr@m@s

这将查看以下标记,将其存储到\@let@token但不从输入流中删除它并执行\spr@m@s

这个宏做了一些测试:

  1. 如果\@let@token是反引用,\else...\fi则删除该部分\expandafter\spr@@@s执行;

  2. 如果\@let@token是,则_\else...\fi\fi部分被三元组移除\expandafter\spr@@@t执行;

  3. 以上都不\egroup是:执行后将关闭下标。

现在让我们看看\spr@m@s:它被定义为删除下一个标记(即反引号)并\sprim@s再次执行。这就是$h``$变成的方式$h_\bgroup\prime\prime\egroup$

该宏\spr@@@t有两个参数:第一个是_,它被简单地吞噬;第二个是预期的下标,它被关闭,以\egroup平衡初始的\bgroup。这就是$h`_{1}$变成 的方式$h_\bgroup\prime 1\egroup

相关内容