使用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}