根据回忆录的文档,第 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;在环境中完成之后,该值将为 297.63295pt。\linenottooshort
document
正确的定义是
\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
我不太确定它的实用性。