.png)
Ich habe immer noch ein seltsames Problem mit dem Spaltenausgleich in eledmac.sty
zweispaltigen 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:
Aber wenn ich entferneentwederDie\section
oderdie itemize
Umgebung (indem Sie stattdessen normalen Text einfügen, sodass der vertikale Abstand gleich bleibt), werden die Spalten folgendermaßen ausgeglichen:
Dasselbe gilt, wenn ich quote
anstelle von eine Umgebung verwende itemize
.
Ist es möglich, dass itemize
irgendetwas 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 \clubpenalty
auf 10000 gesetzt wird und dann \everypar
beim 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 \clubpenalty
ihren Sperrwert zurück. Das wäre nicht so schlimm, da man \everypar
zum 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, \everypar
um einige Einstellungen wiederherzustellen. Dabei geht der wiederherzustellende Code \clubpenalty
verloren.
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 \clubpenalty
bedingungslos 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