Extraño error con \linenottooshort en sus memorias

Extraño error con \linenottooshort en sus memorias

Según la documentación de las memorias, capítulo 8.4.1, se supone que el comando \linenottooshort garantiza que la última línea de un párrafo no sea más corta que una longitud opcional (2em por defecto). Entonces espero que el comando me ayude a reducir la cantidad de párrafos que tienen últimas líneas cortas.

Sin embargo, el primer MWE (sin \linenottooshort) da el resultado a la izquierda en la figura siguiente, mientras que el segundo MWE (con \linenottooshort) da el resultado a la derecha, lo que es claramente peor en el caso de las últimas líneas cortas.

Supongo que el texto de la última línea del ejemplo de la derecha no puede tener menos de 2 em. Pero seguramente \linenottooshort no debería hacer que los párrafos sean peores de lo que serían sin él. ¿Que está pasando aqui?

Izquierda:

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

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

Bien:

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

\linenottooshort

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

antes y después de

Respuesta1

La ubicación de \linenottooshortes incorrecta: debería ir después \begin{document}, porque antes memoiraún no ha actualizado las dimensiones de la página.

De todos modos, el comando seguramente dará otros resultados extraños, porque establece incorrectamente \@tempdima, lo que podría cambiar el valor sin previo aviso, siendo un registro de longitud temporal.

Si observa el valor de \@tempdimadespués de hacerlo \linenottooshorten el preámbulo, obtiene 325,19989 pt; hecho en el documententorno, el valor será 297.63295pt.

Una definición correcta sería

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

Tenga en cuenta que esto podría dar resultados extraños en minipagelistas \parboxo. No estoy muy seguro de su utilidad.

información relacionada