![在主目录中显示章节,但在部分目录中不显示章节](https://linux22.com/image/296232/%E5%9C%A8%E4%B8%BB%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%98%BE%E7%A4%BA%E7%AB%A0%E8%8A%82%EF%BC%8C%E4%BD%86%E5%9C%A8%E9%83%A8%E5%88%86%E7%9B%AE%E5%BD%95%E4%B8%AD%E4%B8%8D%E6%98%BE%E7%A4%BA%E7%AB%A0%E8%8A%82.png)
是否可以不显示第二部分的最后一章?
\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 会使用该命令来测试相关性,以便它还会测试您是否已告诉它忽略\contentsline
s。然后,您可以向.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}`