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