
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 \lccode
valor 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 newunicodechar
paquete lo hace fácil:
\usepackage{xepersian}
\usepackage{newunicodechar}
\settextfont{Shabnam.ttf}
\newunicodechar{^^^^200c}{\discretionary{}{}{^^^^200c}}
\begin{document}
\showthe\hyphenchar\font
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
(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 tokcycle
paquete 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á, tokcycle
tambié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}