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 \begin
das als fünftes Argument übernommene Argument aufgrund des Fehlschlags ausgeliefert wird.
Hauptgrund: Das \chapter
Makro hat \clearpage
in 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 \cleardoublepage
als 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 \RedeclareSectionCommand
festlegen 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}
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}