我想使用\textls
microtype 包中的命令来拉伸一个单词,并使用 lua-ul 包为其加下划线。
不幸的是,我收到了一条被打断的台词:
参见字母 v 和 e 下方线条的间隙。
梅威瑟:
\documentclass{article}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage[soul]{lua-ul}
\setmainfont{Garamond Libre Regular}[BoldFont=Garamond Libre Bold]
\begin{document}
\Huge\bfseries
\ul{\textls[50]{Gestattungsvertrag}}
\bigskip
\textls[50]{\ul{Gestattungsvertrag}}
\end{document}
我在这里看到过这个答案:https://tex.stackexchange.com/a/586053/4736
显然,如果能在拉长的单词下划线而行间没有间隙,那就太好了。欢迎提出任何想法!我测试了不同的字体,所以间隙与字体无关。
答案1
编辑
该错误已在 的开发版本中修复luaotfload
,现在使用字母间距时字体字距节点保持相同的子类型。
原来的
该问题实际上与微类型无关,您可以使用以下内容产生该问题:
\documentclass{article}
\font\foo="name:GaramondLibreRegular:letterspace=50;"
\usepackage{lua-ul}
\begin{document}
\foo
\underLine{Gestattungsvertrag}
\end{document}
问题是,插入的 kern 节点(至少在这种luaotfload
情况pre_linebreak_filter
下)没有命令设置的属性\ul
。
通常这没问题,因为lua-ul
它意识到了这一点并且测试一个节点是否是子类型 0(字体)的 kern 节点。https://github.com/zauguin/luaul/blob/bdfe9ed5036d51d27266252dc14473ae7d0e82fc/lua-ul.dtx#L745-L756。
当使用字母间距功能时,luaotfload
将子类型 0 的 kern 节点替换为子类型 1 (userkern) 的 kern 节点。https://github.com/latex3/luaotfload/blob/72561365e3de47c138418af7d11ab335683ff7f0/src/luaotfload-letterspace.lua#L340-L360。
lua-ul
除了打补丁或之外,我想不出一个简单而优雅的方法来解决这个问题luaotfload
。例如,更改行
elseif id == kern_t and subtype == 0 then
到
elseif id == kern_t and (subtype == 0 or subtype == 1) then
正在lua-ul.lua
工作。如果你要在本地环境中修改包,请记住在以下限制下进行:LaTeX 项目公共许可证 (LPPL),版本 1.3c