使用 amsbook 类调整目录格式

使用 amsbook 类调整目录格式

我对目录中项目的默认格式非常满意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.2pc1.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}

在此处输入图片描述

相关内容