在我的系统(OSX 10.10.5;LuaTeX,版本 beta-0.80.0(TeX Live 2015);LaTeX2e <2015/10/01> 补丁级别 2)上,我运行以下 MWE:
\documentclass{article}
\usepackage{fontspec}
\usepackage{amsmath}
\begin{document}
\setmainfont{EB Garamond}
$\text{is}$ $\text{js}$ $\text{ is}$
\fontfamily{lmr}\selectfont
$\text{is}$ $\text{js}$ $\text{ is}$
\end{document}
在 PDF 输出中,第一行上的前两个 i 没有点。这可以解释什么?这种现象很可能是 EB Garamond 所特有的,因为输出不仅如所示正确显示拉丁语现代字母,而且当我使用 LucidaBrightOT 和 fbb 进行测试时也是如此。
答案1
似乎当i
是水平列表中的第一个节点时,某些“上下文”被激活并用位置 984069 的字符luaotfload
替换i
,这确实是一个无点的 i(它位于私人使用区)。
在 EBGaramond 的 Lua 表中查找,我找到了字形 105(即“i”)的以下描述:
[105]={
["anchors"]={
["basechar"]={
["Anchor-7"]=168,
["Anchor-8"]=167,
["Anchor-9"]=165,
},
},
["boundingbox"]=166,
["class"]="base",
["index"]=74,
["name"]="i",
["slookups"]={
["ss_l_12_s"]=984069,
["ss_l_26_s"]=983201,
["ss_l_27_s"]=983403,
["ss_l_28_s"]=983302,
["ss_l_29_s"]=983504,
["ss_l_65_s"]=983605,
["ss_l_79_s"]=984069,
["ss_l_88_s"]=984069,
["ss_latn_l_1_s"]=983123,
},
["width"]=245,
},
因此,罪魁祸首似乎是替代规则 和 中的一条ss_l_12_s
。ss_l_79_s
该ss_l_88_s
行为仅在集合中触发mode=node
。
最小 LuaTeX 示例:
\input luaotfload.sty
\font\testA="EBGaramond:mode=node;"
\font\testB="EBGaramond:mode=base;"
\testA
\hbox{i}i
\testB
\hbox{i}i
\bye
因此,当处于活动状态时\hbox{i}
,在位置 984069 处打印无点 i(通过执行\showoutput
或等效方法确认)mode=node
,但在mode=base
使用时不打印。
XeLaTeX 不会发生这种行为。
解决方法:使用Renderer=Basic
。
\documentclass{article}
\usepackage{amsmath}
\usepackage[no-math]{fontspec}
\setmainfont[Renderer=Basic]{EB Garamond}
\begin{document}
$\text{is}$ $\text{js}$ $\text{ is}$
\end{document}