使用 LuaTeX 和 realscripts 调整字距

使用 LuaTeX 和 realscripts 调整字距

我正在使用该realscript包通过 LuaLaTex 获得真正的上标和下标。但是,我对我使用的字体 Linux Libertine 的上标字距调整并不满意。我尝试使用 Lua 代码手动调整字距。但是,它似乎没有任何明显的区别。这是我的代码:

\documentclass{article}
\setlength\parindent{0pt}
\usepackage{fontspec}
\directlua {
  fonts.handlers.otf.addfeature {
    name = "supkern",
    type = "kern",
    data = {
      ["A"] = { ["eight.superior"] =  -180 },
    },
  }
}
\setmainfont{Linux Libertine O}
\usepackage{realscripts}

\begin{document}
A\textsuperscript{8}

\addfontfeature{RawFeature=+supkern}A\textsuperscript{8}
\end{document}

输出如下:

在此处输入图片描述

答案1

问题是 realscript 本身在本地使用\addfontfeature。这意味着您实际上对 A 和上标使用了两种不同的字体。如果您对两者使用相同的字体功能,效果会很好:

\documentclass{article}
\setlength\parindent{0pt}
\usepackage{fontspec}
\directlua {
  fonts.handlers.otf.addfeature {
    name = "supkern",
    type = "kern",
    data = {
      ["A"] = { ["eight.superior"] =  -180 },
    },
  }
}
\setmainfont{Linux Libertine O}


\begin{document}

{\addfontfeature{RawFeature=+sups}A8}

{\addfontfeature{RawFeature=+supkern;+sups}A8}
\end{document}

在此处输入图片描述

答案2

在此处输入图片描述

\documentclass{article}
\setlength\parindent{0pt}
\usepackage{fontspec}
\directlua {
  fonts.handlers.otf.addfeature {
    name = "supkern",
    type = "kern",
    data = {
      ["A"] = { ["eight.superior"] =  -180 },
    },
  }
}
\setmainfont{Linux Libertine O}
\usepackage{realscripts}
\showoutput
\begin{document}
A\textsuperscript{8}

A⁸


\addfontfeature{RawFeature=+supkern}A\textsuperscript{8}

A⁸
\end{document}

使用 realscripts/ 的版本\textsuperscript从不同的字体(或至少是相同的字体,以不同的方式加载)中获取上标,因此不存在字母间的字距

....\TU/LinuxLibertineO(2)/m/n/10 A
....\TU/LinuxLibertineO(3)/m/n/10 ⁸

然而使用 ⁸ 的版本只从当前字体中获取字符并应用字距

....\TU/LinuxLibertineO(2)/m/n/10 A
....\kern -1.8
....\TU/LinuxLibertineO(2)/m/n/10 ⁸

相关内容