Я хочу, чтобы мой документ не начинал новые страницы, когда есть новая глава. Мой код следующий:
\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}
Этот код создаст новые страницы для первой и второй глав, но не для третьей.
Почему мой \patchcmd не работает?
решение1
Во-первых, в строке есть синтаксическая ошибка \patchcmd
, поскольку пропущена пара фигурных скобок:
\patchcmd{<macro>}{<search>}{<replace>}{<success>}{<failure>}
В данном случае это не имеет никаких последствий, поскольку патч не выполняется, поэтому \begin
он был поглощен, поскольку пятый аргумент был доставлен из-за сбоя.
Основная причина: \chapter
макрос не имеет \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}