在我使用的斜体字体中,撇号在其边界框中显示得太靠右,因此撇号和字形之间的空间看起来比两个字形之间的空间要小。我改编了以下代码:LuaTeX 中的字距调整以增加此空间。但是,代码适用于文档中使用的所有字体,但我希望它仅适用于斜体字体。有办法做到这一点吗?
电流输出:
期望输出:
(为了演示目的,空间被夸大了)
梅威瑟:
\documentclass{article}
\usepackage{fontspec}
\directlua{
function kernspace(head)
for space in node.traverse_id(node.id('glue'), head) do
if space.subtype == 13 then
local prev = node.prev(space)
local next = node.next(space)
if prev.id == 29 and next.id == 29 then
if prev.char == 8217 then
space.width = space.width + 1000000
end
end
end
end
return true
end
luatexbase.add_to_callback("pre_linebreak_filter", kernspace, "kernspace");
}
\setmainfont{times.ttf}[
ItalicFont = timesi.ttf
]
\begin{document}
`It's time to rock 'n' roll,' he said. \par
\textit{`It's time to rock 'n' roll,' he said.}
\end{document}
答案1
我尝试了 Ulrike Fischer 的建议来解决字距问题(常规字体和斜体字体中的 » + W)。该方法将展示如何添加字体功能,但可能无法解决问题具体的关于间距的问题。此外,我对 luatex 和字体功能的了解相当有限。
添加字体功能。就我而言,这只是一个字距调整问题。这将添加
ktest
为字体功能,并在 CHAR2 和 CHAR1 同时出现时将其向 CHAR2 移动 100 个单位。\directlua {fonts.handlers.otf.addfeature { name = "ktest", type = "kern", data = {["CHAR1"] = {["CHAR2"] = -100} } } }
然后添加另一个字体功能,
ktestit
它的功能相同,但单位数少 50 个。我们仅将其用于斜体字体。\directlua {fonts.handlers.otf.addfeature { name = "ktestit", type = "kern", data = {["CHAR1"] = {["CHAR2"] = -50} } } }
RawFeature
将添加为全局字体功能。中的ktest
可选参数将指定将由您的斜体字体功能替换。 但是,我只用 .otf 字体测试过。 也许您可以切换。ItalicFeatures
\setmainfont
ktest
ktestit
\setmainfont{YOURFONT} [Extension=.otf, ItalicFont=ITALICFONT, RawFeature=+ktest, ItalicFeatures={RawFeature={-ktest;+ktestit}} ]