\cf@encoding 与 \UTFencname:哪个优先?

\cf@encoding 与 \UTFencname:哪个优先?

有两个宏带有当前字体编码的名称。第一个是,\cf@encoding它似乎是由 LaTeX 2e 和 NFSS 的核心设置的,并由fontenc包更改。第二个宏是\UTFencname。它由以下宏设置:fontspec,也可能是由处理 OTF/TTF 字体和 unicode 的其他一些包设置的。这两个宏有什么关系呢?我注意到\cf@encodingLuaLaTeX 运行时也会发生变化。

答案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}

相关内容