Falha estranha com \linenottooshort no livro de memórias

Falha estranha com \linenottooshort no livro de memórias

De acordo com a documentação do livro de memórias, capítulo 8.4.1, o comando \linenottooshort deve garantir que a última linha de um parágrafo não seja menor que um comprimento opcional (padrão 2em). Portanto, espero que o comando me ajude a reduzir o número de parágrafos com últimas linhas curtas.

Porém, o primeiro MWE (sem \linenottooshort) dá o resultado à esquerda na figura abaixo, enquanto o segundo MWE (com \linenottooshort) dá o resultado à direita, o que é claramente pior em relação às últimas linhas curtas.

Suponho que o texto da última linha do exemplo à direita pode não ser menor que 2em. Mas certamente \linenottooshort não deveria tornar os parágrafos piores do que seriam sem ele? O que está acontecendo aqui?

Esquerda:

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\begin{document}
\blindtext
\end{document}

Certo:

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\linenottooshort

\begin{document}
\blindtext
\end{document}

antes e depois

Responder1

A localização de \linenottooshortestá errada: deveria ir depois de \begin{document}, pois antes memoirainda não atualizou as dimensões da página.

De qualquer forma, o comando certamente dará outros resultados estranhos, pois configura erroneamente \@tempdima, o que pode mudar de valor sem aviso prévio, sendo um registrador de comprimento zero.

Se você olhar o valor de \@tempdimaafter doing \linenottooshortno preâmbulo, você obtém 325,19989pt; feito no documentambiente, o valor será 297,63295pt.

Uma definição correta seria

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\makeatletter
\renewcommand*{\linenottooshort}[1][4em]{%
  \@tempdima=\hsize
  \advance\@tempdima -#1\relax
  %\leftskip\z@skip    % ???
  %\rightskip\leftskip % ???
  \begingroup\edef\x{\endgroup
    \parfillskip=\the\@tempdima \@minus \the\@tempdima\relax
  }\x
}
\makeatother

\AtBeginDocument{\linenottooshort}

\begin{document}

\blindtext

\end{document}

Cuidado, pois isso pode gerar resultados estranhos em minipageou \parboxem listas. Não tenho certeza sobre sua utilidade.

informação relacionada