为了防止最后一行太短,我添加了\setlength{\parfillskip}{0pt plus\dimexpr\linewidth-2\parindent}
序言,并且它与普通段落配合得很好。
但是,此设置不适用于列表和定理。对于列表,使用包enumitem
,我可以执行以下操作:
\setlist* { first* = \setlength { \parfillskip } { 0pt plus\dimexpr\linewidth-3em } }
对于类似定理的环境,我应该怎么做才能防止出现如下结果?(请注意最后一行的单个字母。)
背景:我正在使用来定义定理,如果有人知道如何在内amsthm
设置,那将会非常有帮助;或者,也许在每个定理的开头执行一些内部宏,以便可以将设置附加到它。\parfillskip
\newtheoremstyle
答案1
在 中trivlist
,\parfillskip
设置为 ,\@flushglue
其默认值为0pt plus 1fil
。但是,这也用于其他情况,例如raggedleft
,因此更改它并不是最好的主意。
您可以进行修补\@trivlist
,以便设置\parfillskip
与普通段落相同。
\documentclass{article}
\usepackage{amsthm}
\usepackage{etoolbox}
\usepackage{lipsum}
\newtheoremstyle{upbreak}
{}
{}
{\upshape}
{}
{\bfseries}
{.}
{\newline}
{}
\makeatletter
\newskip\nonfill@parfillskip
\AtBeginDocument{%
\setlength{\nonfill@parfillskip}{0pt plus \dimexpr\columnwidth-2\parindent}%
\setlength{\parfillskip}{\nonfill@parfillskip}%
}
\patchcmd{\@trivlist}{\@flushglue}{\nonfill@parfillskip}{}{}
\makeatother
\theoremstyle{upbreak}
\newtheorem{theorem}{Theorem}
\begin{document}
\lipsum[1][1-4] a.
\begin{theorem}
\hspace*{\parindent}\lipsum[1][1-4] a.
\end{theorem}
For demonstration purpose
\bigskip
\setlength{\parfillskip}{0pt plus 1fil}
\lipsum[1][1-4] a.
\end{document}
在定理正文中我添加了\hspace*{\parindent}
以使各段落完全一致。最后我给出了同一段与标准的排版\parfillskip
,以供比较。
请注意,使用不是一个好主意。即使您在代码中使用\linewidth
的值也不是“动态的”,因为时将使用 的当前值。这就是为什么我在文档开始时延迟设置,此时 的值是已知的。\parfillskip
\linewidth
\linewidth
\setlength
\columnwidth
我之前故意没有添加领带a.
,但在你的例子中你肯定应该有
pour tout~$n$.