使 \section 不受 \parfillskip 影响

使 \section 不受 \parfillskip 影响

为了避免段落最后一行出现寡妇词,我进行了调整parfillskip

\parfillskip 0pt plus 0.75\textwidth

虽然这会让段落看起来更美观,但也会稍微拉长章节标题,如下所示。第一个标题使用默认的parfillskip,第二个使用0pt plus 0.75\textwidth

我怎样才能保留parfillskip段落的设置但不保留标题的设置?

此代码展示了文本和标题的效果(预览):

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\section{This is a section title}
\lipsum[1]
\section{This is a section title}

% Fill the last line of paragraphs for minimum 25%
\parfillskip 0pt plus 0.75\textwidth
\section{This is a section title}
\lipsum[1]
\end{document}

答案1

章节标题由 排版\@sect,恰好将相关部分括在一个组中。最后添加了\@@par,这是原始的\par

因此,我们可以安全地修补\@sect(针对编号部分)和\@ssect(针对未编号部分):

\documentclass{article}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@sect}{\begingroup}{\begingroup\parfillskip=0pt plus 1fil\relax}{}{}
\patchcmd{\@ssect}{\begingroup}{\begingroup\parfillskip=0pt plus 1fil\relax}{}{}
\makeatother

\usepackage{lipsum}
\begin{document}
\section{This is a section title}
\lipsum[1]

% Fill the last line of paragraphs for minimum 25%
\parfillskip 0pt plus 0.75\textwidth
\section{This is a section title}
\lipsum[1]
\end{document}

在此处输入图片描述

答案2

对于该类memoir,只需在序言中添加以下内容:

\setsecheadstyle{\Large\parfillskip=0pt plus 1fil}

答案3

由于在任何情况下,节标题都不应采用右对齐边距的格式 - 尽管默认文档类正是这样做的 - 因此您应该\raggedright在节的定义中声明;一旦您这样做,就\parfillskip无关紧要了。

按照您的需要定义分段:

  • 与回忆录或koma或其他精美文件类;
  • 使用像 titlesec 或类似的包;
  • 使用标准文档类进行分段\@startsection
  • 或者,最黑客的补丁命令如下\@sect

例如,基本的“文章”类使用

\newcommand\section{\@startsection {section}{1}{\z@}%
                               {-3.5ex \@plus -1ex \@minus -.2ex}%
                               {2.3ex \@plus.2ex}%
                               {\normalfont\Large\bfseries}}

因此文档设置可以包括在字体样式参数中插入\renewcommand\raggedright

\makeatletter
\renewcommand\section{\@startsection {section}{1}{\z@}%
                               {-3.5ex \@plus -1ex \@minus -.2ex}%
                               {2.3ex \@plus.2ex}%
                               {\normalfont\raggedright\Large\bfseries}}

相关内容