ドキュメント内のさまざまな場所で etoolbox グローバル コマンド効果を無効/有効にするにはどうすればよいですか?

ドキュメント内のさまざまな場所で etoolbox グローバル コマンド効果を無効/有効にするにはどうすればよいですか?

どうすればいいのかわからず、etoolbox ドキュメント

問題は簡単に説明できます。etoolbox を使用して、大きなドキュメントの\clearpageany の前にを追加し\section、各セクションが新しいページで始まるようにします。(これは書籍形式のドキュメントですが、以下の MWE は記事です)

小さなセクションがいくつかあるので、次のセクションではこれを行わないように etoolbox に指示し、セクションが終了したら再度開始するように指示します。

これをどうやって行うのですか? これを行うための etoolbox または Latex コマンドは何ですか?

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 ミント。

答え1

スイッチを作成し、スイッチが true か false かに応じてコマンドを実行するという方法もあります\clearpage

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

答え2

1つの可能性は、ローカル(読み取り専用)でコマンドを作成することです。グループで) relaxes \clearpage:

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

この方法では、\clearpageドキュメント内のすべてのセクションにデフォルトで設定されますが、 には\specialsection適用されません。

完全な例:

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

関連情報