Alterando padrões de quebra de linha

Alterando padrões de quebra de linha

Quero informar ao latex que não há problema em quebrar linhas em caracteres ZWNJ (U + 200C), se necessário. Como posso alterar os padrões de quebra de linha (hifenização) para permitir isso?

\hyphenation não funciona para mim e dá o erro "Not a letter..." quando sua entrada contém um ZWNJ.

Exemplo (compilar com xelatex):

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

Responder1

Você pode evitar o erro de hifenização atribuindo um \lccodevalor diferente de 0 ao caractere.

Algo assim poderia funcionar (mas como não consigo ler o script ...):

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

\begin{document}

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


\end{document}

Você também pode definir o ZWJN como hífen:

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

\begin{document}

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


\end{document}

Responder2

Para permitir quebras de linha no ZWNJ, você pode adicionar discricionários lá, então, em vez de um WNJ "puro", você pode inserir \discretionary{}{}{^^^^200c}para permitir quebras de linha. Agora, é claro, reescrever todo o seu documento daria muito trabalho, então você pode dizer ao XeTeX para sempre inserir esta sequência quando encontrar um ZWNJ, tornando o ZWNJ ativo e atribuindo \discretionary{}{}{^^^^200c}como seu substituto. O newunicodecharpacote torna isso fácil:

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

insira a descrição da imagem aqui (Isso pressupõe que você deseja que o TeX evite quebras se não for necessário (como na hifenização), mas não deseja inserir hífens.)

Responder3

Não tenho acesso às suas fontes, então demonstro com outro caractere Unicode o que tenho em mente.

Eu uso meu novo tokcyclepacote que foi lançado ontem:https://www.ctan.org/pkg/tokcycle. Em um problema como esse, você pode pensar no pacote como um editor de stream glorificado que funciona com tokens LaTeX.

Aqui, procuro cada token sucessivo no fluxo. Se corresponder ao caractere unicode especificado (aqui ), colocará algo diferente no fluxo de saída. No primeiro caso, ele é colocado (Hi Mom)no fluxo de saída. No segundo caso, coloca a \-no fluxo de saída, que é um hífen discricionário.

E, como você notará, tokcycletambém pode processar adequadamente espaços, macros e grupos, mesmo trabalhando além dos limites da seção.

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

insira a descrição da imagem aqui

informação relacionada