从全局目录中删除未编号的部分,并将其放入本地目录中

从全局目录中删除未编号的部分,并将其放入本地目录中

我使用的是 \documentclass{book}。一共有 6 个章节。前 4 个章节有编号,使用 \section{} 创建。后两个章节没有编号,但我使用命令 \addcontentsline{toc}{section}{section name} 人为地向目录中添加了几个章节。我面临的问题是目录。我想要的是以下内容:

  1. 在书的开头出现的目录中,前 4 章应以章和节的形式出现。第 5 章和第 6 章应仅以章的形式出现。

  2. 在第 5 章中,开头应该有一个目录,该目录以两个多列的形式打印第 5 章中的所有章节。

  3. 在第 6 章中,开头应该有一个目录,该目录以两个多列的形式打印第 6 章中的所有章节。

这可能吗?谢谢。

编辑(2023 年 6 月 29 日):我正在对这个问题进行一些编辑,以更新我迄今为止所取得的成就,并借助此处的帖子:etoc 和 toc 的深度不同。我无法完全解决这个问题。通过尝试不同的方法,我能够接近解决方案。但是,该解决方案在某些编译中有效,在其他编译中无效。如果能知道完整的解决方案就太好了。

\documentclass[12pt,a4paper,fleqn]{book}
\usepackage{array}
\usepackage{tocloft}% always load before etoc

\usepackage{etoc}

\usepackage{amsmath,amsfonts,amsthm,mathrsfs,amssymb,amscd,comment,enumerate}
\usepackage[table]{xcolor}
\usepackage{hyperref}
\usepackage{geometry}
\geometry{bindingoffset=1cm}

\hypersetup{
    colorlinks   = true, %Colours links instead of ugly boxes
    urlcolor     = red, %Colour for external hyperlinks
    linkcolor    = blue, %Colour of internal links
    citecolor   = blue %Colour of citations, could be ``red''
}

\setlength{\textwidth}{20cm}
\setlength{\textheight}{23cm}
\hoffset=-3.0cm



\usepackage{multicol}

\begin{document}
    
    \begin{center}
        {\Large {\bf Title \footnote{Footnote}}}
        
        {\bf \today}
        
        
        {\Large {\bf Title\\}}
    \end{center}
    \etocsetnexttocdepth{1}
    \renewcommand{\contentsname}{Contents}
    \tableofcontents
    

    
    \chapter{Name of chapter 1}
    
    \section{Name of section 1, chapter 1}
    
    
    \section{Name of section 2, chapter 1} (click on the link) 
    
    
    
    
    \chapter{Name of Chapter 2}
    
    \section{Name of section 1, chapter 2}
    
    \section{Name of section 2, chapter 2}
    
    \section{Name of section 3, chapter 2}
    
    \subsection{Subsection}
        
    \section{Name of section 4, chapter 2}
    
    
    
    
    
    
    \chapter{Chapter 3}
    
    \section{Name of section 1, chapter 3}
    
    \section{Name of section 2, chapter 3}
    
    
    \chapter{Name of chapter 4}
    
    \section{Name of section 1, chapter 4}
    
    \section{Name of section 2, chapter 4}
    
    
    \chapter{Name of chapter 5}
    \etocsettocstyle{}{}
    \etocsetnexttocdepth{2}
    \begin{multicols}{2}
        \localtableofcontents
    \end{multicols}
    
    \pagebreak
    
    \addcontentsline{toc}{subsection}{L1}
    \addcontentsline{toc}{subsection}{L2}
    \addcontentsline{toc}{subsection}{L3}
    \addcontentsline{toc}{subsection}{L4}
    \addcontentsline{toc}{subsection}{L5}
    \addcontentsline{toc}{subsection}{L6}
    
    
    \chapter{Name of chapter 6}
    \etocsettocstyle{}{}
    \etocsetnexttocdepth{2}
    \begin{multicols}{2}
        \localtableofcontents
    \end{multicols}
    
    \pagebreak
    
    \addcontentsline{toc}{subsection}{M1}
    \addcontentsline{toc}{subsection}{M2}
    \addcontentsline{toc}{subsection}{M3}
    \addcontentsline{toc}{subsection}{M4}
    \addcontentsline{toc}{subsection}{M5}
    \addcontentsline{toc}{subsection}{M6} 

\end{document}

