答案1
通常,\tableofcontents
使用\chapter*
中的标题book
,即标题格式化程序宏\@makeschapterhead
必须稍加修改,并注入\mytextbeforetocheading
要执行的“任意”命令。
为了将修改限制在此toc
范围内(并且不影响任何进一步的修改\chapter*
),所有修改都必须以组为单位进行。
\documentclass[12pt]{book}
\usepackage{xpatch}
\newcommand{\mytextbeforetocheading}{%
\begingroup
\centering%
\Huge \bfseries Some Text
\endgroup
\vskip3\baselineskip%
}
\makeatletter
\xpatchcmd{\tableofcontents}{%
\chapter%
}{%
\begingroup
\def\@makeschapterhead##1{%
\vspace*{50\p@}%
\mytextbeforetocheading%
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\Huge \bfseries ##1\par\nobreak
\vskip 40\p@
}}
\chapter%
}{\typeout{success}}{\typeout{failure}}
\xapptocmd{\tableofcontents}{\endgroup}{}{} % Close the group
\makeatother
\title{hello}
\begin{document}
\tableofcontents
\chapter{one}
\chapter{two}
\end{document}
答案2
我们可以利用这个事实,它\tableofcontents
基本上是这样做的\chapter*{\contentsname}
,并且\chapter
从发布开始\cleardoublepage
(除非我们在双列文档中)。因此,我们确保在奇数页上,打开一个组并重新定义\clearpage
(这被称为\cleardoublepage
简单地结束我们打开的组)。
\documentclass[12pt]{book}
\begin{document}
% ensure we're on an odd page
\cleardoublepage
% open a group for doing local redefinitions
\begingroup
% a \clearpage will close the group and restore the meaning
\let\clearpage\endgroup
% here you type the text you want
\begin{center}
Some text before the table of contents
\end{center}
% Now issue \tableofcontents
\tableofcontents
\chapter{one}
\chapter{two}
\end{document}