![如何判断给定的宏是否适用于文本模式或数学模式?](https://linux22.com/image/259551/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E7%BB%99%E5%AE%9A%E7%9A%84%E5%AE%8F%E6%98%AF%E5%90%A6%E9%80%82%E7%94%A8%E4%BA%8E%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E6%88%96%E6%95%B0%E5%AD%A6%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
我最近读到的答案不鼓励使用,\ensuremath
理由是人们应该知道每个命令是用于数学模式还是文本模式。给定一个命令,你如何判断它是用于数学模式、文本模式还是两者兼有?(请注意,我要求一种实用的方法来判断常用的 LaTeX 命令,而不是一般情况下有效的东西。)
编辑:我的意思是“除了反复试验”。
答案1
我似乎记得和那个答案:)。你的问题的简短答案是,没有先验基于随机宏来决定它是“数学模式”还是“文本模式”的方法,因为宏当然可以命名为任何名称。这是可能的(参见这个问题) 来编写一个测试,检测宏是否进入数学模式。否则,存在以下一般准则:
数学模式和文本模式之间最明显的区别与字体有关:数学模式使用特殊字体,甚至对于字母,它也使用倾斜字体。相应地,在 LaTeX 中,许多行为有差异的字体命令都有数学模式和文本模式变体,例如
\mathbf
versus\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
在控制台中查看它们。
\texttt
MWE 中的 只是为了获得反斜杠的正确字体。
关于使用\meaning
请参阅使用 LaTeX/TeX 宏进行自省和反射和布鲁诺的\show 用更少的行?。
答案3
如果你关心的命令是 LaTeX 符号,那么它很可能包含在“综合 LATEX 符号列表”,其中列出了近 6000 个符号,并将其中许多符号归类为“正文符号”或“数学符号”。