我使用etoc
包为每个部分制作单独的目录。现在我需要将目录放在每个部分的末尾而不是开头。有办法吗?
这是我的 MWE:
\documentclass[twoside]{scrbook}
\usepackage{lipsum}
\usepackage{etoc}
\newlength\tocrulewidth
\setlength{\tocrulewidth}{1.5pt}
\begin{document}
%
\part{Part 1}
\etocsettocdepth{3}
\localtableofcontents
\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\part{Part 2}
\etocsettocdepth{3}
\localtableofcontents
\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\part{Part 3}
\etocsettocdepth{3}
\localtableofcontents
\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\end{document}
答案1
以下是一种方法:
\documentclass[twoside]{scrartcl}
\usepackage{lipsum}
\usepackage{etoc}
%\newlength\tocrulewidth
%\setlength{\tocrulewidth}{1.5pt}
\begin{document}
\part{Part 1}
\invisiblelocaltableofcontents\label{parttoc:1}
%\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\etocsetnexttocdepth{3}
\tableofcontents\ref{parttoc:1}
\part{Part 2}
\invisiblelocaltableofcontents\label{parttoc:2}
%\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\etocsetnexttocdepth{3}
\tableofcontents\ref{parttoc:2}
\part{Part 3}
\invisiblelocaltableofcontents\label{parttoc:3}
%\clearpage
\section{Section}
\lipsum[1-20]
\section{Section}
\lipsum[21-40]
%
\etocsetnexttocdepth{3}
\tableofcontents\ref{parttoc:3}
\end{document}
它需要手动添加一些\label/\ref
,但可以使用part
计数器将其抽象为宏。
评论:
scrartcl
由于示例没有章节,我将文档类别切换为,在准备这个答案时,我注意到 Emacs AUCTeX 错误地报告了编译错误。这是由 etoc 间接触发的,它诱导 LaTeX 将一些消息写入日志,例如,这里消息将包含字符串
parttoc:1:<space>
,这种字符串会引发 AUCTeX 的错误报告。最小示例:
\documentclass{article} \begin{document} \typeout{Hello:1: }% with a space! \end{document}
对于这样的文档,AUCTeX 声称存在 LaTeX 错误。
使用 AUCTeX 11.90.2.2017-07-25 进行测试(我认为实际上是 11.91.0,但发布字符串中存在问题)
这对我们很有帮助,因为标签中
parttoc:1
已经有冒号了。etoc
将获取更新来解决此 AUCTeX 问题。至少还有另一种方法,即使用文档中解释的“深度标签”,但这在这里会稍微麻烦一些。
不用说,
etoc
这里修改的是\ref
通常的意思。但它不会以任何方式修改\ref
宏本身,它只是对宏在某些位置的存在做出反应。
最后一部分的目录: