titlesec 干扰目录中的部分标题

titlesec 干扰目录中的部分标题

这个答案\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

在此处输入图片描述

相关内容