
Продолжая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 и } заканчивается ничем: какое бы значение я ни ввел в смещение кернинга
, результирующий PDF-файл не изменяется.
Есть идеи, как настроить кернинг между f и }?
И последнее, но не менее важное: есть ли у вас идеи, как уменьшить кернинг в Fontforge $\sigma_0$
и \[\sigma_0\]
с его помощью? На данный момент этот кернинг чрезвычайно велик...
EDIT: ДалееПредложения Марселя, я отказался от поиска хорошего решения {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 вышеприведенный код дает следующий результат
для кселатекса и
для луалатекса.
При использовании кернированных шрифтов Ryge получаем
при компиляции с помощью xelatex и
при компиляции с помощью lulatex.
С новым шрифтом Ryge, xelatex
в целом, хорошо справляется с кернингом, и lualatex
почти не справляется с кернингом, за исключением нижнего индекса "abc". Почему так?
Дальнейшие улучшения, которые необходимо счесть необходимыми:
немного увеличить кернинг для нижних индексов ⊤,
решение1
По вашим двум проблемам прочтите мой ответ на ваш другой вопрос: Обычный кернинг не является правильным инструментом для Math и обычно не применяется. То, что LuaTeX иногда применяет, вероятно, происходит потому, что TeX больше не знает, что символы раньше были математическими. После f
вставки курсивного исправления f
и }
не следуют друг за другом напрямую -> нет кернинга. Также при отображении математики LuaTeX не ожидает найти что-то, требующее кернинга, поэтому кернинг пропускается.
В любом случае, ваш последний вопрос более интересен:
Кернинг между символом и его нижним индексом в OpenType Math называется математическим кернингом. См.https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathkerninfo-tableдля подробностей. В вашем случае вам нужно только настроить сигму.
Откройте математический шрифт в FontForge. Затем вы можете изменить параметры, связанные с математикой, через Element->Other Info->MATH Info. Откроется такое окно:
Выберите "Math Kern" и нажмите, чтобы добавить математический кернинг для нового глифа. Введите имя вашего глифа, в вашем случае "u1D70E" (МАТЕМАТИЧЕСКИЙ КУРСИВНЫЙ МАЛЕНЬКИЙ СИГМА). Затем нажмите изменить, чтобы настроить значения.
Это приведет вас к диалоговому окну «Математический кернинг»:
Чтобы добавить новые точки, перейдите в «Текстовый», а затем выберите «Нижний правый». Нажмите три раза, чтобы добавить три точки и вернуться в «Графический». Здесь нажмите на сигму под «Нижним правым», чтобы выбрать этот блок. Появится ваша точка кернинга, и вы можете перетащить ее в соответствующее место. Грубо говоря, каждая точка означает, что если нижний индекс прикреплен на этой высоте или ниже, то он должен получить это количество кернинга. Например, вы можете установить свои точки следующим образом:
Теперь подтвердите выбор нажатием кнопки «ОК», еще раз «ОК» и сгенерируйте свой шрифт.
Если вы разместили свои точки так же, как я, $\sigma_0$
становится
Конечно, если вы не хотите менять шрифт, LuaTeX также позволяет использовать код Lua для изменения математических выражений:
\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}