ページの分割を避けるために、patchcmd を使用して \chapter の前に \clearpage を挿入する方法

ページの分割を避けるために、patchcmd を使用して \chapter の前に \clearpage を挿入する方法

新しい章があるときにドキュメントが新しいページを開始しないようにしたいです。コードは次のとおりです。

\documentclass{scrbook}
\usepackage{etoolbox}

\patchcmd{\chapter}{\clearpage}{}{}
\begin{document}

\chapter{Preliminary}
first chapter

\chapter{Discussion}
second chapter

{\let \clearpage \relax\chapter{Advanced}}
final chapter
\end{document}

このコードは、第 1 章と第 2 章では新しいページを開始しますが、第 3 章では開始しません。

\patchcmd が動作しないのはなぜですか?

答え1

\patchcmdまず、中括弧のペアが欠落しているため、行に構文エラーがあります。

\patchcmd{<macro>}{<search>}{<replace>}{<success>}{<failure>}

この場合、パッチが失敗したため、影響はありません。そのため、\begin失敗のために 5 番目の引数が配信されると、それが吸収されました。

主な理由:\chapterマクロの置換テキストに「no」が含まれていない\clearpageため、

\scr@startchapter{chapter}

そして\scr@startchapterそれは修正する必要がある

% scrbook.cls, line 4030:
\newcommand*{\scr@startchapter}[1]{%
  \if@openright\cleardoublepage\else\clearpage\fi
  \scr@ifundefinedorrelax{#1pagestyle}{}{%
    \ifstr{#1pagestyle}{}{}{%
      \thispagestyle{\@nameuse{#1pagestyle}}%
    }%
  }%
  \global\@topnum\z@
  \@afterindentfalse
  \expandafter\SecDef\csname @#1\expandafter\endcsname\csname @s#1\endcsname
}

マクロにパッチを適用する前に、必ずマクロの意味を確認してください。

\cleardoublepageおそらく、との両方を削除したいので\clearpage

\makeatletter
\patchcmd{\scr@startchapter}
  {\if@openright\cleardoublepage\else\clearpage\fi}% search
  {}% replace
  {}{\ddt}
\makeatother

のようなものを追加すると便利だと思います\ddt。これは、 での失敗について警告しますUndefined control sequence \ddt。パッチが成功したことを確認したら、それを削除します。

答え2

KOMA-Script クラスを使用すると、章の見出し\RedeclareSectionCommandを設定できますstyle=section。したがって、パッチを当てる必要はありません。

\documentclass{scrbook}[2015/10/03]

\RedeclareSectionCommand[
  style=section,
  indent=0pt
]{chapter}

\begin{document}
\chapter{Preliminary}
first chapter
\chapter{Discussion}
second chapter
\chapter{Advanced}
final chapter
\end{document}

ここに画像の説明を入力してください

答え3

ここに解決策があります。パッチを当てる必要があります\scr@startchapter

\documentclass{scrbook}
\usepackage{etoolbox}

\makeatletter
\if@openright
\patchcmd{\scr@startchapter}{\cleardoublepage}{}{}{}
\else
\patchcmd{\scr@startchapter}{\clearpage}{}{}{}
\fi
\makeatother
\begin{document}

\chapter{Preliminary}
first chapter

\chapter{Discussion}
second chapter

\end{document}

関連情報