Hacer que \section no se vea afectada por \parfillskip

Hacer que \section no se vea afectada por \parfillskip

Para evitar palabras viudas en la última línea de un párrafo, ajusto parfillskip:

\parfillskip 0pt plus 0.75\textwidth

Si bien esto proporciona párrafos más bonitos, también amplía un poco los títulos de las secciones, como puede ver a continuación. El primer título es el predeterminado parfillskip, el segundo con 0pt plus 0.75\textwidth:

¿Cómo puedo mantener mi parfillskipconfiguración para los párrafos, pero no para los títulos?

Este código muestra el efecto para el texto y los títulos (avance):

\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}

Respuesta1

El título de la sección está compuesto por \@sect, que felizmente encierra la parte relevante en un grupo. Al final agrega \@@par, que es la primitiva \par.

De este modo podemos parchear de forma segura \@sect(para secciones numeradas) y \@ssect(para secciones no numeradas):

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Para la memoirclase basta añadir en el preámbulo:

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

Respuesta3

Dado que los títulos de las secciones no deben tener formato con márgenes derechos en ningún caso (a pesar de que las clases de documentos predeterminadas hacen exactamente eso), debes declarar \raggedrighten la definición de la sección; y una vez que haces eso, \parfillskipes irrelevante.

Defina la sección como desee:

  • con memorias o koma u otra clase de documento agradable;
  • usando un paquete como titlesec o algo así;
  • con sección de las clases de documentos estándar usando\@startsection
  • o, lo más hack, parchear comandos como\@sect

Por ejemplo, la clase básica "artículo" utiliza

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

por lo que la configuración de un documento podría incluir algo \renewcommandde eso \raggedrightinsertado en el argumento de estilo de fuente

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

información relacionada