我正在使用考博类,它又使用etoc
包来在我的文档中创建本地目录。由于本地目录应位于调用它们的页面边缘(通常在章节开头),因此它们基本上是像这样包含的:
\documentclass{scrbook}
\usepackage{etoc}
\usepackage{marginnote}
\usepackage[hidelinks]{hyperref}
\newcounter{margintocdepth} % Set the depth of the margintoc
\setcounter{margintocdepth}{\sectiontocdepth}
\newlength{\mtocshift} % Length of the vertical offset used for margin tocs
\setlength{\mtocshift}{-52mm}
% Command to print a table of contents in the margin
\newcommand{\margintoc}[1][\mtocshift]{ % The first parameter is the vertical offset; by default it is \mtocshift
\begingroup
% Set the style for chapter entries
\etocsetstyle{chapter}
{\parindent -10pt \parskip 0pt}
{\leftskip 0pt}
{\makebox[.5cm]{}
\hangindent=0.5cm\etoclink{\etocthename}\nobreak\hbox{\hbox to 1.5ex {\hss\hss}}\hfill\makebox[5mm][l]{\etocpage}\nobreak
\par}
{}
% Set the style for section entries
\etocsetstyle{section}
{\parindent 0pt \parskip 0pt}
{\leftskip 0pt}
{\makebox[.5cm]{}
\hangindent=0.5cm\etoclink{\etocthename}\nobreak\hbox{\hbox to 1.5ex {\hss\hss}}\hfill\makebox[5mm][l]{\etocpage}\nobreak
\par}
{}
% Set the global style of the toc
\etocsettocstyle{\usekomafont{section}\small\raggedright}{}
\etocsetnexttocdepth{\themargintocdepth}
% Print the table of contents in the margin
\marginnote[#1]{
\parbox[b]{\marginparwidth}{Contents\vspace{-0.65\baselineskip}\\\vspace{0.1\baselineskip}\rule{\marginparwidth}{0.5pt}}
\localtableofcontents
}
\endgroup
}
\begin{document}
\tableofcontents
\part{First Part}
\setchapterpreamble[u]{\margintoc}
\chapter{Introduction}
\section{Section 1}
\section{Section 2}
\chapter{Body}
\section{Section 1}
\section{Section 2}
\chapter{Conclusion}
\section{Section 1}
\section{Section 2}
\part{Second Part}
\chapter{Introduction}
\chapter{Body}
\chapter{Conclusion}
\end{document}
这很有效,但本地目录仅包含章节内的元素(我猜这通常正是您想要的)。但我希望本地目录包含零件级别的所有内容。有什么办法吗?
不幸的是,使用\etocsetnexttocdepth
不起作用,\localtableofcontents
如果不使用,调用\setchapterpreamble
将创建一个具有正确范围的本地目录,但它将被打印在自己的页面上。
答案1
根据包装文档部分15. Labeling and reusing elsewhere
etoc 允许在某个位置排版在其他地方定义的本地目录。为此,只需两个简单的步骤:
\localtableofcontents
在远处插入,然后跟随一些\label{foo}
。插入
\tableofcontents\ref{foo}
到您希望此远程目录出现的位置。在步骤1中,如果使用
\invisiblelocaltableofcontents
代替\localtableofcontents
,则在其定义的地方将不会进行排版。
您需要某种方式来自动生成带有适当标签的标记,例如\label{part:1}
,但您需要知道您的章节属于哪个部分。好的,我测试了这\the\value{part}
两种方法,以生成标签并用作该部分章节的参考,它似乎确实有效。
第一部分的第一章
第二部分第一章
\documentclass{scrbook}
\usepackage{etoc}
\usepackage{marginnote}
\usepackage[hidelinks]{hyperref}
\newcounter{margintocdepth} % Set the depth of the margintoc
\setcounter{margintocdepth}{\sectiontocdepth}
\newlength{\mtocshift} % Length of the vertical offset used for margin tocs
\setlength{\mtocshift}{-52mm}
% Command to print a table of contents in the margin
\newcommand{\margintoc}[1][\mtocshift]{ % The first parameter is the vertical offset; by default it is \mtocshift
\begingroup
% Set the style for chapter entries
\etocsetstyle{chapter}
{\parindent -10pt \parskip 0pt}
{\leftskip 0pt}
{\makebox[.5cm]{}
\hangindent=0.5cm\etoclink{\etocthename}\nobreak\hbox{\hbox to 1.5ex {\hss\hss}}\hfill\makebox[5mm][l]{\etocpage}\nobreak
\par}
{}
% Set the style for section entries
\etocsetstyle{section}
{\parindent 0pt \parskip 0pt}
{\leftskip 0pt}
{\makebox[.5cm]{}
\hangindent=0.5cm\etoclink{\etocthename}\nobreak\hbox{\hbox to 1.5ex {\hss\hss}}\hfill\makebox[5mm][l]{\etocpage}\nobreak
\par}
{}
% Set the global style of the toc
\etocsettocstyle{\usekomafont{section}\small\raggedright}{}
\etocsetnexttocdepth{\themargintocdepth}
% Print the table of contents in the margin
\marginnote[#1]{
\parbox[b]{\marginparwidth}{Contents\vspace{-0.65\baselineskip}\\\vspace{0.1\baselineskip}\rule{\marginparwidth}{0.5pt}}
\localtableofcontents\ref{part:\the\value{part}}
}
\endgroup
}
\begin{document}
\tableofcontents
\part{First Part}
\invisiblelocaltableofcontents\label{part:\the\value{part}}
\setchapterpreamble[u]{\margintoc}
\chapter{Introduction}
\section{Section 1}
\section{Section 2}
\chapter{Body}
\section{Section 1}
\section{Section 2}
\chapter{Conclusion}
\section{Section 1}
\section{Section 2}
\part{Second Part}
\invisiblelocaltableofcontents\label{part:\the\value{part}}
\setchapterpreamble[u]{\margintoc}
\chapter{Introduction}
\chapter{Body}
\chapter{Conclusion}
\end{document}
更新:以上是使用\part
。使用 时会失败\part*
。然后使用 而不是\the\value{part}
诸如\the\value{mycounter}
having done\newcounter{mycounter}
和 issuing\stepcounter{mycounter}
或\refstepcounter{mycounter}
at each 之类的东西\part*
。您也可以\refstepcounter{part}
按照评论中提到的那样做,但这似乎只有在文档中仅包含未编号部分时才合理,否则编号部分的编号将发生偏移。请注意,\part*
可能存在另一个问题,即无法根据埃托克文档,部分21. The \etocsetlocaltop.toc and \etocimmediatesetlocaltop.toc commands
。我没有测试过,你的评论(我不知道如何链接到它)似乎表明你没有问题,但你可能必须对未编号的部分做类似的事情,我part*
在寻找中找到了埃托克文档。
\part*{Extra unnumbered part}
\etocsetlocaltop.toc{part}
\invisiblelocaltableofcontents
回想起来,您的评论似乎表明一切都没问题,但也许这不是必要的,甚至可能是有害的。