O que \section e itemize estão fazendo com o sistema de penalidades? (problema com balanceamento de coluna eledmac)

O que \section e itemize estão fazendo com o sistema de penalidades? (problema com balanceamento de coluna eledmac)

Ainda tenho um problema estranho com o balanceamento de colunas em eledmac.stynotas de rodapé de duas colunas. Mas tenho um novo MWE, possivelmente mostrando que este pode não ser um problema específico eledmac(é por isso que o publico aqui para um público mais amplo).

Eu tenho este MWE simples:

\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}

Neste MWE, as notas de rodapé das duas colunas parecem desequilibradas assim:

insira a descrição da imagem aqui

Mas se eu removerqualquero\section ouo itemizeambiente (colocando texto normal para que mantenha o mesmo espaço vertical), as colunas ficarão balanceadas assim:

insira a descrição da imagem aqui

O mesmo acontece se eu usar um quoteambiente em vez do itemize.

É possível que itemizeee quotefaça \sectionalgo estranho no sistema de penalidades para que o cálculo da penalidade para o balanceamento da coluna na nota de rodapé fique "irritado" ou algo assim?

No meupostagem anteriorSalientei que não é possível influenciar adequadamente esse comportamento por meio da configuração das variáveis ​​do painel. Emoutra postagem, extraí o código do algoritmo de balanceamento de coluna para que você possa brincar com ele.

Responder1

Uau, o kernel do LaTeX ainda é capaz de trazer surpresas depois de duas décadas!

Que bug desagradável e está lá desde o dia -1.

Este não é um problema do eledmac, é um problema da maneira como o LaTeX tenta manter pelo menos 2 linhas de texto após o título de uma seção. Ele faz isso definindo \clubpenaltycomo 10.000 e depois usa \everyparpara restaurar a configuração original quando inicia o segundo parágrafo.

Infelizmente o segundo parágrafo do MWE é um ambiente e então a redefinição acontece dentro de um grupo. Portanto, no final, o meio ambiente \clubpenaltyrecupera seu valor proibitivo. Isso não seria tão ruim, pois \everypartambém está recuperando sua definição para redefini-la.

No entanto, após o término do grupo de ambiente, o LaTeX executa mais código para lidar com o chamado "ambiente de parágrafo" (envs que possuem linhas em branco ao redor deles à medida que obtêm espaçamento extra) e esse mecanismo ( \@doendpe) também usa \everyparpara restaurar algumas configurações e ao longo do caminho o o código para restaurar \clubpenaltyse perde.

Como resultado daí em diante `\clubpenalty permanece em 10000 mantendo em todos os parágrafos seguintes as duas primeiras linhas juntas --- e é isso que faz a diferença nas notas de rodapé: a segunda nota de rodapé não tem um ponto de interrupção entre a primeira e a segunda linha por mais tempo).

No texto normal ou mesmo na maioria dos documentos LaTeX, isso passa despercebido, pois o LaTeX geralmente encontra uma quebra de página próxima que é aceitável (e as linhas do clube não são tão boas de qualquer maneira :-)), mas aqui é mostrado 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}

Se você executar a versão acima, poderá ver como o drama se desenrola.

Uma possível solução pode ser a seguinte (mas eu digo que pode, pois esta é realmente uma área extremamente delicada e não tenho certeza se pensei em todas as implicações... então tome isso como uma ideia não testada - basicamente, ela volta \clubpenaltyincondicionalmente para seu valor salvo quando o final de um ambiente de par é atingido, pode muito bem ser o caso de que isso precise ser feito condicionalmente:

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

informação relacionada