我想告诉 latex,如果需要,可以在 ZWNJ (U+200C) 字符处断行。我该如何更改换行模式(连字符)以允许这样做?
\hyphenation 对我来说不起作用,当其输入包含 ZWNJ 时,会给出错误“不是字母......”。
示例(使用 xelatex 编译):
\documentclass{book}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
答案1
\lccode
您可以通过为字符分配不同于 0 的值来避免连字符错误。
类似这样的事情可能会起作用(但由于我看不懂脚本......):
\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200B]{XB Niloofar} %don't show hyphenchar
\lccode`^^^^200c=`^^^^200c
\hyphenation{شخصی--سازی--شده}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
您还可以将 ZWJN 设置为连字符:
\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200C]{XB Niloofar}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
答案2
为了允许在 ZWNJ 处换行,您可以在那里添加自由选项,这样您就可以输入\discretionary{}{}{^^^^200c}
允许换行的字符,而不是“纯”WNJ。当然,重写整个文档会很费劲,所以您可以告诉 XeTeX 在遇到 ZWNJ 时始终插入此序列,方法是激活 ZWNJ 并将\discretionary{}{}{^^^^200c}
其指定为替换。该newunicodechar
软件包使这变得简单:
\usepackage{xepersian}
\usepackage{newunicodechar}
\settextfont{Shabnam.ttf}
\newunicodechar{^^^^200c}{\discretionary{}{}{^^^^200c}}
\begin{document}
\showthe\hyphenchar\font
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
答案3
我无法访问您的字体,因此我使用另一个 Unicode 字符来演示我的想法。
我使用tokcycle
昨天刚刚发布的新包:https://www.ctan.org/pkg/tokcycle。在这样的问题中,您可以将该包视为与 LaTeX 标记一起使用的高级流编辑器。
在这里,我搜索流中的每个连续标记。如果它与指定的 unicode 字符(此处为⁊
)匹配,它会在输出流中放置一些不同的东西。在第一种情况下,它会放置(Hi Mom)
在输出流中。在第二种情况下,它会\-
在输出流中放置一个,这是一个自由连字符。
而且,正如您会注意到的,tokcycle
它可以正确处理空间、宏和组,甚至可以跨越部分边界工作。
\documentclass{article}
\usepackage{fontspec,tokcycle}
\setmainfont{Segoe UI Symbol}
\begin{document}
\Characterdirective{\ifx⁊#1\addcytoks{(Hi Mom)}\else\addcytoks{#1}\fi}
\tokencyclexpress vi⁊-a-viz\endtokencyclexpress
\Characterdirective{\ifx⁊#1\addcytoks{\-}\else\addcytoks{#1}\fi}
\tokencyclexpress xxxxx vi⁊antium vi⁊antium vi⁊antium vi⁊antium vi⁊antium vi⁊antium
vi⁊antium vi⁊antium vi⁊antium vi⁊antium vi⁊antium
\section{Works across section boundaries!!}
Blah blah blah\endtokencyclexpress
\end{document}