有两个宏带有当前字体编码的名称。第一个是,\cf@encoding
它似乎是由 LaTeX 2e 和 NFSS 的核心设置的,并由fontenc
包更改。第二个宏是\UTFencname
。它由以下宏设置:fontspec
,也可能是由处理 OTF/TTF 字体和 unicode 的其他一些包设置的。这两个宏有什么关系呢?我注意到\cf@encoding
LuaLaTeX 运行时也会发生变化。
答案1
\cf@encoding
(当前字体编码)是核心命令。还有一个f@encoding
用于\fontencoding
存储其参数的。一般来说,除了\fontencoding
和下一个之间之外,两者具有相同的值\selectfont
:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\begin{document}
\makeatletter
\f@encoding, \cf@encoding;
\fontencoding{OT1}
\f@encoding, \cf@encoding;
\selectfont
\f@encoding, \cf@encoding;
\end{document}
\UTFencname
是 xunicode 在其各种声明中使用的命令。(xunicode 可以为各种编码名称设置定义)。UTFencname
在加载 xunicode 之前,fontspec 设置为正确的“unicode 编码”名称(xetex 为 EU1,luatex 为 EU2,名称不同的原因是两个引擎需要不同的 fd 文件/字体声明来加载字体,因为它们使用不同的语法)。
UTFencname
通常在文档中是固定的。如果切换到另一种字体编码,它不会改变:
\documentclass[a4paper]{article}
\usepackage{fontspec}
\begin{document}
\makeatletter
\f@encoding, \cf@encoding,\UTFencname;
\fontencoding{OT1}
\selectfont
\f@encoding, \cf@encoding,\UTFencname;
\end{document}