这部分有效,但我不知道如何实现。如果我注释掉第 5 章后面的行“\etocsettocstyle{}{}”,编译两次,然后添加此行,再编译两次,那么我就能得到所需的第 5 章的目录。

在此处输入图片描述

在这个文件中,第 6 章的目录从未出现过。虽然它似乎在其他文件中起作用,其中不止一章的本地目录出现了。

答案1

您的 MWE 中存在许多微妙的事情在起作用。

  1. 您应该向 etoc 作者发送错误报告,因为我的 TL2023 安装无法检测 tocloft。因此,由于被重新定义,\etocsetnexttocdepth因此命令仍然无效。这里最简单的解决方法是使用来处理主目录。\tableofcontents\tableofcontentstocloft\etoctableofcontents

  2. \addcontentsline由于没有排版材料,您的 MWE 的最后一章的各种内容都被忽略了,因此它们被丢弃了;在现实生活中,这种情况不会发生;修复这个问题\mbox{}之前的权利\end{document}就足够了。

  3. 与环境交互时有一些非常奇怪的事情multicols:如下代码

  \chapter{Name of chapter 5}
  \etocsettocstyle{}{}
  \begin{multicols}{2}
      \localtableofcontents
  \end{multicols}

似乎混淆了 etoc。查看.toc文件时,命令添加的行的顺序\chapter和一些看似 etoc 内部的行的顺序被置换了,因此\localtableofcontents没有打印任何内容。etoc 手册提到了多列并有专门的命令,所以我认为上面的代码应该被替换为

  \chapter{Name of chapter 5}
  \etocmulticolstyle{}
  \etocsetnexttocdepth{2}
  \localtableofcontents

  \chapter{Name of chapter 5}
  \etocsetnexttocdepth{2}
  \etoclocalmulticol{}

我在试验时对此感到很困惑,因为.toc文件更新后其效果只会在下一次编译时才生效,因此在更新时一定要编译足够多的次数或隐藏所有辅助文件。关于多列,也许可以查看 etoc 文档,第 II 部分。

这是更新后的 MWE,它结合了上述结论。我注释掉了一些不相关的内容。但请务必阅读下一个更好的提案。

\documentclass[12pt,a4paper,fleqn]{book}
\usepackage{array}
\usepackage{tocloft}% always load before etoc

\usepackage{etoc}

%\usepackage{amsmath,amsfonts,amsthm,mathrsfs,amssymb,amscd,comment,enumerate}
%\usepackage[table]{xcolor}
\usepackage{hyperref}
\usepackage{geometry}
%\geometry{bindingoffset=1cm}

\hypersetup{
    colorlinks   = true, %Colours links instead of ugly boxes
    urlcolor     = red, %Colour for external hyperlinks
    linkcolor    = blue, %Colour of internal links
    citecolor   = blue %Colour of citations, could be ``red''
}

% \setlength{\textwidth}{20cm}
% \setlength{\textheight}{23cm}
% \hoffset=-3.0cm

\usepackage{multicol}

\begin{document}
    
    \begin{center}
        {\Large {\bf Title \footnote{Footnote}}}
        
        {\bf \today}
        
        
        {\Large {\bf Title\\}}
    \end{center}
    \etocsetnexttocdepth{1}
    \renewcommand{\contentsname}{Contents}

\etoctableofcontents

\chapter{Name of chapter 1}
    
    \section{Name of section 1, chapter 1}
    
    \section{Name of section 2, chapter 1} (click on the link) 

\chapter{Name of Chapter 2}
    
    \section{Name of section 1, chapter 2}
    
    \section{Name of section 2, chapter 2}
    
    \section{Name of section 3, chapter 2}
    
    \subsection{Subsection}
        
    \section{Name of section 4, chapter 2}
    
\chapter{Chapter 3}
    
    \section{Name of section 1, chapter 3}
    
    \section{Name of section 2, chapter 3}
    
\chapter{Name of chapter 4}
    
    \section{Name of section 1, chapter 4}
    
    \section{Name of section 2, chapter 4}
    
\chapter{Name of chapter 5}
    \etocsetnexttocdepth{2}
    \etoclocalmulticol{}

    \clearpage
    
    \addcontentsline{toc}{subsection}{L1}
    \addcontentsline{toc}{subsection}{L2}
    \addcontentsline{toc}{subsection}{L3}
    \addcontentsline{toc}{subsection}{L4}
    \addcontentsline{toc}{subsection}{L5}
    \addcontentsline{toc}{subsection}{L6}

