Cambiar patrones de salto de línea

Cambiar patrones de salto de línea

Quiero informar a Latex que está bien dividir líneas en caracteres ZWNJ (U+200C), si es necesario. ¿Cómo puedo cambiar los patrones de salto de línea (separación de palabras) para permitirlo?

\hyphenation no funciona para mí y da el error "No es una letra..." cuando su entrada contiene un ZWNJ.

Ejemplo (compilar con xelatex):

\documentclass{book}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\begin{document}
شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده
\end{document}

Respuesta1

Puede evitar el error de separación de palabras asignando un \lccodevalor distinto de 0 al carácter.

Algo como esto podría funcionar (pero como no puedo leer el guión...):

\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200B]{XB Niloofar} %don't show hyphenchar
\lccode`^^^^200c=`^^^^200c
\hyphenation{شخصی-‌-سازی-‌-شده}

\begin{document}

شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده


\end{document}

También puedes configurar ZWJN como guión:

\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200C]{XB Niloofar}

\begin{document}

شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده


\end{document}

Respuesta2

Para permitir saltos de línea en ZWNJ, puede agregar discrecionales allí, de modo que en lugar de un WNJ "puro", puede ingresar \discretionary{}{}{^^^^200c}para permitir saltos de línea. Ahora, por supuesto, reescribir todo el documento supondría mucho trabajo, por lo que puede decirle a XeTeX que siempre inserte esta secuencia cuando encuentre un ZWNJ activando ZWNJ y asignándolo \discretionary{}{}{^^^^200c}como reemplazo. El newunicodecharpaquete lo hace fácil:

\usepackage{xepersian}
\usepackage{newunicodechar}
\settextfont{Shabnam.ttf}
\newunicodechar{^^^^200c}{\discretionary{}{}{^^^^200c}}
\begin{document}
\showthe\hyphenchar\font
شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده شخصی‌سازی‌شده
\end{document}

ingrese la descripción de la imagen aquí (Esto supone que desea que TeX evite romperse allí si no es necesario (como con la división de palabras) pero no desea insertar guiones).

Respuesta3

No tengo acceso a tus fuentes, así que demuestro con otro carácter Unicode lo que tengo en mente.

Utilizo mi nuevo tokcyclepaquete que se lanzó ayer:https://www.ctan.org/pkg/tokcycle. En un problema como este, puedes pensar en el paquete como un editor de flujo glorificado que funciona con tokens LaTeX.

Aquí, busco cada token sucesivo en la secuencia. Si coincide con el carácter Unicode especificado (aquí ), coloca algo diferente en el flujo de salida. En el primer caso, se coloca (Hi Mom)en el flujo de salida. En el segundo caso, coloca un guión \-en el flujo de salida, que es un guión discrecional.

Y, como notará, tokcycletambién puede procesar adecuadamente espacios, macros y grupos, incluso trabajando a través de los límites de las secciones.

\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}

ingrese la descripción de la imagen aquí

información relacionada