使用包格式化目录并将标题“目录”、“图片列表”和“表格列表”居中时,出现了奇怪的行为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}