如何使用 tocloft 将目录标题居中?

如何使用 tocloft 将目录标题居中?

使用包格式化目录并将标题“目录”、“图片列表”和“表格列表”居中时,出现了奇怪的行为tocloft。使用文档中建议的代码tocloft,我尝试使用以下方法将“目录”居中:

\renewcommand{\cfttoctitlefont}{\hfill\Large}
\renewcommand{\cftaftertoctitle}{\hfill}

但是,这不是居中,而是右对齐标题,尽管完全相同的代码可以使图表列表和表格标题列表居中。

在我的最小工作示例中,我可以通过用 替换第一个\hfill来使其工作\hfil,但在我的实际文档中,该修复会导致标题位于左侧和中间之间。我试图了解为什么 的工作方式与和\cfttoctitlefont不同,以便我可以在我的实际文档中解决问题。\cftlottitlefont\cftloftitlefont

最小工作示例:

\documentclass{article}
\usepackage{tocloft}
\renewcommand{\cfttoctitlefont}{\hfill\Large}
\renewcommand{\cftaftertoctitle}{\hfill}
\renewcommand{\cftlottitlefont}{\hfill\Large}
\renewcommand{\cftafterlottitle}{\hfill}

\begin{document}
\tableofcontents
\listoftables
\section{Section}
\begin{table}[h]
\centering
\begin{tabular}{ l | c || r }
\hline
1 & 2 & 3 \\ 
\hline
\end{tabular}
\caption[Example table]{This is a table.} 
\end{table}
\end{document}

谢谢你!!

答案1

该包的示例代码中确实有一些tocloft关于如何使字符串“Contents”居中在一行中的位置不太正确。无论如何,您可以通过发出以下命令来实现您的目标

\renewcommand{\contentsname}{\hfill\bfseries\Large Contents\hfill}   
\renewcommand{\cftaftertoctitle}{\hfill}

注意\hfill插入“Contents”。如果您希望将字符串“Contents”设置为正常大小和正常粗细,则可以使用\normalfont\normalsize而不是\bfseries\Large

完整的 MWE,将这些更改也应用于表格列表的标题:

在此处输入图片描述

\documentclass{article}
\usepackage{tocloft}
\renewcommand{\contentsname}{\hfill\bfseries\Large Contents\hfill}   
\renewcommand{\cftaftertoctitle}{\hfill}
\renewcommand{\listtablename}{\hfill\bfseries\Large List of Tables} % no \hfill after "List of Tables"...
%%% using the command "\renewcommand{\cftlottitlefont}{\hfill\bfseries\Large}" works too...
\renewcommand{\cftafterlottitle}{\hfill}

\begin{document}
\tableofcontents
\listoftables
\section{Section}
\begin{table}[h]
\centering
\begin{tabular}{| l | c | r |}
\hline
1 & 2 & 3 \\ 
\hline
\end{tabular}
\caption[Example table]{This is a table.} 
\end{table}
\end{document}

答案2

实际上你的解决方案几乎是正确的。它不起作用的原因是 LaTeX 删除了行末的水平空格。这个答案进一步阐述了这一事实,但为了防止这种情况,您需要在最后一个之后插入一个虚拟文本 - 例如\null{},,,\mbox{}- - :\hfill\hfill

\renewcommand{\cfttoctitlefont}{\hfill\Large}
\renewcommand{\cftaftertoctitle}{\hfill\hfill} %Note the second \hfill, it could have been any dummy text

Mico 的解决方案\contentsname通过以结尾\hfill并同时设置\cftaftertoctitle为 来有效地做到这一点\hfill

或者,你可以使用,\hspace*{\fill}这样你的代码就变成:

\renewcommand{\cfttoctitlefont}{\hspace*{\fill}\Large}
\renewcommand{\cftaftertoctitle}{\hspace*{\fill}}

Mico 的解决方案如下:

\renewcommand{\contentsname}{\hspace*{\fill}\bfseries\Large Contents\hspace*{\fill}}   
%\renewcommand{\cftaftertoctitle}{\hspace*{\fill}} % Alternatively, you can delete the last \hspace*{\fill} from the above line and uncomment this line.

最后一个\contentsname定义适用于tocloft包和原始 LaTeX toc 命令。

答案3

只需使用以下方法即可:

 \renewcommand{\contentsname}{\centering Contents}

相关内容