titlesec 和 appendix 的问题

titlesec 和 appendix 的问题

我正在使用titlesecusepackage 下的包和代码使各部分与章节显示在同一页上,而不是单独显示。抱歉,我不记得我从哪里得到的代码,但它确实满足了我的要求。问题是它还对附录在目录中的显示方式产生了影响。我希望目录中有“附录 A”,但使用代码会使titlesec附录在目录中显示而不显示“附录”。我测试过,我确信这是原因。请提出一些修改建议,以便附录在目录中显示为“附录 A”,并且各部分与章节保持在同一页上。这是我的文档的一些大纲代码。

\documentclass[titlepage, oneside, 12pt]{report}

\usepackage[titletoc]{appendix}

\usepackage[nottoc, notlof, notlot]{tocbibind}

\renewcommand*\listfigurename{}
\renewcommand*\listtablename{}

\usepackage{titlesec}
\titleclass{\part}{top}
\titleformat{\part}[display]
  {\normalfont\huge\bfseries}{\centering\partname\ \thepart}{20pt}{\Huge\centering}
\titlespacing*{\part}{0pt}{50pt}{40pt}
\titleclass{\chapter}{straight}
\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titlespacing*{\chapter} {0pt}{50pt}{40pt}


\begin{document}

\begingroup
\setcounter{tocdepth}{2}
\tableofcontents{}
\endgroup

\part{part 1}
\chapter{chapter one}

\part{part 2}
\chapter{chapter two}


\clearpage
\begin{appendices}
\chapter{List of figures}
\listoffigures
\clearpage
\chapter{List of tables}
\listoftables
\end{appendices}

\end{document}

以下是 \usepackage{titlesec} 和 \begin{document} 之间的代码保持不变时 toc 中附录发生的情况:

以下是 \usepackage{titlesec} 和 \begin{document} 之间的代码保持不变时 toc 中附录发生的情况:

删除该代码后,目录中的附录如下所示。这是我希望它们显示的方式

当我删除该代码后,目录中的附录如下所示

我希望有人能修改此代码,以便各部分仍能保留在单独的页面中,并使附录正确显示在目录中。谢谢。

答案1

问题在于appendix包(重新定义了\addcontentsline)和的组合titlesec,因此您需要稍微修改代码以使其能够识别\titlesec。以下是解决问题的方法:

重新定义在这里。将其添加到您的titlesec定义之后的序言中。

\makeatletter
\renewcommand{\@redotocentry@pp}[1]{%
  \let\oldacl@pp=\addcontentsline
  \def\addcontentsline##1##2##3{%
    \def\@pptempa{##1}\def\@pptempb{toc}%
    \ifx\@pptempa\@pptempb
      \def\@pptempa{##2}\def\@pptempb{#1}%
      \ifx\@pptempa\@pptempb
        \oldacl@pp{##1}{##2}{\appendixname\space ##3}%
      \else
        \oldacl@pp{##1}{##2}{\chaptertitlename\space ##3}% added \chaptertitlename
      \fi
    \else
      \oldacl@pp{##1}{##2}{##3}%
    \fi}
}
\makeatother

以下是完整文档:

\documentclass[titlepage, oneside, 12pt]{report}

\usepackage[titletoc]{appendix}

\usepackage[nottoc, notlof, notlot]{tocbibind}

\renewcommand*\listfigurename{}
\renewcommand*\listtablename{}

\usepackage{titlesec}
\titleclass{\part}{top}
\titleformat{\part}[display]
  {\normalfont\huge\bfseries}{\centering\partname\ \thepart}{20pt}{\Huge\centering}
\titlespacing*{\part}{0pt}{50pt}{40pt}
\titleclass{\chapter}{straight}
\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titlespacing*{\chapter} {0pt}{50pt}{40pt}

\makeatletter
\renewcommand{\@redotocentry@pp}[1]{%
  \let\oldacl@pp=\addcontentsline
  \def\addcontentsline##1##2##3{%
    \def\@pptempa{##1}\def\@pptempb{toc}%
    \ifx\@pptempa\@pptempb
      \def\@pptempa{##2}\def\@pptempb{#1}%
      \ifx\@pptempa\@pptempb
        \oldacl@pp{##1}{##2}{\appendixname\space ##3}%
      \else
        \oldacl@pp{##1}{##2}{\chaptertitlename\space ##3}% added \chaptertitlename
      \fi
    \else
      \oldacl@pp{##1}{##2}{##3}%
    \fi}
}
\makeatother

\begin{document}

\begingroup
\setcounter{tocdepth}{2}
\tableofcontents{}
\endgroup

\part{part 1}
\chapter{chapter one}

\part{part 2}
\chapter{chapter two}


\clearpage

\begin{appendices}
\chapter{List of figures}

\listoffigures
\clearpage
\chapter{List of tables}
\listoftables
\end{appendices}
\end{document}

TOC 输出

相关内容