¿Cómo deshabilitar/habilitar el efecto del comando global de etoolbox en diferentes ubicaciones de un documento?

¿Cómo deshabilitar/habilitar el efecto del comando global de etoolbox en diferentes ubicaciones de un documento?

No puedo entender cómo hacer esto, y miré eldocumentación de la caja de herramientas electrónica

El problema es simple de explicar: uso etoolbox para agregar un \clearpageantes de cualquiera \sectionen un documento grande para que cada sección comience en una nueva página. (Es un documento estilo libro, pero el MWE a continuación es un artículo)

Hay algunas secciones que son pequeñas y quiero decirle a etoolbox que no haga esto para la siguiente sección y luego decirle que comience de nuevo una vez finalizada la sección.

¿Como hacer esto? ¿Cuál es el comando etoolbox o Latex para esto?

Aquí hay un MWE

\documentclass[12pt]{article}%        
\usepackage{etoolbox}\preto\section{\clearpage}
\usepackage{lipsum}
\begin{document}
\section{A}
\lipsum[75]

\section{B}
\lipsum[75]

%do not add \clearpage here, how? 
\section{C}
\lipsum[75]

%now start adding \clearpage, it is ok
\section{D}
\lipsum[75]
\end{document}

Texlive 2013, Linux perfecto.

Respuesta1

Una posibilidad es crear un interruptor y, dependiendo de si el interruptor es verdadero o falso, ejecutar el \clearpagecomando.

\documentclass[12pt]{article}%        
\usepackage{etoolbox}
\usepackage{lipsum}

\newtoggle{clearpagebeforesection}

\preto{\section}{\iftoggle{clearpagebeforesection}{\clearpage}{}}

\begin{document}
\toggletrue{clearpagebeforesection}
\section{A}
\lipsum[75]

\section{B}
\lipsum[75]

%do not add \clearpage here, how? 
\togglefalse{clearpagebeforesection}
\section{C}
\lipsum[75]

%now start adding \clearpage, it is ok
\toggletrue{clearpagebeforesection}
\section{D}
\lipsum[75]

\section{E}
\lipsum[75]
\end{document}

Respuesta2

Una posibilidad es crear un comando que localmente (leeren grupo) relaxes \clearpage:

% locally disable clearpage
\newcommand{\specialsection}[1]{
\begingroup
\let\clearpage\relax
\section{#1}
\endgroup
}

De esta manera, \clearpageestá configurado por defecto para todas las secciones del documento, pero para las \specialsections no aplica.

El ejemplo completo:

\documentclass[12pt]{article}%
\usepackage{etoolbox}

\preto\section{\clearpage}

% locally disable clearpage
\newcommand{\specialsection}[1]{
\begingroup
\let\clearpage\relax
\section{#1}
\endgroup
}

\usepackage{lipsum}
\begin{document}
\section{A}
\lipsum[75]

\section{B}
\lipsum[75]

% we use the new command
\specialsection{C}
\lipsum[75]

\section{D}
\lipsum[75]
\end{document}

información relacionada