So verwenden Sie patchcmd, um \clearpage vor \chapter einzufügen und so Seitenumbrüche zu vermeiden

So verwenden Sie patchcmd, um \clearpage vor \chapter einzufügen und so Seitenumbrüche zu vermeiden

Ich möchte, dass mein Dokument keine neuen Seiten beginnt, wenn ein neues Kapitel erscheint. Mein Code lautet wie folgt:

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

Dieser Code startet neue Seiten für das erste und zweite Kapitel, jedoch nicht für das dritte.

Warum funktioniert mein \patchcmd nicht?

Antwort1

Erstens liegt in der Zeile ein Syntaxfehler vor \patchcmd, da ein Klammernpaar fehlt:

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

Dies hat in diesem Fall jedoch keine Konsequenzen, da der Patch fehlschlägt, sodass \begindas als fünftes Argument übernommene Argument aufgrund des Fehlschlags ausgeliefert wird.

Hauptgrund: Das \chapterMakro hat \clearpagein seinem Ersetzungstext kein

\scr@startchapter{chapter}

und es ist \scr@startchapter, dass gepatcht werden muss

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

Überprüfen Sie immer die Bedeutung eines Makros, bevor Sie versuchen, es zu patchen.

Sie möchten wahrscheinlich sowohl \cleardoublepageals auch entfernen \clearpage, also

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

Ich finde es praktisch, etwas wie hinzuzufügen \ddt, das vor einem Fehler mit warnt Undefined control sequence \ddt. Wenn ich sicher bin, dass der Patch erfolgreich ist, entferne ich es.

Antwort2

Mit einer KOMA-Script-Klasse können Sie die Kapitelüberschriften \RedeclareSectionCommandfestlegen style=section. Es ist also nichts zu patchen.

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

Bildbeschreibung hier eingeben

Antwort3

Hier ist eine Lösung. Man muss patchen\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}

verwandte Informationen