胶水(包括空胶水)的 \XeTeXcharclass 为 4095(原为 255)。
XeTeX 中法语的高标点间距基于 polyglossia 和 babel/frenchb 中的 \XeTeXcharclass 和 \XeTeXinterchartoks。
作为 frenchb 的维护者,我需要检查 /positive/ 粘连符是否位于 ; : ! : 字符之一之前;检查 \XeTeXcharclass 不会区分空粘连符和正粘连符。这是错误的起源:
xelatex + frenchb 在 lstlisting 块中的某些字符前引入了额外的空格
[lstlisting 环境在每个标记之间添加“\glue 0 plus 1fil minus 1fil”]
使用 pdfTeX 或 LuaTeX 时,我会检查粘合的宽度并决定是否添加空格,这就是为什么上述错误只发生在 XeTeX 中。XeTeX 的一个可能修复方法是定义一个特殊的 \XeTeXcharclass,比如
\newXeTeXintercharclass\FBnulglue
但我不知道如何将默认宽度为 0pt 的胶水放入此类。谢谢任何提示!
答案1
您不能将胶水放在字符类中,它们对字符进行分类。
您可以通过以下方式在任意两个类之间的边界指定 0pt 粘合
\XeTeXinterchartoks xx yy = {\hksip zz\relax}
(另请注意,最近的 xetex 有更多类别,并且空类别现在是 4095 而不是 255)