在主目录中显示章节,但在部分目录中不显示章节

在主目录中显示章节,但在部分目录中不显示章节

是否可以不显示第二部分的最后一章?

\documentclass[a4paper,oneside]{scrbook}
\usepackage{minitoc}
\setcounter{tocdepth}{0} 

\begin{document}
\doparttoc
\tableofcontents

\part{Part 1}
\parttoc
\chapter{Chapter 1}
\chapter{Chapter 2}

\part{Part 2}
\parttoc
\chapter{Chapter 3}
\chapter{Chapter 4}

\end{document}

答案1

如果你不介意改变minitoc一点内部结构,你可以这样做。我不确定这个答案是否特别好,因为

  • 文档minitoc提到,该软件包至少经过了一次实质性的修改,因此有很多理由怀疑该解决方案是否适用于旧版本的软件包。(当然,如果未来版本改变了命令minitoc\PTC@test使用方式,那么它可能也不会适用于旧版本。)
  • \skipcontents我即将定义的和命令\readcontents并不像我认为的那样直观。(例如,这个答案末尾的警告)

因此,更好的想法可能是切换并使用etoc。但是,如果你真的下定决心minitoc,这里有一个答案。

由于 minitoc 会读取.toc文件并挑选出相关命令,例如,\contentsline并将它们放入它们自己的部分 toc (.ptc) 文件中。您可以通过重新定义命令来获得所需的内容\PTC@test,minitoc 会使用该命令来测试相关性,以便它还会测试您是否已告诉它忽略\contentslines。然后,您可以向.toc文件添加不执行任何操作的命令,但这些命令minitoc会识别为打开或关闭相关性\contentsline

  \documentclass[a4paper,oneside]{scrbook}
    \usepackage{minitoc}
    \newif\ifignorecontents
    \newcommand\skipcontents{\addtocontents{toc}{\protect\ignorecontentstrue}}
    \newcommand\readcontents{\addtocontents{toc}{\protect\ignorecontentsfalse}}
    \makeatletter
    %Mostly copied from minitoc documentation p.357, ll.4257-4271
    \long\def\PTC@test#1#2#3#4#5#6\PTC@{%  
     \ifx#1\ignorecontentstrue \ignorecontentstrue\else
     \ifx#1\ignorecontentsfalse \ignorecontentsfalse\else
     \ifx#1\contentsline
          \ifignorecontents\else
            \let\mtc@string\string
            \PTC@contentsline{#2}{#3}{#4}{#5}%
            \let\mtc@string\relax
          \fi
     \else\ifx#1\@input
           \edef\PTC@list{\PTC@list#2\relax}%
     \else\ifx#1\partend
            \immediate\closeout\tf@mtc
             \immediate\openout\tf@mtc=\jobname.mtc
     \else\ifx#1\partbegin
              \addtocounter{ptc}{-1}%
     \fi\fi\fi\fi\fi\fi
     \ifeof\@inputcheck\expandafter\PTC@toc
     \else\expandafter\PTC@read\fi}%
    \makeatother
    \begin{document}

然后围绕你不想要的章节

    \chapter{Chapter 3}

    \skipcontents %exclude from part's toc

    \chapter{Chapter 4}

    \readcontents %start including again

    \chapter{Chapter 5}

但如果你有类似的东西

    \chapter{Chapter 3}
    \section{3.1}
    \section{3.2}
    \skipcontents
    \section{3.3}
    \chapter{Chapter 4} 
    \section{4.1}
    \section{4.2}
    \readcontents
    \section{4.3}

您将在部分目录中的第 3 章下获得第 4.3 节的一行。

答案2

在查看 minitoc 包后,可以使用 对 parttoc 进行绑定\addtocontents{toc}{\protect\partbegin}。不幸的是,这只适用于部分的最后几章,而不适用于中间的章节。

\documentclass[a4paper,oneside]{scrbook}
\usepackage{minitoc}
\setcounter{tocdepth}{0} 

\begin{document}
\doparttoc
\tableofcontents

\part{Part 1}
\parttoc
\chapter{Chapter 1}
\chapter{Chapter 2}

\part{Part 2}

\parttoc
\chapter{Chapter 3}
\addtocontents{toc}{\protect\partbegin}
\chapter{Chapter 4}
\end{document}`

相关内容