在这个答案\part
,我设计了一个简单的目录样式。但是,我发现如果 的标题格式被 修改,部分的目录设置将无法正常工作titlesec
。
如果没有\titleformat{\part}
,目录看起来会像这样(这是期望的结果):
然而,有了\titleformat{\part}
,TOC 就变成:
我怎样才能恢复期望的效果?
下面是 MWE。
\documentclass{book}
% \usepackage{titlesec}
% \titleclass{\part}{top} % make part like a chapter
% \titleformat{\part}[display]
% {\filleft}
% {\MakeUppercase{\partname}~\thepart}
% {1em}
% {\MakeUppercase}
\usepackage{etoolbox}
\makeatletter
\patchcmd\@part% change the part style
{\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}}
{\addcontentsline{toc}{part}{\protect\numberline{\texorpdfstring{-~\thepart~-}{\thepart~}}\texorpdfstring{\\\MakeUppercase{#1}}{#1}}}
{}{\FAIL}
\makeatother
\usepackage{titletoc}
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter}
{\thecontentslabel}
{}
{} % without page number
[\addvspace{.5pc}]
\usepackage[hidelinks,linktoc=all]{hyperref}
\begin{document}
\ttfamily
\tableofcontents
\part{First part}
\end{document}
答案1
您需要newparttoc
选项和来更改的渲染\thecontentslabel
。
\documentclass{book}
\usepackage[newparttoc]{titlesec}
\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}[display]
{\filleft}
{\MakeUppercase{\partname}~\thepart}
{1em}
{\MakeUppercase}
\usepackage{titletoc}
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter}
{- \thecontentslabel\ - \\}
{}
{} % without page number
[\addvspace{.5pc}]
\usepackage[hidelinks,linktoc=all]{hyperref}
\begin{document}
\ttfamily
\tableofcontents
\part{First part}
\end{document}
假设你想处理目录中的内容。你可以这样做
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter}
{\formattocpart} % numbered
{} % unnumbered
{} % filler
[\addvspace{.5pc}]
\newcommand\formattocpart[1]{%
\colorbox{red!60!green}{%
\begin{tabular}{@{}c@{}}
- \thecontentslabel\ - \\
#1
\end{tabular}%
}%
}
的第二和第三个强制参数与\titlecontents
的最后一个强制参数类似\titleformat
。