Seltsamer Fehler mit \linenottooshort in Memoiren

Seltsamer Fehler mit \linenottooshort in Memoiren

Laut der Dokumentation von Memoir, Kapitel 8.4.1, soll der Befehl \linenottooshort dafür sorgen, dass die letzte Zeile eines Absatzes nicht kürzer als eine optionale Länge (Standard 2em) ist. Ich erwarte also, dass der Befehl mir hilft, die Anzahl der Absätze mit kurzen letzten Zeilen zu reduzieren.

Allerdings liefert das erste MWE (ohne \linenottooshort) das in der Abbildung unten linke Ergebnis, während das zweite MWE (mit \linenottooshort) das rechte Ergebnis liefert, das hinsichtlich kurzer letzter Zeilen deutlich schlechter ist.

Ich vermute, dass der Text in der letzten Zeile des Beispiels rechts nicht kürzer als 2em sein dürfte. Aber \linenottooshort sollte Absätze doch nicht schlechter machen, als sie ohne es wären? Was ist hier los?

Links:

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

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

Rechts:

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

\linenottooshort

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

vorher und nachher

Antwort1

Die Position von \linenottooshortist falsch: Es müsste nach kommen \begin{document}, da vorher memoirdie Seitenmaße noch nicht aktualisiert wurden.

Der Befehl führt auf jeden Fall zu anderen merkwürdigen Ergebnissen, da er falsch einstellt \@tempdima, was den Wert ohne Vorankündigung ändern könnte, da es sich um ein Scratch-Längenregister handelt.

Wenn Sie sich den Wert \@tempdimanach „doing“ \linenottooshortin der Präambel ansehen, erhalten Sie 325,19989 pt. Nach „doing“ in der documentUmgebung beträgt der Wert 297,63295 pt.

Eine korrekte Definition wäre

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

Beachten Sie, dass dies zu seltsamen Ergebnissen in oder Listen führen kann minipage. \parboxIch bin mir nicht wirklich sicher, ob es nützlich ist.

verwandte Informationen