我正在尝试从目录中获取摘要。摘要应仅显示章节和节。我使用了以下代码:
\makeatletter
\newcommand*{\tableofcontentssummary}{%
\begingroup
\value{tocdepth}=1\relax% usually show part, chapter and section only
\@fileswfalse
\renewcommand*{\contentsname}{Summary}%
\tableofcontents
\endgroup
}
\makeatother
\section*{Summary}
\markboth{}{SUMMARY}
\label{sec:summary}
\addcontentsline{toc}{section}{\nameref{sec:summary}}
\tableofcontentssummary
这应该可以工作,但我之前添加到目录中的函数出现了问题。它们也适用于摘要。我想删除 >\renewcommand 和 >\addtocontents{toc}。
它们被用来设置目录名称、在目录标题和内容之间添加新页面以及设置页眉。
\renewcommand*\tableofcontents{\listoftoc[{目录}]{toc}}
\addtocontents{toc}{\protect\thispagestyle{empty} \newpage \markboth{}{目录}}
这是我得到的。
答案1
假设包tocbasic
已经在使用中(\listoftoc
是一个tocbasic
宏):
\documentclass{book}
\usepackage{blindtext}% only for dummy text
\usepackage{tocbasic}
\newcommand*{\originaltableofcontents}{\listoftoc[\contentsname]{toc}}
\renewcommand*{\listoffigures}{\listoftoc[\listfigurename]{lof}}
\renewcommand*{\listoftables}{\listoftoc[\listtablename]{lot}}
\setuptoc{lof}{leveldown,totoc}
\setuptoc{lot}{leveldown,totoc}
\BeforeTOCHead{\clearpage}
\AfterTOCHead[toc]{\ExecuteDoHook{aftertochead/toc}}
\makeatletter
\newcommand*{\tableofcontentssummary}{%
\begingroup
\value{tocdepth}=1\relax% usually show part, chapter and section only
\@fileswfalse
\renewcommand*{\contentsname}{Summary}%
\setuptoc{toc}{leveldown,totoc}%
\originaltableofcontents
\endgroup
}
\makeatother
\renewcommand*{\tableofcontents}{%
\renewcommand{\contentsname}{Table of Contents}%
\AddtoOneTimeDoHook{aftertochead/toc}{\maintocsetup}%
\setuptoc{toc}{totoc}%
\originaltableofcontents
}
\newcommand*\maintocsetup[1]{%
\thispagestyle{empty}\clearpage\markboth{}{\MakeUppercase{\contentsname}}%
}
\setcounter{tocdepth}{5}
\begin{document}
\frontmatter
\tableofcontentssummary
\listoffigures
\listoftables
\mainmatter
\Blinddocument
\begin{table}
\caption{A table}
\end{table}
\begin{figure}%
\caption{A figure}%
\end{figure}
\Blinddocument\Blinddocument\Blinddocument
\tableofcontents
\end{document}
答案2
一个肮脏的伎俩:首先用通常的方法编译两次文档\tableofcontents
,然后将其删除,并直接使用 .toc 文件,次数不限。
\documentclass{book}
\usepackage{blindtext}
\begin{document}
\frontmatter
% \tableofcontents
\section*{Default ToC}
\input{\jobname.toc}
\setcounter{tocdepth}{1}
\section*{ToC Summary}
\input{\jobname.toc}
\setcounter{tocdepth}{4}
\section*{Full ToC}
\input{\jobname.toc}
\mainmatter
\Blinddocument
\end{document}
如果第一次编译后手动注释一行工作量太大,您也可以自动执行:
\documentclass{book}
\usepackage{blindtext}
\begin{document}
\frontmatter
\IfFileExists{\jobname.toc}{%
\chapter{Contents}%
\input{\jobname.toc}%
\setcounter{tocdepth}{1}%
\chapter{ToC Summary}
\input{\jobname.toc}}%
{\tableofcontents%
\marginpar{\huge Compile\\ again!}}
\mainmatter
\Blinddocument
\end{document}
答案3
再次,你没有提供显示 的 MWE \documentclass
。你上一个问题的答案将表格列表和图片列表设置为目录中的部分展示了两个 MWE,但你似乎没有注意到它们是什么样子。 --- GOM
如果您使用类(和类memoir
的超集),那么这只会提供多个 ToC。以下是 30 行的 MWE,显示了这一点。book
report
% shorttocprob.tex SE 600373
\documentclass{memoir}
\begin{document}
\frontmatter
% The short ToC
\setcounter{tocdepth}{1} % chapters and sections
\renewcommand{\contentsname}{Short ToC}
\tableofcontents* % this does not add Contents to the ToC
% The regular ToC
\renewcommand{\contentsname}{Contents}
\setcounter{tocdepth}{2} % chapters to subsections
%\tableofcontents % this adds Contents to the ToC
\tableofcontents* % this does not add Contents to the ToC
\mainmatter
\setsecnumdepth{subsection} % number subsections
\chapter{A chapter}
Text.
\section{A section}
Text.
\subsection{A subsection}
Text.
\subsubsection{A subsubsection}
Text.
\end{document}