为每个类似定理的环境设置 \parfillskip

为每个类似定理的环境设置 \parfillskip

为了防止最后一行太短,我添加了\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$.

相关内容