我想使用 将页码从目录的右侧移到左侧tocloft
。页码仍应右对齐。
这个问题已经在这里回答对于titletoc
,但我想知道是否有办法使用 实现相同的效果tocloft
。 提到的问题表明没有,但我还是想检查一下。
我先从 MWE 开始:
\documentclass[a4paper]{article}
\usepackage{lipsum}
\RequirePackage[titles]{tocloft}
\makeatletter
\renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
\renewcommand{\cftsecaftersnum}{\end{lrbox}}
\setlength{\cftsecnumwidth}{0pt}
\makeatother
\begin{document}
\tableofcontents
\section{Section 1 title}
\lipsum[1-2]
\section{Section 2 title}
\lipsum[3-4]
\end{document}
结果是:
我正在尝试将页码移到另一侧:
如果您想知道,这就是我实际想要实现的(没有蓝线)。我已经使用 成功完成了其余的格式化tocloft
,这就是为什么我宁愿继续使用该包而不是切换到titletoc
。
答案1
此更新实现了右对齐,如我在附加评论中所述。缺点是,如果不是标准数字表示,它将不起作用\thepage
。此外,在多行章节标题的情况下,页码的位置不太好。
\documentclass[a4paper]{article}
\usepackage{lipsum}
\RequirePackage[titles]{tocloft}
\newcount\cnta
\cftsetpnumwidth{0pt}
\renewcommand\cftsecpagefont {\global\cnta}
\renewcommand\cftsecafterpnum {%
\makebox[0pt][l]%
{\kern-\dimexpr\linewidth+2em\relax\makebox[1em][r]{\the\cnta}}%
}
\begin{document}
\tableofcontents
\section{First section}
\lipsum[1]
\clearpage
\setcounter{page}{13}
\section{Second section}
\lipsum[2]
\clearpage
\setcounter{page}{315}
\section{A very very very very very veryvery very veryvery very veryvery very
veryvery very very long section title}
\end{document}
如果不破解tocloft
内部重新定义,\l@section
我认为没有办法。不过,这是一次尝试。缺陷
- 章节标题不应延伸到多行
- 页码将左对齐,而不是右对齐
\documentclass[a4paper]{article}
\usepackage{lipsum}
\RequirePackage[titles]{tocloft}
\cftsetpnumwidth{0pt}
\renewcommand{\cftpnumalign}{l}
\toks0 \expandafter{\cftsecpagefont}
\edef\cftsecpagefont {\kern-\dimexpr\linewidth+2em\relax\the\toks0 }
\begin{document}
\tableofcontents
\section{First section}
\lipsum[1]
\section{Second section}
\lipsum[2]
\section{A very very very very very veryvery very veryvery very veryvery very
veryvery very very long section title}
\end{document}
带包装埃托克人们可以获得你的全部布局。