Сделать \section не затронутым \parfillskip

Сделать \section не затронутым \parfillskip

Чтобы избежать вдовьих слов в последней строке абзаца, я корректирую parfillskip:

\parfillskip 0pt plus 0.75\textwidth

Хотя это и дает более красивые абзацы, это также немного растягивает заголовки разделов, как вы можете видеть ниже. Первый заголовок с default 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станет неактуальным.

Определите секционирование любым удобным для вас способом:

  • с мемуарами или комой или другим хорошим документом класса;
  • используя пакет вроде 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}}

Связанный контент