我有这样的文件:
\documentclass{book}
\renewcommand\thechapter{\Roman{chapter}}
\begin{document}
\chapter{Some title}
\chapter{Some other title}
\chapter{One more title}
\tableofcontents
\end{document}
它生成如下目录:
我需要的是章节号和标题之间没有空格,例如:
托克洛夫特允许使用\cftchapnumwidth
命令,但它是“静态的”,我希望 chapnumwidth 调整到每个数字。
谢谢
答案1
甚至tocloft
仍然使用框内 ToC 条目数的传统设置(宽度为\cftZnumwidth
,其中Z
是节单位)。但是,我们可以修补\l@chapter
以暂时调整\numberline
导致问题的宏。修补由etoolbox
。
下面我已经这样做了,尽管目录的可读性现在完全受到影响:
\documentclass{book}
\usepackage{tocloft,etoolbox}
\makeatletter
\patchcmd{\l@chapter}% <cmd>
{\leavevmode}% <search>
{\leavevmode%
\renewcommand{\numberline}[1]{\hbox{\@cftbsnum ##1\@cftasnum}\@cftasnumb}}% <replace>
{}{}% <success><failure>
\makeatother
\renewcommand\thechapter{\Roman{chapter}}
\begin{document}
\tableofcontents
\chapter{Some title}
\section{A section}
\chapter{Some other title}
\chapter{One more title}
\end{document}
对于章节数字后的固定空格,请调整\cftchappresnum
为类似于~
。
答案2
\documentclass{book}
\def\numberline#1{#1}
\renewcommand\thechapter{\Roman{chapter}}
\begin{document}
\chapter{Some title}
\chapter{Some other title}
\chapter{One more title}
\tableofcontents
\end{document}
如果您有包含默认目录条目的部分,则使用:
\documentclass{book}
\makeatletter
\renewcommand*\l@chapter[2]{%
\addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\p@
\begingroup
\def\numberline##1{##1}
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode \bfseries
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\penalty\@highpenalty
\endgroup}
\makeatother
\renewcommand\thechapter{\Roman{chapter}}
\begin{document}
\chapter{Some title}
\section{foo}
\chapter{Some other title}
\chapter{One more title}
\tableofcontents
\end{document}