Quero que meu documento não inicie novas páginas quando houver um novo capítulo. Meu código é o seguinte:
\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á novas páginas para o primeiro e segundo capítulos, mas não para o terceiro.
Por que meu \patchcmd não está funcionando?
Responder1
Primeiro, você tem um erro de sintaxe na \patchcmd
linha, porque está faltando um par de chaves:
\patchcmd{<macro>}{<search>}{<replace>}{<success>}{<failure>}
Isso não tem consequências neste caso, porque o patch falha, então \begin
isso foi absorvido quando o quinto argumento foi entregue por causa da falha.
Principal motivo: a \chapter
macro não possui \clearpage
texto substituto, que é
\scr@startchapter{chapter}
e é \scr@startchapter
isso que deve ser corrigido
% 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
}
Sempre verifique o significado de uma macro antes de tentar corrigi-la.
Você provavelmente deseja remover ambos \cleardoublepage
e \clearpage
, então
\makeatletter
\patchcmd{\scr@startchapter}
{\if@openright\cleardoublepage\else\clearpage\fi}% search
{}% replace
{}{\ddt}
\makeatother
Acho conveniente adicionar algo como \ddt
, que alertará sobre falhas com Undefined control sequence \ddt
. Quando tenho certeza de que o patch foi bem-sucedido, eu o removo.
Responder2
Com uma classe KOMA-Script você pode usar \RedeclareSectionCommand
para definir style=section
os títulos dos capítulos. Portanto, não há necessidade de corrigir 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}
Responder3
Aqui está uma solução. É preciso corrigir\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}