改编 U. Fischer 的回答中的代码,我希望这可以解决 IM Fell 中脚注标记的问题,该标记触及前面的 f。但事实并非如此。应该怎么做?
\documentclass{article}
\usepackage{fontspec}
\directlua {
fonts.handlers.otf.addfeature {
name = "ktest",
type = "kern",
data = {
["f"] = {
["o"] = 1000,
["1"] = 1000,
["¹"] = 1000
},
},
}
}
\setmainfont{imfellenglish}[RawFeature=+ktest]
\begin{document}
foof\footnote{barb.}.
\end{document}
更新:
realscripts 包制作\textsuperscript
并\footnote
访问上标字形,但新的字距调整被忽略。
\documentclass{article}
\usepackage{fontspec}
\usepackage{realscripts}
\directlua {
fonts.handlers.otf.addfeature {
name = "ktest",
type = "kern",
data = {
["f"] = {
["⁵"] = 1000,
}
}
}
}
\setmainfont{ebgaramond}[RawFeature=+ktest]
\begin{document}
\noindent
f⁴\\
f⁵\\
f\textsuperscript{5}\\
f\footnote{test}\\
f\footnote{test}\\
f\footnote{test}\\
f\footnote{test}\\
f\footnote{test}
\end{document}
PS III. 甚至使用 fontforge 更改 otf 也不起作用。
答案1
这realscript
无济于事:最后您仍将使用两种不同的字体——主字体和带有 +sups 开放类型标签的上标字体。
因此,如果您想解决字距调整问题,您需要重新定义\textsuperscript
以便它直接访问上标字形(该示例仅适用于 1-5),并且要使其正常\footnote
工作,您还需要重新定义设置脚注标记的命令——它可能会产生副作用,因为必须删除 \nobreak。示例中使用的数字是字体特定的。对于一般解决方案,需要某种方式通过名称访问字形。
\documentclass{article}
\usepackage{fontspec}
\directlua {
fonts.handlers.otf.addfeature {
name = "ktest",
type = "kern",
data = {
["f"] = {
["one.sups"] = 1000,
[983449] = 1000,
[983450] = 1000,
[983451] = 1000,
[983452] = 1000,
}
}
}
}
\setmainfont{ebgaramond}[RawFeature=+ktest]
\begin{document}
\renewcommand\textsuperscript[1]{%
\ifcase #1
\or \symbol{983448}%one.sups
\or \symbol{983449}%two.sups
\or \symbol{983450}%three.sups
\or \symbol{983451}%four.sups
\or \symbol{983452}%five.sups
\fi}
\makeatletter
\renewcommand\@makefnmark{\textsuperscript{\@thefnmark}}
\def\@footnotemark{%
\leavevmode
\ifhmode\edef\@x@sf{\the\spacefactor}%\nobreak
\fi
\@makefnmark
\ifhmode\spacefactor\@x@sf\fi
\relax}
f\footnote{test} \\
f\footnote{test}\\
f\footnote{test}\\
f\footnote{test}\\
f\footnote{test}
f\textsuperscript{1}
f\textsuperscript{2}
f\textsuperscript{3}
f\textsuperscript{4}
f\textsuperscript{5}
\end{document}