\chapter{Name of chapter 6}
    \etocsetnexttocdepth{2}
    \etoclocalmulticol{}

    \clearpage
    
    \addcontentsline{toc}{subsection}{M1}
    \addcontentsline{toc}{subsection}{M2}
    \addcontentsline{toc}{subsection}{M3}
    \addcontentsline{toc}{subsection}{M4}
    \addcontentsline{toc}{subsection}{M5}
    \addcontentsline{toc}{subsection}{M6} 

    \mbox{}
\end{document}

话虽如此,但整个方法似乎存在缺陷。仅出于目录深度的原因使用子节并不是好方法。此外,还有 hyperref 的警告,它不喜欢直接从章节转到子节。

Package hyperref Warning: Difference (2) between bookmark levels is greater 
(hyperref)                than one, level fixed on input line 105.

因此,这是另一种使用部分的方法。它依赖于深度标签机制,我在 etoc 文档第二部分“内容控制”中找到了该机制。

我们增加

\etocdepthtag.toc{lastchapters}% add a depth tag to toc file
\etocignoredepthtags % ignore etoc depth tags for the local tocs, it will
                     % obeyed only by main TOC

在文档正文第 4 章之前插入

\etocsettagdepth{lastchapters}{chapter}

在序言中或至少在文档主体的主要目录之前。

\documentclass[12pt,a4paper,fleqn]{book}
\usepackage{array}
\usepackage{tocloft}% always load before etoc

\usepackage{etoc}

%\usepackage{amsmath,amsfonts,amsthm,mathrsfs,amssymb,amscd,comment,enumerate}
%\usepackage[table]{xcolor}
\usepackage{hyperref}
\usepackage{geometry}
%\geometry{bindingoffset=1cm}

\hypersetup{
    colorlinks   = true, %Colours links instead of ugly boxes
    urlcolor     = red, %Colour for external hyperlinks
    linkcolor    = blue, %Colour of internal links
    citecolor   = blue %Colour of citations, could be ``red''
}

% \setlength{\textwidth}{20cm}
% \setlength{\textheight}{23cm}
% \hoffset=-3.0cm

\usepackage{multicol}
\etocsettagdepth{lastchapters}{chapter}
\begin{document}
    
    \begin{center}
        {\Large {\bf Title \footnote{Footnote}}}
        
        {\bf \today}
        
        
        {\Large {\bf Title\\}}
    \end{center}
    \renewcommand{\contentsname}{Contents}

\etoctableofcontents

\chapter{Name of chapter 1}
    
    \section{Name of section 1, chapter 1}
    
    
    \section{Name of section 2, chapter 1} (click on the link) 
    
\chapter{Name of Chapter 2}
    
    \section{Name of section 1, chapter 2}
    
    \section{Name of section 2, chapter 2}
    
    \section{Name of section 3, chapter 2}
    
    \subsection{Subsection}
        
    \section{Name of section 4, chapter 2}

\chapter{Chapter 3}
    
    \section{Name of section 1, chapter 3}
    
    \section{Name of section 2, chapter 3}
    
    
\chapter{Name of chapter 4}
    
    \section{Name of section 1, chapter 4}
    
    \section{Name of section 2, chapter 4}
    
    
\etocdepthtag.toc{lastchapters}% add a depth tag to toc file
\etocignoredepthtags % ignore etoc depth tags for the local tocs, it will
                     % obeyed only by main TOC
    

\chapter{Name of chapter 5}
    \etocmulticolstyle{}
    \localtableofcontents

%    \clearpage
    
    \section{L1}
    \section{L2}
    \section{L3}
    \section{L4}
    \section{L5}
    \section{L6}
    
    
\chapter{Name of chapter 6}
    % \etocmulticolstyle{} % already in effect
    \localtableofcontents

%    \clearpage
    
    \section{M1}
    \section{M2}
    \section{M3}
    \section{M4}
    \section{M5}
    \section{M6} 

    \mbox{}
\end{document}

这给出了主目录

主要目录

并根据需要添加本地目录(也许应该在章节标题和本地目录之间添加一些额外的垂直空间控制)。

第 5 章的本地目录

关于 tocloft 检测的错误报告应发送给 etoc 作者:最新的 TL2023 导致检测失败。

相关内容