Чтобы избежать вдовьих слов в последней строке абзаца, я корректирую 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}}