请问,如果不使用目录,我怎样才能获取所有章节的名称?
\documentclass{memoir}
\begin{document}
\part{part ONE}
%Display all the chapter name of Part ONE
\chapter{One}
\chapter {Two}
\end{document}
答案1
有什么原因你不能使用etoc
?你至少没有提到它,而且它的设计尊重的配置。(例如,它确保在加载memoir
时将 ToC 添加到 ToC 。)memoir
\documentclass{memoir}
\usepackage{etoc}
\begin{document}
\tableofcontents
\part{part ONE}
\localtableofcontents
\chapter{One}
\chapter {Two}
\part{part two}
\localtableofcontents
\chapter{three}
\chapter{four}
\end{document}
这将产生一个主要的目录:
第 1 部分的目录:
以及第 2 部分的目录:
编辑
只是为了回答您关于主目录和本地目录的不同配置的问题,它甚至允许您做完全荒谬的事情。如果您愿意,您可以为文档中的每个目录使用不同的布局,以不同的方式排版相同的目录,并以亮橙色斜体打印目录中的特定元素,背景为绿色,带有蓝色边框。此示例仅显示了使用 的两种默认格式的etoc
几个不同的本地目录:和。etoc
ruled
framed
\documentclass{memoir}
\usepackage{etoc}
\begin{document}
\tableofcontents
\part{part ONE}
\etoclocalruled[1]{Local Contents Rules!}
\chapter{One}
\chapter {Two}
\part{part two}
\etoclocalframed[2]{Local Contents Framed}
\chapter{three}
\chapter{four}
\chapter{five}
\chapter{six}
\part{part three}
\localtableofcontents
\chapter{seven}
\chapter{eight}
\end{document}
这将产生标准的主要目录:
包含第 1 部分规则的目录:
第 2 部分的框架目录:
以及第 3 部分的默认样式的本地目录:
显然,为每个目录更改样式是疯狂的。但是,您可以在发布主目录后轻松更改全局样式\tableofcontents
。(如果您出于某种原因希望稍后发布主目录,也可以稍后恢复默认设置。)软件包手册应该可以让您了解各种可能性。
答案2
可以重复使用目录并仅提取每个目录的内容\part
。这将通过以下示例进行讨论memoir
基本用户手册(片段C.7(使用课堂工具制作章节目录),第 405 页)。以下讨论取自手册,并进行了一些修改(章节 > 部分)以满足您的要求...
通过使用一些钩子,我们将能够创建一个简单的零件目录。首先需要注意几点:
在这个类中,ToC 数据可以被重复使用,因此我们可以根据需要多次加载 ToC 数据。
ToC 中的数据作为
\contentsline
宏的参数存储,例如(参见第 143 页的图 9.1):\contentsline{part}{\partnumberline {I}Test}{3}
其中第一个参数决定使用哪个宏来处理数据。每个宏都会查看计数器的值
tocdepth
以了解是否要排版。使用一些钩子,我们可以插入局部更改,
tocdepth
以便只排版当前部分的部分。
这个想法是能够在 ToC 数据的关键点添加钩子,然后使用这些钩子来启用和禁用排版。
我们需要在部分行之后添加钩子(如上面的钩子),并且我们需要能够在标记部分结束的项目之前插入钩子,即下一个\part
,,\book
加上一个宏,\appendixpage
它也写入目录。
首先,我们定义将钩子添加到 ToC 中的钩子。我们使用计数器使每个开始和结束钩子都独一无二。我们在\part
和的 ToC 条目上方添加结束标记\book
。
\newcounter{tocmarker}
\renewcommand\mempreaddparttotochook {\cftinserthook{toc}{end-\thetocmarker}}
\renewcommand\mempreaddbooktotochook {\cftinserthook{toc}{end-\thetocmarker}}
\renewcommand\mempreaddapppagetotochook{\cftinserthook{toc}{end-\thetocmarker}}
% start marker
\renewcommand\mempostaddparttotochook{%
\stepcounter{tocmarker}\cftinserthook{toc}{start-\thetocmarker}}
\let\normalchangetocdepth\changetocdepth % for later
插入 ToC 文件中的钩子默认不执行任何操作。您会注意到上面的行现在看起来像:
\cftinsert {end-0}
\contentsline{part}{\partnumberline {I}Test}{3}
\cftinsert {start-1}
...
\cftinsert {end-1}
\contentsline{part}{\partnumberline {II}Test}{5}
因此,要获得部分 ToC 命令,我们需要确保 (1) 所有条目均已禁用,(2)start-1
重新启用 ToC 条目,以及 (3)end-1
再次禁用 ToC 条目。以下是代码的其余部分,通过注释进行了解释。
\makeatletter
\newcommand\parttoc{
% make changes local, remember counters a global
\begingroup
% store current value, to be restored later
\setcounter{@memmarkcntra}{\value{tocdepth}}
% when ever \settocdepth is used, it adds the new value to the
% ToC data. This cause problems when we want to disable all
% entries. Luckily the data is added via a special macro, we
% redefine it, remember we stored the original value earlier.
\let\changetocdepth\@gobble
% disable all entries (using our copy from above)
\normalchangetocdepth{-10}
% enable ToC data within our block, we go as far as subsubsection
\cftinsertcode{start-\thetocmarker}{\normalchangetocdepth{3}}
% when the block is done, disable the remaining
\cftinsertcode{end-\thetocmarker}{\normalchangetocdepth{-10}}
% remove the spacing above the ToC title
\let\tocheadstart\relax
% remove the ToC title itself
\let\printtoctitle\@gobble
% remove space below title
\let\aftertoctitle\relax
% reformat ToC entries:
\setlength{\cftchapterindent}{0pt}
\setlength{\cftsectionindent}{\cftchapternumwidth}
\setlength{\cftsubsectionindent}{\cftsectionnumwidth}
\setlength{\cftsubsubsectionindent}{\cftsubsectionindent}
\addtolength{\cftsubsubsectionindent}{\cftsubsectionnumwidth}
\renewcommand\cftchapterfont{\small}
\renewcommand\cftsectionfont{\small}
\renewcommand\cftsectionpagefont{\small}
\renewcommand\cftsubsectionfont{\small}
\renewcommand\cftsubsectionpagefont{\small}
\renewcommand\cftsubsubsectionfont{\small}
\renewcommand\cftsubsubsectionpagefont{\small}
% include the actual ToC data
\tableofcontents*
\endgroup
% restore tocdepth
\setcounter{tocdepth}{\value{@memmarkcntra}}
% to indent or not after the chapter ToC
\m@mindentafterchapter
% space between part ToC and text
\par\bigskip
% handles indentation after the macro
\@afterheading}
\makeatother
请注意,如果使用了\partprecistoc
或\partprecis
,则该数据也会添加到 ToC 数据中,我们需要在 ToC 部分中本地禁用它。这可以通过添加
\let\precistoctext\@gobble
到\parttoc
上面的定义,只需确保在调用 before 之前添加它
\tableofcontents*
。
\documentclass{memoir}
\newcounter{tocmarker}
\renewcommand\mempreaddparttotochook {\cftinserthook{toc}{end-\thetocmarker}}
\renewcommand\mempreaddbooktotochook {\cftinserthook{toc}{end-\thetocmarker}}
\renewcommand\mempreaddapppagetotochook{\cftinserthook{toc}{end-\thetocmarker}}
% start marker
\renewcommand\mempostaddparttotochook{%
\stepcounter{tocmarker}\cftinserthook{toc}{start-\thetocmarker}}
\let\normalchangetocdepth\changetocdepth % for later
\makeatletter
\newcommand\parttoc{
% make changes local, remember counters a global
\begingroup
% store current value, to be restored later
\setcounter{@memmarkcntra}{\value{tocdepth}}
% when ever \settocdepth is used, it adds the new value to the
% ToC data. This cause problems when we want to disable all
% entries. Luckily the data is added via a special macro, we
% redefine it, remember we stored the original value earlier.
\let\changetocdepth\@gobble
% disable all entries (using our copy from above)
\normalchangetocdepth{-10}
% enable ToC data within our block, we go as far as section
\cftinsertcode{start-\thetocmarker}{\normalchangetocdepth{1}}
% when the block is done, disable the remaining
\cftinsertcode{end-\thetocmarker}{\normalchangetocdepth{-10}}
% remove the spacing above the ToC title
\let\tocheadstart\relax
% remove the ToC title itself
\let\printtoctitle\@gobble
% remove space below title
\let\aftertoctitle\relax
% reformat ToC entries:
\setlength{\cftchapterindent}{0pt}
\setlength{\cftsectionindent}{\cftchapternumwidth}
\renewcommand\cftchapterfont{\small}
\renewcommand\cftsectionfont{\small}
% include the actual ToC data
\tableofcontents*
\endgroup
% restore tocdepth
\setcounter{tocdepth}{\value{@memmarkcntra}}
% to indent or not after the chapter ToC
\m@mindentafterchapter
% space between part ToC and text
\par\bigskip
% handles indentation after the macro
\@afterheading}
\makeatother
\begin{document}
\tableofcontents
\part{First part}
\parttoc
\chapter{First chapter}
\section{First section}
\section{Second section}
\section{Last section}
\chapter{Second chapter}
\section{First section}
\section{Second section}
\section{Last section}
\chapter{Last chapter}
\section{First section}
\section{Second section}
\section{Last section}
\end{document}
请注意,您将 放在\parttoc
与标题不同的页面上\part
。您必须修改一些\part
内部内容,也许还要修改 的一些内容,\parttoc
才能在同一页面上正确显示内容。但是,目前,如果没有更多指导方针,这应该就足够了。