章节配置后的ToC

章节配置后的ToC

以下mwe示例展示了我目前面临的一些问题。如能得到任何帮助,我将不胜感激。

\documentclass[letterpaper,11pt,openany]{book}

\usepackage[showframe]{geometry}
\usepackage{titletoc}
%--------------------------------------------------------------------------------------------------------------
% ToC formt of book is affecting mini ToC intended to go after each chapter
%--------------------------------------------------------------------------------------------------------------
    \newlength\mychaplength
    \settowidth\mychaplength{\bfseries\sffamily Effect on TOC\quad} % calculate width of indentation for chapter heading

    \titlecontents{section}
                [\mychaplength]
                {}
                {{\thecontentslabel}\enskip}
                {}
                {\hfill\contentspage}


\begin{document}
\chapter{Sample}
\noindent
        \begin{minipage}{0.48\linewidth}%
            \noindent         
            TEMP TOC~\hrulefill
            {\begingroup%
                \startcontents[chapters]%
                \printcontents[chapters]{}{1}{\setcounter{tocdepth}{1}}%
            \endgroup%
            }%
        \end{minipage}
\newpage
\section{Algebra, Geometry and Statistics.}
\section{Some random section that is long.}
\end{document}

在为每一章创建迷你目录的过程中,我遇到了一个问题。出于某种原因,我主目录中的设置影响了第一章的当前目录。请注意,主目录中的设置对于我需要的一些间距要求是必需的。我如何恢复/重新定义或为迷你目录创建新的设置。需要做什么?

在此处输入图片描述

另外,是否可以只使用章节编号,如1and2而不是1.1and 1.2and,

是否可以从迷你目录中删除页码和虚线?


最终,我正在寻找三种可能的配置:

  1. 本地恢复 ToC 以创建新的迷你 ToC,而不会受到主 ToC 的影响。默认 ToC 设置。

在此处输入图片描述

  1. 章节编号没有章节编号;1而不是1.1和,

在此处输入图片描述

  1. 删除虚线和页码,仅保留章节编号和章节标题。

在此处输入图片描述

答案1

您可以\titlecontents在 minitoc 上下文中重新定义。

\documentclass[letterpaper,11pt,openany]{book}

\usepackage[showframe]{geometry}
\usepackage{titletoc}
%--------------------------------------------------------------------------------------------------------------
% ToC formt of book is affecting mini ToC intended to go after each chapter
%--------------------------------------------------------------------------------------------------------------

\newlength\mychaplength
% calculate width of indentation for chapter heading
\settowidth{\mychaplength}{whatever} % for main toc

\titlecontents{section}[\mychaplength]
  {}
  {\thecontentslabel\enskip}
  {}
  {\hfill\contentspage}

\makeatletter
\newcommand{\myminitoc}{%
  \begin{minipage}{0.48\columnwidth}
  \titlecontents{section}[2em]
    {}
    {\thecontentslabel\enskip}
    {}
    {}%
  % save the value of tocdepth
  \chardef\savedtocdepth=\value{tocdepth}%
  % redefine \numberline
  \let\savedcontentsline\contentsline
  \def\contentsline##1##2##3{%
    \begingroup
    \let\numberline\numberlinegobble
    \protected@edef\x{\endgroup
      \noexpand\savedcontentsline{##1}{##2}{}}\x
  }%
  % the minitoc proper
  TEMP TOC~\hrulefill
  \startcontents[chapters]
  \printcontents[chapters]{}{1}{\setcounter{tocdepth}{1}}
  % restore the value of tocdepth
  \setcounter{tocdepth}{\savedtocdepth}
  \end{minipage}\newpage
}
\newcommand{\numberlinegobble}[1]{\numberline@gobble#1\@nil}
\def\numberline@gobble#1.#2\@nil{\noexpand\numberline{#2}}
\makeatother

\begin{document}
\chapter{Sample}

\myminitoc

\section{Algebra, Geometry and Statistics.}
\section{Some random section that is long.}

\end{document}

我使用了一个卑鄙的伎俩来删除章节号,通过重新定义\numberline。然而titletoc重新定义了自身\numberline,所以我们需要在 控制之前采取行动titletoc

还要注意,我保存了 tocdepth 的值,因为它\setcounter在全球范围内起作用。

在此处输入图片描述

一些评论的话。

titletoc会重新定义\contentsline,反过来,\numberline每次都会重新定义。所以我重新定义\numberline以吞噬第一个点及其前面的内容的想法行不通。所以我求助于一种间接方法。

\contentsline我在本地保存了 的当前定义\savedcontentsline。然后我重新定义\contentsline以打开一个组,在本地重新定义\numberline以执行上述工作; 的新定义\contentsline将只是在输入流上推送与之前相同的标记,但 变为\contentsline\savedcontentsline并且 的参数\numberline将被减少。这样,titletoc就会像什么都没发生一样完成其工作。

新的如何\numberline定义?它变成了\numberlinegobble,所以\numberline{1.1}变成

\[email protected]\@nil

反过来会产生\noexpand\numberline{1}。这将出现在 中\protected@edef,因此\noexpand将消失,但也不会受到\numberline影响。它将由 处理,titletoc并具有其自己的定义。

相关内容