페이지 중단을 방지하기 위해 patchcmd를 사용하여 \chapter 앞에 \clearpage를 삽입하는 방법

페이지 중단을 방지하기 위해 patchcmd를 사용하여 \chapter 앞에 \clearpage를 삽입하는 방법

새 장이 있을 때 내 문서에서 새 페이지가 시작되지 않도록 하고 싶습니다. 내 코드는 다음과 같습니다

\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실패로 인해 다섯 번째 인수가 전달될 때 흡수되었습니다.

주된 이유: 매크로의 대체 텍스트에 \chapterno가 있습니다 .\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}

관련 정보