.png)
Todavía tengo un problema extraño con el equilibrio de columnas en eledmac.sty
las notas al pie de dos columnas. Pero tengo un nuevo MWE, lo que posiblemente muestra que esto podría no ser un problema específico eledmac
(es por eso que lo publico aquí para una audiencia más amplia).
Tengo este MWE simple:
\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}
En este MWE, las notas al pie de las dos columnas se ven desequilibradas de esta manera:
Pero si eliminocualquierael\section
oel itemize
entorno (poniendo en su lugar texto normal para que mantenga el mismo espacio vertical), las columnas quedarán equilibradas así:
Lo mismo ocurre si uso un quote
entorno en lugar de itemize
.
¿Es posible que itemize
y hacer algo extraño en el sistema de penalización de modo que el cálculo de la penalización para el equilibrio de columnas en la nota al pie se "irrite" o algo así quote
?\section
En miPublicación anteriorSeñalé que no es posible influir adecuadamente en este comportamiento mediante la configuración de las variables del panel. Enotra publicación, extraje el código del algoritmo de equilibrio de columnas para que puedas jugar con él.
Respuesta1
¡Guau, el kernel de LaTeX todavía puede, después de dos décadas, ofrecer sorpresas!
Qué error tan desagradable y ahí desde el día -1.
Esto no es un problema de eledmac, es un problema de la forma en que LaTeX intenta mantener al menos 2 líneas de texto después del encabezado de una sección. Lo hace configurándolo \clubpenalty
en 10000 y luego lo usa \everypar
para restaurar la configuración original cuando comienza el segundo párrafo.
Desafortunadamente, el segundo párrafo del MWE es un entorno y, por lo tanto, el reinicio ocurre dentro de un grupo. Por lo tanto, al final el medio ambiente \clubpenalty
recupera su valor prohibitivo. Eso no sería tan malo, ya que \everypar
también lo es recuperar su definición para restablecerlo.
Sin embargo, una vez que el grupo de entorno ha finalizado, LaTeX ejecuta más código para manejar el llamado "entorno de párrafo" (envs que tienen líneas en blanco alrededor a medida que obtienen espacio adicional) y ese mecanismo ( \@doendpe
) también se utiliza \everypar
para restaurar algunas configuraciones y en el camino el El código para restaurar \clubpenalty
se pierde.
Como resultado, a partir de ahí `\clubpenalty permanece en 10000 manteniendo juntas las dos primeras líneas en todos los párrafos siguientes --- y eso es lo que marca la diferencia en las notas al pie: la segunda nota al pie no tiene un punto de interrupción entre la primera y la segunda. línea por más tiempo).
En el texto normal o, de hecho, en la mayoría de los documentos de LaTeX, eso pasa desapercibido, ya que LaTeX generalmente encuentra un salto de página cercano que es aceptable (y las líneas del club no son tan buenas de todos modos :-)), pero aquí se muestra claramente.
\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}
Si ejecuta la versión anterior, podrá ver cómo se desarrolla el drama.
Una posible solución podría ser la siguiente (pero digo podría, ya que ésta es realmente un área extremadamente delicada y no estoy seguro de haber pensado en todas las implicaciones... así que tómalo como una idea no probada: básicamente se remonta \clubpenalty
incondicionalmente a su valor guardado cuando se alcanza el final de un env par, bien podría darse el caso de que esto deba hacerse condicionalmente:
\makeatletter
\def\@doendpe{\@endpetrue
\def\par{\@restorepar
\clubpenalty \@clubpenalty
\everypar{}\par\@endpefalse}%
\everypar{{\setbox\z@\lastbox}\everypar{}\clubpenalty \@clubpenalty
\@endpefalse}}
\makeatother