根據回憶錄的文檔,第 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
或 清單中產生奇怪的結果。我不太確定它的用處。