'
我正在研究 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
。
这个宏做了一些测试:
如果
\@let@token
是反引用,\else...\fi
则删除该部分\expandafter
并\spr@@@s
执行;如果
\@let@token
是,则_
该\else...\fi\fi
部分被三元组移除\expandafter
并\spr@@@t
执行;以上都不
\egroup
是:执行后将关闭下标。
现在让我们看看\spr@m@s
:它被定义为删除下一个标记(即反引号)并\sprim@s
再次执行。这就是$h``$
变成的方式$h_\bgroup\prime\prime\egroup$
。
该宏\spr@@@t
有两个参数:第一个是_
,它被简单地吞噬;第二个是预期的下标,它被关闭,以\egroup
平衡初始的\bgroup
。这就是$h`_{1}$
变成 的方式$h_\bgroup\prime 1\egroup
。