Правильный кернинг \{f\} \sigma_0 в TeX Gyre Termes Math

Правильный кернинг \{f\} \sigma_0 в TeX Gyre Termes Math

Продолжая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 вышеприведенный код дает следующий результат

оригинальный вывод xelatex

для кселатекса и

оригинальный вывод lualatex

для луалатекса.

При использовании кернированных шрифтов Ryge получаем

вывод xelatex с использованием шрифта Ryge с кернингом

при компиляции с помощью xelatex и

вывод lualatex с использованием шрифта Ryge с кернингом

при компиляции с помощью 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}

Связанный контент