以下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}
在为每一章创建迷你目录的过程中,我遇到了一个问题。出于某种原因,我主目录中的设置影响了第一章的当前目录。请注意,主目录中的设置对于我需要的一些间距要求是必需的。我如何恢复/重新定义或为迷你目录创建新的设置。需要做什么?
另外,是否可以只使用章节编号,如1
and2
而不是1.1
and 1.2
and,
是否可以从迷你目录中删除页码和虚线?
最终,我正在寻找三种可能的配置:
- 本地恢复 ToC 以创建新的迷你 ToC,而不会受到主 ToC 的影响。默认 ToC 设置。
- 章节编号没有章节编号;
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
并具有其自己的定义。