尝试在某些大型文档中使用 LuaTeX 字体支持,除了 Asana Math 字体出现小故障外,一切都很顺利。问题如下:
\documentclass{standalone}
\usepackage{unicode-math}
\begin{document}
\setmathfont{Asana Math} %(probably unrelated, but without this nothing will show up)
Spacing issues:
\begin{tabular}{cccccccc}
\setmathfont{Asana Math}
$α_1$ & $ω_a$ & $ωa$ & $ω_1$ & $ω^a$ & $\omega_1$ & $Ω_1$ & $λ_k$ \\
\setmathfont{XITS Math}
$α_1$ & $ω_a$ & $ωa$ & $ω_1$ & $ω^a$ & $\omega_1$ & $Ω_1$ & $λ_k$ \\
\end{tabular}
\end{document}
ω 在下标(和上标)方面有点问题。使用 CTAN 上可用的最新版本更新了字体和 unicode-math,但问题仍然存在。
知道是什么原因造成的吗?有没有不需要检测每次出现的“ω_”的解决方法?
答案1
我很确定这是一个字体错误。正如使用FontForge,右下角下标的锚点距离字形太远(锚点是第三个面板中基线上的小点):
在 Microsoft Word 中结果是相同的,它是 OpenType 数学的参考实现:
这在 XeTeX 中“有效”,因为 XeTeX 的 OpenType 数学实现不如 LuaTeX 和 MS Word 的实现复杂:XeTeX 只是忽略了数学字距,因此您(大概还有 Asana Math 的创建者)看不到那里的错误。
以下是在 LuaTeX 中加载字体时如何修复此类错误的示例。这只需删除有问题的字距信息(字距似乎不正常,否则您可以使用任何您想要的字距数组):
\documentclass[pagesize=auto, version=last]{scrartcl}
\usepackage{unicode-math}
\usepackage{luacode}
\begin{luacode*}
local function patch_asana(fnt)
if fnt.psname == "Asana-Math" then
fnt.characters[0x1D714].mathkern.bottom_right = nil
end
end
luatexbase.add_to_callback("luaotfload.patch_font", patch_asana, "patch_asana")
\end{luacode*}
\setmathfont{Asana Math}
\begin{document}
$\omega_a$
\end{document}