Переопределите \chapter и \chapter* с помощью \cleardoublepage внутри .cls-файла

Переопределите \chapter и \chapter* с помощью \cleardoublepage внутри .cls-файла
\newcommand{\Chapter}[1]{{\let\cleardoublepage\relax\chapter{#1}}}

отлично работает. Как сделать то же самое для отмеченной звездочкой (*) версии внутри .cls-файла?

(Может быть интересно другим: есть ли разница с определением в основном документе?)

решение1

Вы указали, что хотите переопределить \chapterи \chapter*. Для этого я предлагаю взглянуть на более глубокий уровень в вашем классе, и это задача не для новичков.

В любом случае вы можете создать макрос, который включает в себя помеченную версию и использует команду, \chapterнаписанную в вашем классе.

Самый простой способ выглядит следующим образом:

\documentclass{scrbook}

\newcommand{\MyChapter}{%
    \let\cleardoublepage\empty
    \clearpage
    \chapter
}

\begin{document}

\tableofcontents

\MyChapter{Introduction}
some text

\MyChapter[My Introduction]{Introduction}
some text

\MyChapter*{Introduction}
some text

\end{document}

Команда \MyChapterстирает \cleardoublepage, она выполняется \clearpageи \chapter. Она будет иметь все \chapterвозможности вашего старого , потому что \chapterвыполняется последней и принимает в качестве аргументов все, что вы указали после \MyChapter.

Однако последнееНЕ является хорошей практикой, поскольку команда \cleardoublepageстановится бесполезной, а удаление команд Latex часто может привести к плохому функционированию.

На мой взгляд, «приличной» практикой было бы сохранение \cleardoublepageи восстановление позже:

\documentclass{scrbook}

\newcommand{\ResCdp}{%
    \let\cleardoublepage\cdp
}

\newcommand{\MyChapter}{%
    \let\cdp\cleardoublepage
    \let\cleardoublepage\empty
    \clearpage
    \chapter
}

\begin{document}

\tableofcontents

\MyChapter{Introduction}\ResCdp
some text

\MyChapter[My Introduction]{Introduction}\ResCdp
some text

\cleardoublepage

\MyChapter*{Introduction}\ResCdp
some text

\end{document}

что довольно сложно для чтения/записи, но делает свое дело безопасно.

Чтобы избежать использования этого \ResCdpбез удаления \cleardoublepageи сохранения всех \chapterфункций, потребовалось бы гораздо больше усилий.

решение2

Вы указали, что используете scrbookкласс документа. Если вы хотите переопределить \chapter\chapter*) для выполнения \clearpageвместо \cleardoublepage, я предлагаю вам загрузить etoolboxпакет и использовать его \patchcmdмакрос для изменения chapterмакроса:

\usepackage{etoolbox}
\patchcmd{\chapter}{\cleardoublepage}{\clearpage}{}{}

решение3

В случае scrbookиспользования опции openanyвставьте \cleardoublepages вручную.

Это не совсем ответ на вопрос, тем не менее, я решил воспользоваться этим методом.

Связанный контент