更改换行模式

更改换行模式

我想告诉 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}

在此处输入图片描述 (这假设您希望 TeX 避免在那里断开(如果没有必要的话)(例如连字符),但您不想插入连字符。)

答案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}

在此处输入图片描述

相关内容