如何使用 tocloft 包将页码左对齐

如何使用 tocloft 包将页码左对齐

使用tocloft包裹我希望Roman目录中的 ( ) 页码左对齐(在 MWE 第 1-3 章中)而不是右对齐(在 MWE 第 4-5 章中)。(然后右对齐页码arabic。)有没有比重新定义更简单的方法\cftchapfillnum

该示例仅涉及章节,但在非最小文档中,我还为part和重新定义了它section(如果有人使用subsection,...,也必须进行这些重新定义。)

\documentclass{report}
\usepackage{letltxmacro}

\usepackage{tocloft}

\makeatletter
\renewcommand{\cftchapdotsep}{\cftdotsep}
\renewcommand{\@pnumwidth}{6em}
\renewcommand{\@tocrmarg}{8.55em}

\LetLtxMacro{\origcftchapfillnum}{\cftchapfillnum}
\renewcommand{\cftchapfillnum}[1]{%
{\cftchapleader}\nobreak
\hb@xt@\@pnumwidth{\cftchappagefont #1\hfil}\cftchapafterpnum\par}

\makeatother

\begin{document}
\pagenumbering{Roman}

\tableofcontents
\newpage
\addcontentsline{toc}{chapter}{one}
1
\newpage
\addtocounter{page}{25}
\addcontentsline{toc}{chapter}{two}
2
\newpage
\addtocounter{page}{9}
\addcontentsline{toc}{chapter}{three}
3

\addtocontents{toc}{\string\LetLtxMacro{\string\cftchapfillnum}{\string\origcftchapfillnum}}

\newpage
\addtocounter{page}{9}
\addcontentsline{toc}{chapter}{four}
4

\newpage
\addtocounter{page}{1}
\addcontentsline{toc}{chapter}{five}
5


\end{document}

MWE 确实有效(尽管名字叫 MWE,但通常并不起作用),但问题是是否存在一些我尚未找到的更简单的解决方案?

答案1

您的版本对我来说看起来不错,但是如果我自己需要的话,我可能会使用的另一种方法是放弃依赖letltxmacro并根据页码自动进行对齐,而不需要将重新定义放入 toc 文件中。

这将查看扩展数字的第一个字符,如果它是数字(与 catcode 相同),则将其推入右侧,否则将其推入左侧。我更改了 MWE,将最后两个字符改为阿拉伯数字,以显示开关。

在此处输入图片描述

\documentclass{report}

\usepackage{tocloft}

\makeatletter
\renewcommand{\cftchapdotsep}{\cftdotsep}
\renewcommand{\@pnumwidth}{6em}
\renewcommand{\@tocrmarg}{8.55em}


\renewcommand{\cftchapfillnum}[1]{%
{\cftchapleader}\nobreak
\hb@xt@\@pnumwidth{\cftchappagefont \leftorright#1\hfil}\cftchapafterpnum\par}

\def\leftorright#1{\ifcat 0#1\hfill\fi#1}

\makeatother

\begin{document}
\pagenumbering{Roman}

\tableofcontents
\newpage
\addcontentsline{toc}{chapter}{one}
1
\newpage
\addtocounter{page}{25}
\addcontentsline{toc}{chapter}{two}
2
\newpage
\addtocounter{page}{9}
\addcontentsline{toc}{chapter}{three}
3

\newpage
\pagenumbering{arabic}


\addtocounter{page}{9}
\addcontentsline{toc}{chapter}{four}
4

\newpage
\addtocounter{page}{1}
\addcontentsline{toc}{chapter}{five}
5


\end{document}

相关内容