梅威瑟:
\documentclass{scrartcl} %{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tocstyle}
\renewcommand*{\addparttocentry}[2]{%
\addtocentrydefault{part}{}{\protect\parbox{\textwidth}{\protect\centering#2}\vspace{3ex}}
} % center the parts entries in the toc and add a 3ex vspace after
\settocstylefeature[-1]{entryvskip}{5ex} % add a 5ex vspace before parts entries in the toc
\begin{document}
\tableofcontents
\part{part 1}
\section{section 1}
\section{section 2}
\part{part 2}
\section{section 1}
\section{section 2}
\end{document}
答案1
事情可能会变得非常糟糕!
\documentclass{scrartcl} %{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tocstyle}
\renewcommand*{\addparttocentry}[2]{%
\addtocentrydefault{part}{}{\protect\parbox{\dimexpr\textwidth-1.55em\relax}{\protect\centering#2}\vspace{3ex}}
} % center the parts entries in the toc and add a 3ex vspace after
\settocstylefeature[-1]{entryvskip}{5ex} % add a 5ex vspace before parts entries in the toc
\begin{document}
\tableofcontents
\part{part 1}
\section{section 1}
\section{section 2}
\part{part 2}
\section{section 1}
\section{section 2}
\end{document}
\parbox
我只是将的宽度减少了1.55em
。
答案2
您在这里所做的不是将标题居中格式化;您已将标题设置为一个大框,该框强制占据页面的整个宽度,并且标题恰好居中。当然,页码已经无处可放(而且点分隔符也没有被删除,只是没有空间了)。
tocloft
以下是使用而不是tocstyle
来格式化条目的解决方案(改编自tocloft 手册)。这样可以实现更清晰的格式规则,而无需将大框插入流程中。唯一剩下的问题是删除您的示例重复的自动编号。我使用了一个 hack 来解决这个问题,取自这个答案。我怀疑您真正想要做的是重新做您的编号系统,以便乳胶在连接位置为您插入正确的数字,而不是手动编号您的零件,但这应该是另一个问题。
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tocloft}
\makeatletter
\renewcommand{\cftpartfont}{\vskip 5ex\hfill\vspace{3ex}}
\renewcommand{\cftpartpresnum}{\begin{lrbox}{\@tempboxa}}
\renewcommand{\cftpartaftersnum}{\end{lrbox}\hfill}
\makeatother
\begin{document}
\tableofcontents
\part{part 1}
\section{section 1}
\section{section 2}
\part{part 2}
\section{section 1}
\section{section 2}
\end{document}
结果: