使用 tocloft 将目录中的页码移到标题左侧

使用 tocloft 将目录中的页码移到标题左侧

我想使用 将页码从目录的右侧移到左侧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我认为没有办法。不过,这是一次尝试。缺陷

  1. 章节标题不应延伸到多行
  2. 页码将左对齐,而不是右对齐

左侧页面

\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}

带包装埃托克人们可以获得你的全部布局。

相关内容