目录中的页码通常位于标题的右侧很远的地方。由于我们很少从上到下查看目录,而经常从左到右查看,因此将页码放在标题旁边可能会更好。在 amsart 类中实现此目的的简单方法是什么?
\documentclass{amsart}
\usepackage{blindtext}
\usepackage{enumitem}
\title{}
\begin{document}
\maketitle
\tableofcontents
\begin{center}
\textsc{Contents} \\[6pt]
\begin{minipage}{7cm}
\begin{enumerate}[label=\arabic*.]
\item My childhood theorems, 1
\item Theorems from my adolescence, 2
\item Undergraduate theorems, 3
\item Graduate theorems and my thesis, 4
\end{enumerate}
\end{minipage}
\end{center}
\section{My childhood theorems} \blindtext[5]
\section{Theorems from my adolescence} \blindtext[5]
\section{Undergraduate theorems} \blindtext[5]
\section{Graduate theorems and my thesis} \blindtext[5]
\end{document}
我尝试了以下操作:
\begin{center}
\begin{minipage}{8cm}
\begingroup
\def\hfil{,\relax}
\tableofcontents
\endgroup
\end{minipage}
\end{center}
而不是 \tableofcontents。这是不是个坏主意?
答案1
这主意不错。Bringhurst 说我们不必把页码加起来,那么为什么它们要放在远离标题的栏中呢?
您可以修改 ; 的工作方式\@tocline
,以使目录居中,假设它适合一页,您可以使用varwidth
。
\documentclass{amsart}
\usepackage{varwidth}
\usepackage{blindtext}
\makeatletter
\def\@tocline#1#2#3#4#5#6#7{\relax
\ifnum #1>\c@tocdepth % then omit
\else
\par \addpenalty\@secpenalty\addvspace{#2}%
\begingroup \hyphenpenalty\@M
\@ifempty{#4}{%
\@tempdima\csname r@tocindent\number#1\endcsname\relax
}{%
\@tempdima#4\relax
}%
\parindent\z@ \leftskip#3\relax \advance\leftskip\@tempdima\relax
% \rightskip\@pnumwidth plus4em \parfillskip-\@pnumwidth
#5\leavevmode\hskip-\@tempdima #6\nobreak\relax
,~#7\par
% \hfil\hbox to\@pnumwidth{\@tocpagenum{#7}}\par
% \nobreak
\endgroup
\fi}
\makeatother
\begin{document}
\title{Whatever}
\maketitle
\begin{center}
\begin{varwidth}{\textwidth}
\tableofcontents
\end{varwidth}
\end{center}
\section{My childhood theorems}
\subsection{Whatever}
\blindtext[5]
\section{Theorems from my adolescence} \blindtext[5]
\section{Undergraduate theorems} \blindtext[5]
\section{Graduate theorems and my thesis} \blindtext[5]
\end{document}
我添加了一个小节只是为了展示它的输出。