我对目录中项目的默认格式非常满意amsbook class
,除了一个小问题:
如果有超过 10 个部分,那么多余的数字会将两位数部分的部分名称进一步推到右侧,从而无法与其他部分整齐对齐。
如何才能摆脱这种影响,而不使用\parindent
我必须设置为 0 ?这是强制性的 MWE
\documentclass{amsbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\setlength\parindent{0cm}
\setcounter{tocdepth}{2}
\begin{document}
\tableofcontents
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{NOT Ok}
Not OK
\end{document}
答案1
您可以将数字装箱,以便它们占据固定的空间。
\documentclass{amsbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{calc}
\makeatletter
\renewcommand{\tocsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 \makebox[\widthof{00.}][l]{#2.}\quad}}#3}
\renewcommand{\tocsubsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 \makebox[\widthof{00.0.}][l]{#2.}\quad}}#3}
\makeatother
\setcounter{tocdepth}{2}
\begin{document}
\tableofcontents
\chapter{Title}
\section*{Whatever}
\section{Ok}
\subsection{Again}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{NOT Ok}
\subsection{Again}
Not OK
\end{document}
这里有一个在句号处进行对齐的技巧:
\documentclass{amsbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\makeatletter
\renewcommand{\tocsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 \makebox[1em][r]{#2}.\quad}}#3}
\renewcommand{\tocsubsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 \indent@subsec@num#2.\quad}}#3}
\def\indent@subsec@num#1{%
\ifx#1\@secnumber
\@secnumber
\else
\expandafter\indent@subsec@num@aux\expandafter#1%
\fi
}
\def\indent@subsec@num@aux#1.#2.{\makebox[1em][r]{#1}.#2.}
\makeatother
\setcounter{tocdepth}{2}
\begin{document}
\tableofcontents
\chapter{Title}
\section*{Whatever}
\section{Ok}
\subsection{Again}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{Ok}
OK
\section{NOT Ok}
\subsection{Again}
Not OK
\end{document}
答案2
ToC 的类别设置amsbook
无法更改tocloft
(至少到目前为止我还没有找到方法)。
这些设置有点奇怪。最简单的方法是更改节号的对齐方式,并在命令中使用进一步的缩进\l@section
,将第三个参数从 更改为1.2pc
,1.5pc
但这当然可以根据个人喜好进行调整 ;-)
该\tocsection
命令由类代码隐式写入ToC
,但在我看来,更改必须在此命令中完成
\documentclass{amsbook}
\usepackage{pgffor}
\makeatletter
\renewcommand{\tocsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 \llap{#2.}\quad}}#3
}
\def\l@section{\@tocline{1}{0pt}{1.5pc}{}{}}
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\foreach \x in {1,...,20} {%
\section{Section \x}
}
\end{document}