获取覆盖字体标识符的正确结果

获取覆盖字体标识符的正确结果

如何在覆盖后获取正确的字体标识符\showthe\theMWE 如下(与 Knuth TeX、pdfTeX、XeTeX、(e-)pTeX、(e-)upTeX 和 Aleph 的所有结果相同。只有 LuaTeX 的行为不同,这适用\X于所有测试。)

%#!plain TeX
\font\X=ec-lmr10\X % set \X to the current font
\font\Y=ec-lmr10   % same as current font
\showthe\font % > \Y (most recently defined CS that selects the same font)
\showthe\X    % > \Y (same as above)
\font\Y=cmbx10
\showthe\font % > \Y (!!!)
\showthe\X    % > \Y (!!!)
\end

TeXbook 说

\the字体⟩ 生成选择指定字体的字体标识符。例如,' \the\font' 是与当前字体相对应的控制序列。

免费书籍缺乏耐心的 TeX更详细地解释行为(如在这个答案

\the字体⟩,扩展为最近定义的控制序列,该控制序列选择与控制序列相同的字体⟨字体

然而,它们都无法解释所指出的行为(!!!)

答案1

您应该查看模块 548、222、233、234 tex.web

最后一种情况下的输出\showthe\X显示为\Y,但这是的“冻结”版本\Y,与当前含义没有关系\Y

相同的字体(准确地说,tfm文件)可以与控制序列关联任意次,但字体只会加载一次。字体编号(font_id_base) 指向选择指定字体的(冻结)控制序列最后的。没有办法恢复字体首先关联的控制序列名称。

如果我尝试

\font\X=ec-lmr10 \X % set \X to the current font
\font\Y=ec-lmr10    % same as current font

Non bold

\tenbf Bold text % to ensure we have changed the current font

\def\Y{Whatever} \Y % redefine \Y

\edef\test{\the\X} {\tt\meaning\test} % it shows macro:->\Y

\test Non bold % however it chooses the expected font

\end

在此处输入图片描述

相关内容