回憶錄中出現 \linenottooshort 的奇怪故障

回憶錄中出現 \linenottooshort 的奇怪故障

根據回憶錄的文檔,第 8.4.1 章,命令 \linenottooshort 應該確保段落的最後一行不會短於可選長度(預設為 2em)。因此,我希望該命令能夠幫助我減少最後一行較短的段落數量。

然而,第一個MWE(不帶\linenottooshort)給出了下圖左側的結果,而第二個MWE(帶\linenottooshort)給出了右側的結果,這對於短的最後幾行來說顯然更糟。

我猜右側範例最後一行的文字可能不會短於 2em。但 \linenottooshort 肯定不應該使段落變得比沒有它時更糟嗎?這裡發生了什麼事?

左邊:

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

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

正確的:

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

\linenottooshort

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

之前和之後

答案1

的位置\linenottooshort是錯誤的:它應該在 後面\begin{document},因為在它之前memoir還沒有實現頁面尺寸。

無論如何,該命令必然會給出其他奇怪的結果,因為它錯誤地設定了\@tempdima,這可能會在沒有通知的情況下更改值,成為臨時長度暫存器。

如果您查看序言中\@tempdima執行後的值,您將得到 325.19989pt;在環境\linenottooshort中完成後document,該值將為 297.63295pt。

正確的定義是

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

請注意,這可能會在minipage\parbox或 清單中產生奇怪的結果。我不太確定它的用處。

相關內容