如何判断给定的宏是否适用于文本模式或数学模式?

如何判断给定的宏是否适用于文本模式或数学模式?

我最近读到的答案不鼓励使用,\ensuremath理由是人们应该知道每个命令是用于数学模式还是文本模式。给定一个命令,你如何判断它是用于数学模式、文本模式还是两者兼有?(请注意,我要求一种实用的方法来判断常用的 LaTeX 命令,而不是一般情况下有效的东西。)

编辑:我的意思是“除了反复试验”。

答案1

我似乎记得和那个答案:)。你的问题的简短答案是,没有先验基于随机宏来决定它是“数学模式”还是“文本模式”的方法,因为宏当然可以命名为任何名称。这是可能的(参见这个问题) 来编写一个测试,检测宏是否进入数学模式。否则,存在以下一般准则:

  • 数学模式和文本模式之间最明显的区别与字体有关:数学模式使用特殊字体,甚至对于字母,它也使用倾斜字体。相应地,在 LaTeX 中,许多行为有差异的字体命令都有数学模式和文本模式变体,例如\mathbfversus \textbf。这是例外,证明了您不能通过名称来判断的规则。

  • 最明显的相似数学模式和文本模式之间的区别在于 TeX 不做区分直到$排版开始,即直到它传递到“胃”。因此,除非结果包含、^_或以下之一,否则普通宏扩展在两者中将是相同的\math(但仍然,扩张宏的一部分不会受到数学模式的影响,当然\ifmmode,除了 )。当然,除了这些之外,可能还有几十种特殊情况。

  • 数学中充满了特殊符号和结构;如果你有一个产生符号的“宏”,那么你应该知道该符号的意图。在常见的做法中,它实际上是数学模式:例如,\alpha不是希腊字母,而是该形状的数学符号。参见这个问题对于相应的文本模式变体(实际上不是宏)。

  • 根据我另一个回答的参考,你所关心的问题是如何判断一个无害的宏是否接受一些参数,即\mymacro{stuff},将以stuff数学或文本模式排版。没有办法,除非查找作者的意图。幸运的是,情况有两种:要么你是作者,在这种情况下你很幸运;或者作者是一个负责任的 LaTeX 包编写者,并制作了一个可爱的 PDF 手册,可以通过程序获得,texdoc或者,如果失败,可以通过 CTAN 获得。当然,没有第三种选择。

在您对这个问题的评论中,您询问如何查找未知命令。首先,您应该知道哪个包提供了该命令;如果您使用“样板”序言而不知道为什么包含这些包,您应该转到texdoc(或 CTAN)阅读所有这些 :)。如果宏不属于任何软件包,那么它就是 TeX 或 LaTeX 本身的一部分,在这种情况下,本网站镜像一个我忘记了名字的文档,其中包含 LaTeX 提供的所有基本命令。如果您真的不幸,并且某些命令似乎在互联网上根本没有文档,那么它就是 TeX 原始命令,您应该阅读 TeX By Topic(可通过 免费下载texdoc)或 TeXbook(不免费,但值得一读)。

答案2

正如 Ryan 提到的那样,没有真正的方法可以判断,但是你可以看一下定义,通常有足够的线索可以判断:

\documentclass{article}
\begin{document}
\texttt{\meaning\alpha}
\show\alpha
\end{document}

您可以使用\meaning来排版结果或\show在控制台中查看它们。 \textttMWE 中的 只是为了获得反斜杠的正确字体。

关于使用\meaning请参阅使用 LaTeX/TeX 宏进行自省和反射和布鲁诺的\show 用更少的行?

答案3

如果你关心的命令是 LaTeX 符号,那么它很可能包含在“综合 LATEX 符号列表”,其中列出了近 6000 个符号,并将其中许多符号归类为“正文符号”或“数学符号”。

相关内容