附加的纯 TeX 示例显示了三种情况:
- 数学字母表
\rm
,,\bf
使用\it
纯 TeX 设置 - 类似地,数学字母从“古典”拉丁现代字体加载
- 类似地,数学字母表也加载了 OpenType Latin Modern 字体
对于前两种情况,文本使用连字设置;例如,{\fam\itfam fin}
将产生连字。在最后一种情况下,当使用 OpenType 字体时,不会出现连字。否则,在文本中使用字体会显示选择了连字。
发生什么了?大卫·卡莱尔在尝试修复 的行为时发现了这种情况unicode-math
,我一直在试图弄清楚这是否是我的错!XeTeX 和 LuaTeX+luaotfload 也发生了同样的情况,所以如果这是一个疏忽,它们都有责任。
%!TEX TS-program = XeTeX
\ifx\XeTeXversion\undefined
\input luaotfload.sty
\def\otf#1{file:#1.otf}
\else
\def\otf#1{[#1.otf]}
\fi
\hsize=10cm
\parindent=0pt\relax
%%%%%%%%%%%%%%%%%%%%%%%%%%
\hrule
\bigskip
{\bf Default \TeX}
Roman, italic, and bold math families:
$$ {\fam0 abcfin} \quad {\fam\itfam } \quad {\fam\bffam abcfin} $$
%%%%%%%%%%%%%%%%%%%%%%%%%%
\font\myrm = ec-lmr10 at 10pt\relax
\font\mybf = ec-lmbx10 at 10pt\relax
\font\myit = ec-lmri10 at 10pt\relax
\newfam\rmmathfam
\newfam\bfmathfam
\newfam\itmathfam
\textfont\rmmathfam\myrm
\textfont\bfmathfam\mybf
\textfont\itmathfam\myit
\hrule
\bigskip
{\bf Loading new tfm fonts}
Roman ({\myrm abcfin}), italic ({\myit abcfin}), and bold ({\mybf abcfin}) families:
$$ {\fam\rmmathfam abcfin} \quad {\fam\itmathfam abcfin} \quad {\fam\bfmathfam abcfin} $$
%%%%%%%%%%%%%%%%%%%%%%%%%%
\font\Urm = "\otf{lmroman10-regular}" at 10pt\relax
\font\Ubf = "\otf{lmroman10-bold}" at 10pt\relax
\font\Uit = "\otf{lmroman10-italic}" at 10pt\relax
\newfam\Urmmathfam
\newfam\Ubfmathfam
\newfam\Uitmathfam
\textfont\Urmmathfam\Urm
\textfont\Ubfmathfam\Ubf
\textfont\Uitmathfam\Uit
\hrule
\bigskip
{\bf Loading new OpenType fonts}
Roman ({\Urm abcfin}), italic ({\Uit abcfin}), and bold ({\Ubf abcfin}) families:
$$ {\fam\Urmmathfam abcfin} \quad {\fam\Uitmathfam abcfin} \quad {\fam\Ubfmathfam abcfin} $$
\bye
答案1
对于 luatex,您可以在基本模式下加载字体
\ifx\XeTeXversion\undefined
\input luaotfload.sty
\def\otf#1{file:#1.otf:mode=base}
\else
\def\otf#1{[#1.otf]}
\fi
对于 xetex,我在聊天中 ping 了 Arthur……
luaotfload
文档解释了这样做的必要性:
base
模式通过将 OpenType 特性映射到传统的 TeX 连字和字距调整机制来工作。它仅支持非上下文替换和字距调整对,速度稍快,尽管有一定的局限性。
node
模式通过直接在 lua 端处理 TeX 的内部节点列表来工作,并支持更广泛的 OpenType 功能。缺点是,
node
模式所需的复杂操作可能会减慢排版速度,尤其是对于复杂的字体,并且它在数学模式下不起作用。默认情况下
luaotfload
处于node
模式,并且base
在需要时必须请求模式,例如数学字体。