更改连字样式

更改连字样式

我在一篇文章中看到(这里在第 43 页,注释 2,法语)一种有趣的连字方法。我认为作为练习,尝试使用 XeTeX 重现它会很有趣。它看起来像这样:

... 字字长<

>单词单词...

代替

... 字字长-

单词单词...

其中 < 和 > 实际上是字符 U+2039 和 U+203A。

使用 fontspec 我将 HyphenChar 更改为 < \addfontfeature但是,我想知道如何在下一行的开头添加其他字符?

更改 HyphenChar 产生了一个我无法解决的问题。在我使用的文本中,单词“TeXnicien”没有连字符,并且会产生一个溢出的框。我无法使用,\hyphenation因为这个单词包含一个命令。我以为我可以使用\-,但是当 HyphenChar 是破折号时它工作正常,但在我更改它之后(正确剪切单词但没有在换行符处放置任何字符),它产生了“不正确的自由列表”错误。

提前致谢!

答案1

自动连字机制的工作原理是隐式插入

\discretionary{\char\hyphenchar\font}{}{}

在正常情况下,这意味着

\discretionary{\char`\-}{}{}

该原语\discretionary有三个参数:断行前文本、断行后文本和不断行文本。前两个参数用于需要随意断行时,否则使用第三个参数。

这种隐式插入在 TeX/XeTeX 中不受用户控制(但可以在 LuaTeX 中修改,尽管我不知道如何修改)。因此,以建议的方式进行连字符只能通过手动添加来完成,在我们希望 XeTeX 可能进行连字符的每个位置,

\discretionary{^^^^2039}{^^^^203a}{}

这与

\discretionary{‹}{›}{}

因为在第一种情况下,字符仅用代码点表示。

但是,当当前语言为法语时,使用这些字符会遇到麻烦,因为它们会被视为所有标点符号。解决方法是定义一个宏:

\newcommand{\mydisc}{%
  \begingroup\XeTeXinterchartokenstate=0
  \discretionary{^^^^2039}{^^^^203a}{}\endgroup
}

因此,文件

\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}

\setmainlanguage{french}

\newcommand{\mydisc}{%
  \begingroup\XeTeXinterchartokenstate=0
  \discretionary{^^^^2039}{^^^^203a}{}\endgroup}

\begin{document}
\parbox{0pt}{xyz\mydisc abc}
\end{document}

通过 XeLaTeX 运行将产生

在此处输入图片描述

和平常一样,这\parbox只是为了在所有可行点强制连字。

相关内容