数学模式下 \prime 和 `'` 之间的区别

数学模式下 \prime 和 `'` 之间的区别

我相信这\prime是在数学模式中插入素数的适当代码,并假设它相当于输入'。我发现 \prime插入了一个丑陋的大素数,而'产生了一些正常的东西。有什么解释吗?

\documentclass{article}

\begin{document}

$a'_{i}$ dürfen zu $x'_{i}$ nur

$a\prime_{i}$ dürfen zu $x\prime_{i}$ nur

\end{document}

在此处输入图片描述

答案1

你写了,

我发现\prime插入了一个难看的大素数,而'产生了一些正常的结果。有什么解释吗?

'为了深入解决这个问题,检查(在数学模式下)相对于 的定义方式很有用\prime。以下是当前版本(2020-02-02, patch level 5)的 LaTeX2e“内核”的摘录——latex.ltx确切地说是 中的第 5939 行到 5954 行——提供了在 LaTeX 中定义的代码'。(Plain-TeX 的定义'类似。)

\def\active@math@prime{^\bgroup\prim@s}
{\catcode`\'=\active \global\let'\active@math@prime}
\def\prim@s{%
  \prime\futurelet\@let@token\pr@m@s}
\def\pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\def\pr@@@s#1{\prim@s}
\def\pr@@@t#1#2{#2\egroup}

我不会声称这段代码很容易理解。下面是代码的要点。

  • 指令

    \catcode`\'=\active
    

    '如果在数学模式下遇到该字符,则使字符(“撇号”或“撇号”)以 TeX 意义激活。

  • 字符设置为\active@math@prime,其定义为^\bgroup\prim@s。请注意,指数项以 开头^,后跟\bgroup-- ,并且目前没有相应的\egroup指令。

  • \prim@s反过来,定义为\prime\futurelet\@let@token\pr@m@s。最后,我们遇到了\prime——耶!\prime指令——回想一下,它是在上标模式下执行的,因此生成的符号比文本样式的版本要小\prime——后面跟着

    \futurelet\@let@token\pr@m@s
    

    \futurelet\@let@token将下一个标记分配给\@let@token。那么,它会\pr@m@s做什么呢?

  • 的代码\pr@m@s涵盖了 10 行代码;它是这组宏中迄今为止最复杂的。它基本上告诉 LaTeX 将前瞻标记(通过几个\ifx语句)与多个可能的替代方案进行比较。事实上,代码考虑了三种替代方案。

    • 如果前瞻标记不相等要么 要么'^然后\egroup发出——这意味着指数项组已关闭并且可以由 LaTeX 处理——我们就完成了。呼!

    • 如果下一个字符等于^(例如,g'^2),则执行处理指数项所需的代码(包括指令\egroup)。(如果您好奇:g'^2计算结果为g^{\prime2}。如果您希望将平方项放得更靠前一些,则需要编写{g'}^2。)

    • 最后,如果下一个字符是平等的',然后(在进一步搅拌之后......)\prime\futurelet\@let@token\pr@m@s执行另一轮,即\prime执行另一个指令,然后再进行一些向前看的操作。

记住\bgroup和分别\egroup计算为{},我们得出以下结论:代码确保u'v被解释为u^{\prime}vw''x被解释为w^{\prime\prime}xf'''被解释为f^{\prime\prime\prime},等等。真正重要的是要注意它w''x没有被解释为w^{\prime}^{\prime}x,因为这会触发可怕的“双上标”错误。

简而言之,(a) 打字f\prime\prime不会触发错误消息,但从排版角度来看绝对是错误的;(b)f^{\prime\prime}在排版和语法上都是正确的,但也非常繁琐;(c)f''既正确又简单。你能猜出哪种方法是推荐的吗?不管怎么说,我的印象是 Donald Knuth 一直都希望用户f'输入f''

相关内容