我想将 的定义更改\chapter[...]{...}
为\chapter[...]{...}\thispagestyle{empty}
。为此,我使用以下代码:
\documentclass{book}
\let\origchapter\chapter
\renewcommand{\chapter}[2][]{%
\origchapter[#1]{#2}
\thispagestyle{empty}
}
\begin{document}
\tableofcontents
\chapter{Bla Bla}
Some text ...
\newpage
\chapter{Bla Bla}
\end{document}
一切都正常,但是当我\tableofcontents
在 之后\begin{document}
,我会收到以下错误:
! LaTeX Error: Something's wrong--perhaps a missing \item.
我做错了什么?
答案1
对 Werner 的回答进行补充。
未知\chapter
的定义\chapter
可能不包含\thispagestyle{empty}
,因为它隐藏在稍后调用的宏中,或者此操作看起来不同。然后,像 Werner 的答案中那样的修补将失败,因为{plain}
的定义文本中缺少\chapter
。因此,以下示例提供了一个通用解决方案,它\chapter
使用星号形式和可选参数重新定义:
\documentclass{report}
\makeatletter
\newcommand*{\saved@chapter}{}
\let\saved@chapter\chapter
\renewcommand*{\chapter}{%
\begingroup
\toks@{\endgroup\saved@chapter}%
\@ifstar{%
\toks@\expandafter{\the\toks@*}%
\final@chapter
}{\next@chapter}%
}
\newcommand*{\final@chapter}[1]{%
\the\toks@{#1}%
\thispagestyle{empty}%
}
\newcommand*{\next@chapter}{%
\@ifnextchar[{\opt@chapter}{\final@chapter}%
}
\newcommand*{\opt@chapter}{}
\def\opt@chapter[#1]{%
\toks@\expandafter{\the\toks@[{#1}]}%
\final@chapter
}
\makeatother
\begin{document}
\tableofcontents
\chapter*{Chapter with star}
\chapter{Chapter without optional argument}
\chapter[Chapter's optional argument]{Chapter with optional argument}
\end{document}
KOMA-Script
该类KOMA-Script
使用以下定义\chapter
:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{\chapterpagestyle}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter
}
它缺少plain
,因为它被 替换了\chapterpagestyle
。但是,这个宏可以重新定义,不需要重新定义\chapter
:
\renewcommand*{\chapterpagestyle}{empty}
班级memoir
章节memoir
支持特殊的页面样式chapter
:
\newcommand\chapter{%
\ifartopt\par\@nameuse{chapterblock}\else
\clearforchapter
\thispagestyle{chapter}
\global\@topnum\z@
\fi
\m@mindentafterchapter
\@ifstar{\@m@mschapter}{\@m@mchapter}}
可以通过以下方式更改页面样式\aliaspagestyle
:
\aliaspagestyle{chapter}{empty}
完整示例
以下示例涵盖五种情况:
\chapter
不可用。- 班级
memoir
。 KOMA-Script
课程。- 通过 进行修补
etoolbox
(\patchcmd
参见 Werner 的回答)。 - 的通用重新定义
\chapter
。
代码:
\documentclass{scrreprt}
\makeatletter
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapter\endcsname\relax
\wlog{* No \string\chapter.}%
\else
\@ifclassloaded{memoir}{%
% Class memoir
\aliaspagestyle{chapter}{empty}%
\wlog{* Chapter page style redefined via \string\aliaspagestyle.}%
}{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapterpagestyle\endcsname\relax
% Patching with etoolbox
\RequirePackage{etoolbox}[2010/09/12]%
\patchcmd{\chapter}{plain}{empty}{%
\wlog{* Chapter patched by \string\patchcmd.}%
}{%
% Generic case
\newcommand*{\saved@chapter}{}%
\let\saved@chapter\chapter
\renewcommand*{\chapter}{%
\begingroup
\toks@{\endgroup\saved@chapter}%
\@ifstar{%
\toks@\expandafter{\the\toks@*}%
\final@chapter
}{\next@chapter}%
}
\newcommand*{\final@chapter}[1]{%
\the\toks@{#1}%
\thispagestyle{empty}%
}
\newcommand*{\next@chapter}{%
\@ifnextchar[{\opt@chapter}{\final@chapter}%
}
\newcommand*{\opt@chapter}{}%
\def\opt@chapter[#1]{%
\toks@\expandafter{\the\toks@[{#1}]}%
\final@chapter
}%
\wlog{* Chapter redefined.}%
}%
\else
% KOMA-Script classes
\renewcommand*{\chapterpagestyle}{empty}%
\wlog{* Chapter page style set by redefining \string\chapterpagestyle.}%
\fi
}%
\fi
\makeatother
\begin{document}
\tableofcontents
\chapter*{Chapter with star}
\chapter{Chapter without optional argument}
\chapter[Chapter's optional argument]{Chapter with optional argument}
\end{document}
答案2
你使用的参数不是最佳的,因为在没有可选参数的情况下\chapter{<stuff>}
默认为,而不是。最好使用\chapter[<stuff>]{<stuff>}
\chapter[]{<stuff>}
\chapter
etoolbox
:
\documentclass{book}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\patchcmd{\chapter}% <cmd>
{plain}% <search>
{empty}% <replace>
{}{}% <success><failure>
\begin{document}
\tableofcontents
\chapter{Bla Bla}
Some text ...
\newpage
\chapter{Bla Bla}
\end{document}
这将搜索plain
in\chapter
并将其更改为。 inempty
的原始定义\chapter
book.cls
是:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{plain}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}