我想使用包etoc
在每章开始时获取本地目录。但是,我很难做到:
- 隐藏标题“内容“
- 在此本地目录条目上方和下方添加水平规则
- 将章节内容(带文本的迷你目录)排版在章节标题之后,而不是在章节第三页(第二页为空白)
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{etoc}
\begin{document}
\chapter{Chapter 1}
\localtableofcontents
\section{Section 1}
\lipsum[1-20]
\section{Section 2}
\lipsum[1-20]
\end{document}
答案1
该\etocsettocstyle
命令提供了在目录之前和之后设置某些内容的方法,即水平规则。以非常原始的方式使用它,它还可以防止分页等。
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{etoc}
\newlength\tocrulewidth
\setlength{\tocrulewidth}{1.5pt}
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\begingroup
\parindent=0em
\etocsettocstyle{\rule{\linewidth}{\tocrulewidth}\vskip0.5\baselineskip}{\rule{\linewidth}{\tocrulewidth}}
\localtableofcontents
\endgroup
\section{Section 1}
\lipsum[1-20]
\section{Section 2}
\lipsum[1-20]
\end{document}
答案2
(从评论中移出)
这只是 Christian 的回答。缩进的解释是,这里etoc
处于兼容模式,并将排版委托给 scrbook 类。因此,本地目录中的章节将像在主目录中一样显示。
手册etoc
中有一个使用示例\KOMAoptions{toc=left}
,但这里不行,因为它需要一些命令\etocsettocstyle{..}{..}
覆盖的 KOMA 代码。我查看了scrbook
代码,发现这样做
\makeatletter
\def\scr@tso@section@indent{0pt}
\makeatother
\localtableofcontents
解决了缩进问题。但是,子节仍将像在主目录中一样缩进。由于没有更好的解决方案,我只能提出:
\makeatletter
\edef\scr@tso@subsection@indent
{\the\dimexpr\scr@tso@subsection@indent-\scr@tso@section@indent}
\def\scr@tso@section@indent{0pt}
\makeatother
\localtableofcontents
KOMA 中可能有这些缩进的接口,但我没有(立即)弄清楚如何使用。
完整代码(来自Christian的回答):
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{etoc}
\newlength\tocrulewidth
\setlength{\tocrulewidth}{1.5pt}
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\begingroup
\parindent=0em
\etocsettocstyle{\rule{\linewidth}{\tocrulewidth}\vskip0.5\baselineskip}{\rule{\linewidth}{\tocrulewidth}}
\makeatletter
\edef\scr@tso@subsection@indent
{\the\dimexpr\scr@tso@subsection@indent-\scr@tso@section@indent}
\def\scr@tso@section@indent{0pt}
\makeatother
\localtableofcontents
\endgroup
\section{Section 1}
\lipsum[1-20]
\subsection{subsection 1.1}
\section{Section 2}
\lipsum[1-20]
\end{document}