如何在覆盖后获取正确的字体标识符\showthe
?\the
MWE 如下(与 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