Изменение шаблонов разрывов строк

Изменение шаблонов разрывов строк

Я хочу сообщить 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, вы можете добавить туда дискреционные значения, так что вместо "чистого" WNJ вы можете ввести \discretionary{}{}{^^^^200c}разрешение переносов строк. Конечно, переписывание всего документа потребовало бы много работы, поэтому вы можете указать 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)в выходной поток. Во втором случае он помещает \-в выходной поток a, который является дискреционным дефисом.

И, как вы заметите, 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}

введите описание изображения здесь

Связанный контент