如何使目录居中?

如何使目录居中?

我想设计一个与页面中心附近的垂直线对齐的目录。章节和部分标题需要右对齐,数字左对齐,并且在标题和数字之间,我想放置一个分隔元素。这可以通过表格轻松完成:

\begin{tabular}{>{\raggedleft}m{0.4\textwidth}>{\centering}m{0.3cm}>{\raggedright}m{0.4\textwidth}}
First section title & \textbullet & 27 \tabularnewline
\end{tabular}

您可以在这张图上看到上述代码的结果:

但是如何使用 LaTeX\tableofcontents命令创建表格?我需要重新定义哪些命令?经过一番谷歌搜索,我还没有找到任何现成的解决方案。

答案1

对于章节,插入您喜欢的任何符号,而不是\Large\textbullet

\documentclass{book}
\usepackage{xcolor,ragged2e}
\usepackage{array}
\makeatletter
\def\MBox#1#2#3#4{%
  \parbox[t]{0.4\linewidth}{\RaggedLeft#1}%
  \makebox[0.1\linewidth]{\color{red}#2}%
  \makebox[0.4\linewidth][l]{#3}\\[#4]}
\renewcommand*\l@chapter   [2]{\par\MBox{\bfseries\Large#1}{\Large\textbullet}{#2}{5pt}}
\renewcommand*\l@section   [2]{    \MBox{\bfseries\large#1}{\textbullet}{#2}{2pt}}
\renewcommand*\l@subsection[2]{    \MBox{\bfseries      #1}{\textbullet}{#2}{1pt}}
\renewcommand\numberline[1]{}
\makeatother

\begin{document}

\tableofcontents
\chapter{First Chapter}
\section{foo}
\newpage
\section{bar}
\newpage
\subsection{foobar}
foobar
\section{An extraordinary long section title which should have a linebreak
         in the table of contents}
bar

\end{document}

在此处输入图片描述

答案2

  • 重新定义\tableofcontents以产生表格环境

  • 重新定义\l@chapter\l@section以生成表的行。这些宏采用两个参数。使用makeatletter\makeatother

查看文档类的源代码,其中定义了所有提到的宏。源代码位于您的本地驱动器上,使用您的搜索功能或kpsewhich找到它,例如

kpsewhich book.cls

在命令提示符下。在 Linux 上,我经常直接使用它,例如

gedit `kpsewhich book.cls`

实际上,我为此制作了一个 shell 函数,以方便频繁访问源代码。

相关内容