
Ich möchte Latex darüber informieren, dass Zeilenumbrüche bei ZWNJ-Zeichen (U+200C) zulässig sind, falls erforderlich. Wie kann ich die Zeilenumbruchmuster (Silbentrennung) ändern, um dies zu ermöglichen?
\Die Silbentrennung funktioniert bei mir nicht und gibt den Fehler „Kein Buchstabe ...“ aus, wenn die Eingabe ein ZWNJ enthält.
Beispiel (Kompilieren mit xelatex):
\documentclass{book}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
Antwort1
Sie können den Silbentrennungsfehler vermeiden, indem Sie \lccode
dem Zeichen einen Wert ungleich 0 zuweisen.
Dann könnte so etwas funktionieren (da ich das Skript aber nicht lesen kann ...):
\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200B]{XB Niloofar} %don't show hyphenchar
\lccode`^^^^200c=`^^^^200c
\hyphenation{شخصی--سازی--شده}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
Sie können ZWJN auch als Bindestrichzeichen festlegen:
\documentclass{book}
\usepackage{xepersian}
\settextfont[HyphenChar="200C]{XB Niloofar}
\begin{document}
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
Antwort2
Um Zeilenumbrüche bei ZWNJ zuzulassen, können Sie dort optionale Elemente hinzufügen, sodass Sie anstelle eines „reinen“ WNJ \discretionary{}{}{^^^^200c}
Zeilenumbrüche zulassen können. Natürlich wäre es sehr aufwändig, das gesamte Dokument neu zu schreiben, daher können Sie XeTeX anweisen, diese Sequenz immer einzufügen, wenn es auf ein ZWNJ stößt, indem Sie ZWNJ aktivieren und \discretionary{}{}{^^^^200c}
als Ersatz zuweisen. Das newunicodechar
Paket macht dies einfach:
\usepackage{xepersian}
\usepackage{newunicodechar}
\settextfont{Shabnam.ttf}
\newunicodechar{^^^^200c}{\discretionary{}{}{^^^^200c}}
\begin{document}
\showthe\hyphenchar\font
شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده شخصیسازیشده
\end{document}
(Dies setzt voraus, dass Sie in TeX an dieser Stelle Umbrüche vermeiden möchten, wenn diese nicht erforderlich sind (wie bei der Silbentrennung), Sie jedoch keine Bindestriche einfügen möchten.)
Antwort3
Da ich keinen Zugriff auf Ihre Schriftarten habe, demonstriere ich anhand eines anderen Unicode-Zeichens, was ich vorhabe.
Ich verwende mein neues tokcycle
Paket, das erst gestern veröffentlicht wurde:https://www.ctan.org/pkg/tokcycle. Bei einem Problem wie diesem können Sie sich das Paket als einen verbesserten Stream-Editor vorstellen, der mit LaTeX-Token arbeitet.
Hier suche ich nach jedem nachfolgenden Token im Stream. Wenn es mit dem angegebenen Unicode-Zeichen übereinstimmt (hier ⁊
), platziert es etwas anderes im Ausgabestream. Im ersten Fall platziert es (Hi Mom)
im Ausgabestream. Im zweiten Fall platziert es ein \-
in den Ausgabestream, was ein beliebiger Bindestrich ist.
Und wie Sie feststellen werden, tokcycle
können auch Leerzeichen, Makros und Gruppen ordnungsgemäß verarbeitet werden, sogar über Abschnittsgrenzen hinweg.
\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}