我正在使用 memoir 处理大型文档,并希望将与部分相对应的目录条目居中(页面条目已关闭)。我阅读了手册(特别是第 161-166 页),虽然我可以单独调整零件编号或标题的位置,但我无法弄清楚如何将零件编号和标题作为一个整体居中。演示此操作的 MWE 如下:
\documentclass{memoir}
\cftpagenumbersoff{part}
\begin{document}
\tableofcontents*
\part{Part A}
\chapter{Chapter a}
\end{document}
更具体地说,我希望“I Part A”水平居中。如果有第二部分称为“B”,我希望它居中,如“II Part B”。
答案1
嗯,可以用更短的代码来完成:
\makeatletter
\renewcommand\partnumberline[1]{\hfil\hspace\@tocrmarg #1~}
\makeatother
(虽然不完全确定为什么,但已经很晚了......)
答案2
您可以\@part
按照 中的定义重新定义该命令memoir.cls
;该命令负责生成目录中的部分条目;重新定义基本上包括引入两个\hfil
s 来使条目居中:
\documentclass{memoir}
\cftpagenumbersoff{part}
\makeatletter
\long\def\@part[#1]#2{%
\M@gettitle{#1}%
\phantomsection
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\hfil\thepart~#1\hfil}%
\mempartinfo{\thepart}{#1}{#2}%
\else
\addcontentsline{toc}{part}{\hfil#1\hfil}%
\mempartinfo{}{#1}{#2}%
\fi
\partmark{#1}%
{\centering
\interlinepenalty \@M
\parskip\z@
\normalfont
\ifnum \c@secnumdepth >-2\relax
\printpartname \partnamenum \printpartnum
\midpartskip
\fi
\printparttitle{#2}\par}%
\@endpart}
\makeatother
\begin{document}
\tableofcontents*
\part{Part A}
\chapter{Chapter a}
\part{Part B}
\chapter{Chapter b}
\end{document}
上述代码将根据文本宽度减去为其他部分单元排版页码所保留的长度\@tocrmarg
(默认值为)将条目居中,并使用一些额外空间;您可以更改这一点,并通过在我上面的示例代码中的第一个 s 之前2.55em
添加,将条目根据整个文本宽度居中。\hspace*{\@tocrmarg}
\hfil
答案3
使用memoir
内部宏,我使用序言中的以下代码将目录各部分置于中心位置:
\renewcommand*{\cftpartfont}{\hspace{\@pnumwidth}\hfil}
\renewcommand*{\cftpartpresnum}{\hspace{\@pnumwidth}}
\renewcommand*{\cftpartafterpnum}{\hfil}
它使用\cftpartfont
和 \cftpartafterpnum
作为钩子并纠正\@pnumwidth
(为页码保留的宽度)移位。
我还使用它来删除部分的页码:
\cftpagenumbersoff{part}