我制作了一种用于音乐功能和声分析的字体,其中包含连字和其他 OpenType“魔法”。TobiW 在此主题在一个德语排版论坛上向我展示了如何在 LuaLaTeX 中使用包含连字(如-5
和_5
和 )的字体(通过将s 设置为和)。-~
\catcode
~
_
现在几乎所有功能都可以使用,但包含 -(连字符)的几个连续连字符无法使用 — 只有最后一个连字符可以由 LuaLaTeX 渲染。例如,-4-4-4
应该给出 ⁴⁴⁴,但它给出的是 -4-4⁴。相反,_4_4_4
它给出了预期的 ₄₄₄。
这几乎肯定是 ((Lua)La)TeX 的问题,Pango/Harfbuzz 正确地渲染了示例。TobiW 建议关闭 TeX 连字符(例如--
–)并重新定义\hyphenchar
,但都没有帮助。知道为什么连字符仍然如此特殊吗?
\documentclass{article}
\usepackage{fontspec}
\newcommand{\func}[1]{{%
\fontspec{Harmony}[RawFeature=-tlig]% turn off TeX ligatures
\hyphenchar\font=-1\relax% don’t use - for hyphenation
\catcode45=12\relax% 45=hyphen
\catcode95=12\relax% 95=underscore
\scantokens{#1\empty}% \scantokens makes catcode definitions apply to #1
}}
\begin{document}
\func{-4-4}
\func{_4_4}
\func{-- –}
\end{document}
提前感谢你的帮助!
PS,差点忘了:由于其他原因我必须使用 LuaLaTeX,因此使用 XeLaTeX(如果这有帮助的话)对我来说不是一个选择。
答案1
在 LuaTeX 中,你必须使用\exhyphenchar
而不是\hyphenchar
。此外,当段落结束且\hbox/\vbox
组结束后,才会查询该值,因此你可以使用
\documentclass{article}
\usepackage{fontspec}
\newfontface\harmonyfont{Harmony}
\newcommand{\func}[1]{{%
\leavevmode
\exhyphenchar=-1
\hbox{%
\harmonyfont
\catcode`\_=12
\scantokens{#1}% \scantokens makes catcode definitions apply to #1
}%
}}
\begin{document}
\func{-4-4}
\func{_4_4}
\end{document}