
\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
вставьте \cleardoublepage
s вручную.
Это не совсем ответ на вопрос, тем не менее, я решил воспользоваться этим методом.