\mathbf 是如何定义的?

\mathbf 是如何定义的?

有人可能会这样定义 \mathbf:

\DeclareMathAlphabet      {\mathbf}{OT1}{cmr12}{bx}{n}

那么,我想知道 \mathbf 将如何定义?(它的含义是什么?)。

答案1

与其直接看\meaning、、或\show类似的代码\tracingall,不如阅读有关 NFSS 的主要文章(然后新字体选择方案)。它们现在有点老了(1989 :-)),所以它们早于 LaTeX2e 甚至 TeX3,但我认为它们会给你一些关于底层概念的想法,尤其是第一个。但请注意,这些论文描述了 NFSS 的初始版本。对于 LaTeX2e,一些接口已经更改,我们进一步优化了代码以提高速度和紧凑性。

Tugboat 1989 中的 NFSS 基础宏

Tugboat 1990 中的 NFSS 用户界面

当前代码(及其文档)可以在 LaTeX 发行版中找到,查找名为ltfss某物.dtx并对其进行排版。它们有相当好的文档记录(大致如此),但文档记录主要涉及微观层面,而不是大局。

答案2

通过 LaTeX 运行以下命令

\makeatletter
\show\mathbf
\expandafter\show\csname mathbf \endcsname
\show\select@group
\expandafter\show\csname M@OT1\endcsname
\show\default@M

你会得到

> \mathbf=macro:
->\protect \mathbf  .

> \mathbf =macro:
->\select@group \mathbf  \M@OT1 \OT1/cmr/bx/n .

> \select@group=macro:
#1#2#3#4->\ifx \math@bgroup \bgroup \else \relax \expandafter \@firstofone \fi 
{\ifmmode \ifnum \csname c@mv@\math@version \endcsname <\sixt@@n \begingroup \e
scapechar \m@ne \getanddefine@fonts {\csname c@mv@\math@version \endcsname }#3\
globaldefs \@ne \math@fonts \endgroup \init@restore@version \xdef #1{\noexpand 
\use@mathgroup \noexpand #2{\number \csname c@mv@\math@version \endcsname }}\gl
obal \advance \csname c@mv@\math@version \endcsname \@ne \else \let #1\relax \@
latex@error {Too many math alphabets used in version \math@version }\@eha \fi \
else \expandafter \non@alpherr \fi #1{#4}}.

> \M@OT1=macro:
->\default@M .

> \default@M=macro:
->.

这确实很可怕,但也不是太可怕。

当然,最主要的是\select@group,它必须检查相应的数学组(TeXbook 术语中的数学系列)是否已经分配。然后,它基本上打开一个组,设置数学组并排版参数,除非命令是在数学模式之外给出的。

相关内容