Welche Auswirkungen haben \section und itemize auf das Strafsystem? (Problem mit dem Spaltenausgleich von eledmac)

Welche Auswirkungen haben \section und itemize auf das Strafsystem? (Problem mit dem Spaltenausgleich von eledmac)

Ich habe immer noch ein seltsames Problem mit dem Spaltenausgleich in eledmac.styzweispaltigen Fußnoten. Aber ich habe ein neues MWE, das möglicherweise zeigt, dass dies kein spezifisches Problem ist eledmac(deshalb poste ich es hier für ein breiteres Publikum).

Ich habe dieses einfache MWE:

\documentclass{article}
\usepackage{lipsum}

\usepackage{eledmac}
\foottwocolX{A}
\def\footnote#1{\footnoteA{#1}}

\begin{document}

% Either remove this section: 
\section{Section Headline}

\lipsum[1]

% ... or remove the item / quote environment: 
\begin{itemize}
%\begin{quote} 
    \item The same problem happens if this is not an itemize but a quote
        environment. 
%\end{quote}
\end{itemize}

Bla\footnote{Test.} 
Foo\footnote{Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test }
Bar \footnote{Test.} 

\end{document}

In diesem MWE sehen die beiden Spaltenfußnoten wie folgt unausgewogen aus:

Bildbeschreibung hier eingeben

Aber wenn ich entferneentwederDie\section oderdie itemizeUmgebung (indem Sie stattdessen normalen Text einfügen, sodass der vertikale Abstand gleich bleibt), werden die Spalten folgendermaßen ausgeglichen:

Bildbeschreibung hier eingeben

Dasselbe gilt, wenn ich quoteanstelle von eine Umgebung verwende itemize.

Ist es möglich, dass itemizeirgendetwas mit dem Strafsystem merkwürdig gemacht wird, sodass die Strafberechnung für den Spaltenausgleich in der Fußnote „durcheinander“ gerät oder so etwas quote??\section

In meinemvorherigen PostIch habe darauf hingewiesen, dass es nicht möglich ist, dieses Verhalten durch die Einrichtung der Panelty-Variablen angemessen zu beeinflussen.Ein weiterer Beitrag, ich habe den Code des Spaltenausgleichsalgorithmus extrahiert, damit Sie damit herumspielen können.

Antwort1

Wow, der LaTeX-Kernel kann auch nach zwei Jahrzehnten noch für Überraschungen sorgen!

Was für ein fieser Virus und er ist seit Tag -1 da.

Dies ist kein Problem von eledmac, sondern ein Problem der Art und Weise, wie LaTeX versucht, mindestens 2 Textzeilen nach einer Abschnittsüberschrift beizubehalten. Dies wird erreicht, indem der Wert \clubpenaltyauf 10000 gesetzt wird und dann \everyparbeim Starten des zweiten Absatzes die ursprüngliche Einstellung wiederhergestellt wird.

Leider ist der zweite Absatz im MWE eine Umgebung und das Zurücksetzen erfolgt daher innerhalb einer Gruppe. Daher erhält die Umgebung am Ende \clubpenaltyihren Sperrwert zurück. Das wäre nicht so schlimm, da man \everyparzum Zurücksetzen auch seine Definition zurückbekommt.

Nachdem die Umgebungsgruppe beendet wurde, führt LaTeX jedoch weiteren Code aus, um die sogenannte „Absatzumgebung“ (Umgebungen mit Leerzeilen um sich herum, da diese zusätzlichen Abstand erhalten) zu verarbeiten. Dieser Mechanismus ( \@doendpe) wird auch verwendet, \everyparum einige Einstellungen wiederherzustellen. Dabei geht der wiederherzustellende Code \clubpenaltyverloren.

Als Ergebnis bleibt „\clubpenalty“ von da an bei 10000 und hält in allen weiteren Absätzen die ersten beiden Zeilen zusammen – und das macht den Unterschied in den Fußnoten aus: Die zweite Fußnote hat keinen Unterbrechungspunkt mehr zwischen der ersten und zweiten Zeile.

In normalem Text oder tatsächlich in den meisten LaTeX-Dokumenten bleibt dies unbemerkt, da LaTeX normalerweise einen akzeptablen Seitenumbruch in der Nähe findet (und Clubzeilen sind sowieso nicht so toll :-)), aber hier ist es deutlich zu sehen.

\documentclass{article}

\def\X{\showthe\clubpenalty\showthe\everypar}

\begin{document}

\section{Section Headline}

\X

a little bit of text

\X

% Uncomment this para then the issue goes away

%Another paragraph that makes \verb=\clubpenalty= okay again.

\X

% ... or remove the item / quote environment: 
\begin{itemize}
    \item \X 
        The same problem happens if this is not an itemize but a quote
        environment. 

\end{itemize}
\X

\par

\X  Here is the issue: \verb=\clubpenalty= is restored back to 10000 but the \verb=\@doendpe= kills the also restored \verb=\everypar= so that it is never set back to normal.

Bla\footnote{Test.} 
Foo\footnote{\X Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test }
Bar \footnote{Test.} 

\X

Another paragraph

\X

\end{document}

Wenn Sie die obige Version ausführen, können Sie sehen, wie sich das Drama entfaltet.

Eine mögliche Lösung könnte die folgende sein (ich sage aber „könnte“, da dies wirklich ein äußerst heikler Bereich ist und ich nicht sicher bin, ob ich an alle Auswirkungen gedacht habe … betrachten Sie dies also als eine ungeprüfte Idee – es wird grundsätzlich \clubpenaltybedingungslos auf den gespeicherten Wert zurückgesetzt, wenn das Ende einer Par-Umgebung erreicht ist; es könnte durchaus sein, dass dies bedingt erfolgen muss):

\makeatletter
\def\@doendpe{\@endpetrue
     \def\par{\@restorepar      
              \clubpenalty \@clubpenalty
              \everypar{}\par\@endpefalse}%
     \everypar{{\setbox\z@\lastbox}\everypar{}\clubpenalty \@clubpenalty
               \@endpefalse}}
\makeatother

verwandte Informationen