什么是 \fam 命令?

什么是 \fam 命令?

我定义了以下命令

\NewDocumentCommand{\fam}{O{\mathbb{N}}mm}{\left\{ #2_#3 \right\}_{#3 \in #1}}     % Family notation (set with indices)

但我得到了编译错误Command '\fam' already defined。我以为我使用了定义 的某个包\fam,但我错了,因为同样的错误出现在没有加载包的 .tex 文件中。那么是什么\fam?(到目前为止我在网上没有找到任何东西,而且 的输出latexdef fam对我来说毫无意义)。无论如何,我都会将命令重命名为\family

以下是示例片段:

\documentclass{article}
\newcommand{\fam}{whatever}
\begin{document}
\[\fam\]
\end{document}

正如您所看到的,该命令\fam未被任何包定义(因为我得到了同样的错误)而且我不知道它的作用是什么

答案1

正如另一个答案中提到的,\fam是 TeX 原始控制序列,它代表内置 TeX 算法使用的整数寄存器。

我补充了另一个观点:在过去(TeX 刚开始的时候),只有每种字体不超过 128 个字符。但是当你创建数学公式(数学字母拉丁文、希腊文、书法……,数学符号)时,数学排版需要更多的字符调色板。因此,D. Knuth 考虑了所有这些常见的数学字符,并将它们分成 128 个子集。每个 128 个子集都成为单一字体(更准确地说是三种非常相似的字体:给定大小、脚本大小和脚本大小;这就是它被称为的原因,它代表了这三种字体的“系列”)。当 TeX 创建数学公式时,它必须在这些 128 个字符的字体之间切换,它使用将寄存器设置为不同的值来\fam实现这一点。\fam

如今,我们有 Unicode 字体和 Unicode 数学。创建数学公式所需的所有字符都可以通过单一字体访问(所有数学字母、所有符号,此外还有三种子尺寸:给定尺寸、脚本尺寸和 sriptscriptsize)。创建数学公式的所有材料都在单一字体今天。我们在创建数学公式时不需要在更多字体之间切换。但是\fam原始字体仍然存在并且仍然可用:您可以使用不同的\fam寄存器加载更多 Unicode 数学字体,如果您想使用其他 Unicode 数学字体而不是默认字体中的特殊符号(例如出于美观原因或默认数学字体中缺少符号),您可以在这些 Unicode 数学字体之间切换。此外,您可以使用切换将 Unicode 数学字体与旧的 128 个字符字体组合在一起\fam

答案2

\fam是 TeX 的一个原语,非常重要。从 TeX 角度来说,它是一个内部整数寄存器。

当您输入类似 的内容时\mathrm{A},TeX 将解开,\mathrm其中包括打开一个组并选择一个已连接的四位整数(在本例中为 0,但其他类似命令会选择不同的整数)\mathrm(详细信息不重要)。此组内部\fam设置为此整数。

由于 的数学码A在十六进制中为"7141:最后两位数字代表从中获取字形的字体槽;第二位数字告诉 TeX 该数学符号是一个普通符号;第一位数字告诉 TeX 当该值为\fam非负值时,必须使用 的当前值来选择数学字体。

在 LaTeX 中,\fam的别名为\mathgroup,因此,理论上,您可以自由地重新定义\fam,但某些软件包可能会使用\fam,而其效果将是一场灾难。

答案3

\fam是 TeX 基元,可以设置为 0 到 15 之间的数字(luatex 中为 255),用于控制字母使用的数学字体。它是LaTeX 中 等\mathrm的基础。\mathbf

答案4

latexdef已接受答案的附录:在这种情况下的输出是

\fam:
\fam

这是 TeX 核心的神秘识别方式原始命令,在启动时(甚至在格式加载之前)已由解释器定义。比较:

$ latexdef hbox
\hbox:
\hbox
$ latexdef def
\def:
\def

它看起来轻微地不像操作的输出\showlatexdef只是包装)那么奇怪:

$ initex
This is TeX, Version 3.141592653 (TeX Live 2022/Debian) (INITEX)
**\show\fam
> \fam=\fam.

(这里使用 INI-TeX 来强调,它\fam和它的同类都是内置于 TeX 中的,而不是格式的一部分。)

第 37 章中有完整的原始命令列表TeX 按主题分类,尽管它不包含 e-TeX 附加功能。

相关内容