Gibt es eine richtige Möglichkeit, die spätere Wiederholung eines Fahnenausschnitts zu verhindern, ohne den Hauptteil des Dokuments zu ändern?

Gibt es eine richtige Möglichkeit, die spätere Wiederholung eines Fahnenausschnitts zu verhindern, ohne den Hauptteil des Dokuments zu ändern?

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

erwartet

Die tatsächliche Ausgabe ist

tatsächlich

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:

  1. Kommentieren Sie die Zeile aus.

    % \resetindents
    
  2. Entkommentieren Sie die Zeilen

    % \ExplSyntaxOn
    

    Und

    % \ExplSyntaxOff
    

weshalb diese Zeilen in der Quelle stehen.

Dies scheint das Problem jedoch nur \resetindentswirklich 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 expl3das 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 \resetindentsscheint 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

nur Finale

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

die letzten beiden

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}

nochmal rechts abschneiden

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}

nicht kumulative, sich wiederholende Schnitte

Bitte beachte, dass

  • Ich weiß ganz genau, dass es l3galleysich 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 \parshapewird auf der obersten Ebene der eingerichtet, dann wird der Ausschnitt innerhalb einer Gruppe (hier unsichtbar, aber innerhalb einer Gruppe vorhanden) „aufgebraucht“ \kant. \parNach der Gruppierung \parshapewurde der nicht zurückgesetzt, da l3galleyVersuche, 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 \parshapeeine Einstellung erfordert, wenn \parer auftritt und sich nicht auf der obersten Gruppenebene befindet. Dieser Fix wird im nächsten expl3Update erscheinen, wahrscheinlich später in dieser Woche (Mitte Juni 2016).

verwandte Informationen