Quiero que mi documento no comience nuevas páginas cuando haya un nuevo capítulo. Mi código es el siguiente:
\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}
Este código iniciará nuevas páginas para el primer y segundo capítulo, pero no para el tercero.
¿Por qué mi \patchcmd no funciona?
Respuesta1
Primero, tienes un error de sintaxis en la \patchcmd
línea porque te falta un par de llaves:
\patchcmd{<macro>}{<search>}{<replace>}{<success>}{<failure>}
Esto no tiene consecuencias en este caso, porque el parche falla, por lo \begin
que se absorbió como el quinto argumento que se entrega debido a la falla.
Razón principal: la \chapter
macro no tiene \clearpage
ningún texto de reemplazo, lo cual es
\scr@startchapter{chapter}
y es \scr@startchapter
que hay que parchearlo
% 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
}
Siempre verifique el significado de una macro antes de intentar parchearla.
Probablemente quieras eliminar ambos \cleardoublepage
y \clearpage
, entonces
\makeatletter
\patchcmd{\scr@startchapter}
{\if@openright\cleardoublepage\else\clearpage\fi}% search
{}% replace
{}{\ddt}
\makeatother
Me parece conveniente agregar algo como \ddt
, que advertirá sobre fallas con Undefined control sequence \ddt
. Cuando estoy seguro de que el parche funciona correctamente, lo elimino.
Respuesta2
Con una clase KOMA-Script puede utilizarla \RedeclareSectionCommand
para configurar style=section
los títulos de los capítulos. Por lo que no es necesario parchear nada.
\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}
Respuesta3
Aquí hay una solución. Uno necesita parchear\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}