我正在使用包提供的 titlecontenstitletoc
来格式化 toc、lot 和 lof 中的条目。对于多行条目,其相应页码的默认位置是在该条目的最后一行之后。有没有办法将该数字放在该条目的第一行之后?
答案1
感谢您的解决方案!我刚刚又找到了一个解决方案并发布在这里。基本思路是以 1*3 表格的形式定义 toc/lof/lot 的条目,标题、标题和页面是该表格的三个元素。以下是定义此类表格的代码。
\titlecontents{figure}[0pt]
{\normalfont\mdseries\singlespace}
{\contentspush{\makebox[7em][l]{FIGURE \thecontentslabel:}}\begin{tabular}[t]{@{}p{11cm}@{}}}
{\hspace{-2em}\begin{tabular}[t]{p{11cm}}}
{\end{tabular}\hfill\contentspage}
答案2
如果为可选参数指定较短的章节标题,则可以避免这种情况\section[..]{...}
,如下所示:
\documentclass{article}
\begin{document}
\tableofcontents
\section{A regular section title}
\section[A short ToC title]%
{This is a section with an extremely long title %
that spans at least two lines in the table of contents}
\section{A regular section title}
\end{document}
然而,如果无法避免,titletoc
包裹提供了一种逐项操作目录条目的方法。可以使用命令来实现\titlecontents
。首先,您可以使用它来设置所有部分的默认格式。然后,在您想要以不同方式格式化的部分之前,您可以进行修改\titlecontents
,然后再切换回来。以下最小工作示例说明了这一点:
\documentclass{article}
\usepackage{titletoc}% http://ctan.org/pkg/titletoc
\begin{document}
% -------------- DEFAULT section formatting
\titlecontents{section}%
[3.8em]% Left indent
{\bfseries}% % above-code
{\contentslabel{2.3em}}% Numbered format
{\hspace*{-2.3em}}% Numberless format
{\hfill\contentspage}% Filler page format
[]% Separator
\tableofcontents
\section{A regular section title}
% -------------- MODIFIED section formatting
\titlecontents{section}%
[3.8em]% Left indent
{\bfseries}% % above-code
{\contentslabel{2.3em}}% Numbered format
{\hspace*{-2.3em}}% Numberless format
{\hfill\smash{\raisebox{\baselineskip}{\contentspage}}}% Filler page format
[]% Separator
\section{This is a section with an extremely long title %
that spans at least two lines in the table of contents}
% -------------- REVERTED section formatting
\titlecontents{section}%
[3.8em]% Left indent
{\bfseries}% % above-code
{\contentslabel{2.3em}}% Numbered format
{\hspace*{-2.3em}}% Numberless format
{\hfill\contentspage}% Filler page format
[]% Separator
\section{A regular section title}
\end{document}
修改后的目录部分格式将\contentspage
(部分所在页面的占位符)提升\baselineskip
,将其向上推至与第一行相同的水平。如果您的部分标题中有 3 行,则将其向上推2\baselineskip
,依此类推。\smash
确保凸起的方框不会影响行间跳过。