继续https://chat.stackexchange.com/rooms/97632/discussion-between-marcel-kruger-and-mdayq6,运行 lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
% \setmathfont{texgyretermes-math.otf}
\setmathfont[Kerning=On]{TeXRygeTermesMath-Regular.otf}%%% same as Tex Gyre Termes Math, with an attempt to improve kerning
\begin{document}
\(\{f\}\)
\[
\{f\}
\]
\end{document}
字体取自哪里http://filebin.net/36gqo82z5evv2869(我们尝试改进 tex gyre termes 数学),产生
如我们所见,第一种情况下应用了字距调整,但第二种情况下没有。在第二种情况下如何才能获得正确的字距调整?
此外,尝试减少 f 和 } 之间的字距调整不会有任何结果:无论我输入哪个值到 kern offset
,得到的 PDF 保持不变。
关于如何调整 f 和 } 之间的字距,您有什么想法吗?
最后但同样重要的是,关于如何减少$\sigma_0$
和\[\sigma_0\]
使用吗?到目前为止,这个字距非常大……
编辑:关注马塞尔的建议,我放弃了寻找一个好的解决方案{f}
并创建了一个具有新字距调整的 TeX Ryge Termes Math 字体改进斜体\sigma
和\tau
数学模式的正确下标。让我们考虑输入
\documentclass{article}
\pagestyle{empty}
\usepackage{unicode-math}
%\setmathfont[Ligatures=TeX]{TeX Gyre Termes Math}
\setmathfont[Ligatures=TeX]{TeXRygeTermesMath-Regular.otf} %%% Name changed to comply with the license. The shapes are (hopefully) the same, and the math kernings are new.
\begin{document}
\newcommand{\test}[1]{#1_{abc} #1_0^a #1^b_b #1_1^c #1^d_⊤ #1_⟂^e #1_T^f #1_k^g #1_{\mathup{k}}^h #1_{h}^j}
\newcommand{\testtest}{\test{\sigma}\test{\tau}}
\(\testtest\)
\[\testtest\]
\end{document}
使用原始的 Gyre 字体,上面的输出结果如下
对于 xelatex 和
对于 lualatex。
使用调整字距的 Ryge 字体时,我们得到
使用 xelatex 编译时
当使用 lulatex 进行编译时。
使用新的 Ryge 字体时,xelatex
字距调整总体上表现良好,lualatex
除了下标“abc”外,几乎没有任何字距调整。为什么会这样?
有必要进一步改进:
稍微增加下标 ⊤ 的字距,
答案1
对于你的两个问题,请阅读我对你的另一个问题的回答:普通字距调整不是数学的正确工具,通常不会应用。LuaTeX 有时确实会应用,这可能是因为 TeX 不再知道这些字符曾经是数学。f
插入斜体校正后,和f
不会}
直接相互跟随 -> 无字距调整。此外,在显示数学中,LuaTeX 不会期望找到需要字距调整的内容,因此会跳过字距调整。
无论如何,你的最后一个问题更有趣:
字符与其下标之间的字距在 OpenType Math 中称为数学字距。请参阅https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathkerninfo-table了解详情。对于你的情况,你只需要调整 sigma。
在 FontForge 中打开一个数学字体。然后你可以通过 Element->Other Info->MATH Info 更改数学相关参数。将打开如下窗口:
选择“数学字距”并按下以添加新字形的数学字距。输入字形的名称,在本例中为“u1D70E”(数学斜体小 SIGMA)。然后按更改以调整值。
这将带您进入数学字距调整对话框:
要添加新点,请转到“文本”,然后选择“右下角”。按三次添加三个点,然后返回“图形”。在这里单击右下角下方的 sigma 以选择此块。您的字距调整点出现,您可以将其拖动到适当的位置。粗略地说,每个点都意味着如果下标附加在此高度或更低的高度,那么它应该获得此量的字距调整。例如,您可以像这样设置您的点:
现在再次单击“确定”,确认,然后生成字体。
如果你像我一样把观点放在首位,$\sigma_0$
那么
当然,如果你不想改变字体,LuaTeX 还允许你使用 Lua 代码来改变 mathkerns:
\documentclass{standalone}
\usepackage{unicode-math}
\usepackage{luacode}
\begin{luacode*}
-- First create a table specifying the mathkerns we want to set:
local mathkerns = {
["TeXGyreTermesMath-Regular"] = { -- This should be the PostScript name of the font
[0x1D70E] = { -- If the character would have a regular name, you could also use the glyphname here
bottomright = {
{height=0,kern=-175},
{height=216,kern=-76},
{kern=0},
},
},
},
}
local function initmathkern(tfmdata)
local values = mathkerns[tfmdata.properties.psname]
if not values then return end
for cp, value in next, values do
local tcp = type(cp)
if tcp == 'string' then
cp = tfmdata.resources.unicodes[cp]
end
local char = tfmdata.characters[cp]
if char then
local mathkern = char.mathkerns
if not mathkern then
mathkern = {}
char.mathkerns = mathkern
end
for corner, v in next, value do
mathkern[corner] = v
end
end
end
end
fonts.constructors.newfeatures'otf'.register{
name = 'mathkern',
description = 'Overwrite mathkern values',
initializers = {
base = initmathkern,
},
}
\end{luacode*}
\setmathfont[RawFeature=mathkern]{texgyretermes-math.otf}
\begin{document}
$\sigma_0$
\end{document}