
Betrachten Sie das folgende FMWE (Fairly Minimal Working Example):
\documentclass[a4paper]{article}
\usepackage{kantlipsum,xgalley}
\usepackage[scale=.8]{geometry}
\pagestyle{empty}
\ExplSyntaxOn
\NewDocumentCommand\resetindents { }
{
\galley_parshape_set_multi:nnnN { 0 } { 0pt } { 0pt } \c_true_bool
}
\NewDocumentCommand\cutleft { m m }
{
\galley_cutout_left:nn { #1 } { #2 }
}
\NewDocumentCommand\cutright { m m }
{
\galley_cutout_right:nn { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
% \ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
% \ExplSyntaxOff
\end{document}
Die von mir erwartete Ausgabe dieses Codes ist
Die tatsächliche Ausgabe ist
Gibt es eine richtige Möglichkeit, das erwartete Ergebnis zu erzielen, ohne den Hauptteil des Dokuments zu ändern?
Beachten Sie, dass jede der folgenden beiden Änderungen am Textkörper ausreicht, um das gewünschte Ergebnis zu erzielen:
Kommentieren Sie die Zeile aus.
% \resetindents
Entkommentieren Sie die Zeilen
% \ExplSyntaxOn
Und
% \ExplSyntaxOff
weshalb diese Zeilen in der Quelle stehen.
Dies scheint das Problem jedoch nur \resetindents
wirklich zu lösen, da das folgende Beispiel auch die tatsächliche, unerwünschte Ausgabe liefert.
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
\ExplSyntaxOff
\end{document}
Offenbar verhindert das Entfernen von Leerzeilen aus dem Quelltext, dass expl3
das Problem durch die Umstellung auf Syntax vermieden werden kann. Außerdem
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]\par
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]\par
% \resetindents
\kant[6-7]\par
\ExplSyntaxOff
\end{document}
veranschaulicht ebenfalls das Problem.
Daher \resetindents
scheint es notwendig zu sein, aber ichdenkendass die Philosophie der Galeeren nahelegt, dass dies nicht so sein sollte.
Mich würde interessieren, wie das Schnittmuster bestimmt wird. Zum Beispiel:
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5-6]
\kant[7]
\end{document}
wiederholt den Schnitt erst im letzten Absatz
während
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
wiederholt den Schnitt in den letzten beiden Absätzen
In keinem Fall wird der letzte Schnitt wiederholt, da dies zu einem Schnitt auf der rechten Seite führen würde. Entscheidend erscheint, dass der wiederholte Schnitt mehr als einen einzigen Absatz umfasst.
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
Allerdings ist der Effekt zumindest nicht kumulativ.
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
This is another extremely short paragraph.
\kant[5]
\kant[6]
\kant[7]
\end{document}
Bitte beachte, dass
Ich weiß ganz genau, dass es
l3galley
sich um ein Experiment handelt und dass es wahrscheinlich nicht mehr funktioniert, wenn man versucht, es auf alle möglichen seltsamen und wunderbaren Arten zu verwenden. Betrachten Sie dies als eine geführte Reise durch einen kleinen Teil der daraus resultierenden Seltsamkeiten und Wunder.Mir ist auch bewusst, dass Seltsamkeit und Wunderbarkeit sehr stark im Auge des Betrachters liegen. Es ist durchaus möglich, dass der Effekt, den ich als unerwartet erachte, tatsächlich ein Designmerkmal ist, das die Entwickler sehr schätzten, die viele Stunden über einer heißen Tastatur verbrachten und verzweifelt versuchten, die Ausschnitte nach einem präzisen Algorithmus zu wiederholen, so obskur mir dessen Muster auch erscheinen mag. TeX ist ein Mysterium (wie sonst könnte man die Beschwörung typografischer Geister durch seltsame Mischungen aus Minus- und Großbuchstaben beschreiben?) und ich wäre enttäuscht, wenn dieses Mysterium in seinen Nachkommen völlig verschwinden würde.
Antwort1
Dies lag an einem Fehler in l3galley
. In der Demo \parshape
wird auf der obersten Ebene der eingerichtet, dann wird der Ausschnitt innerhalb einer Gruppe (hier unsichtbar, aber innerhalb einer Gruppe vorhanden) „aufgebraucht“ \kant
. \par
Nach der Gruppierung \parshape
wurde der nicht zurückgesetzt, da l3galley
Versuche, dies zu vermeiden, nicht erforderlich waren (es ist eigentlich kein Ausschnitt vorhanden und es wird kein anderer Rand oder was auch immer eingerichtet).
Der Code wurde nun geändert, um zu erkennen, dass der Ausschnitt noch „aktiv“ ist und \parshape
eine Einstellung erfordert, wenn \par
er auftritt und sich nicht auf der obersten Gruppenebene befindet. Dieser Fix wird im nächsten expl3
Update erscheinen, wahrscheinlich später in dieser Woche (Mitte Juni 2016).