问题:我想要生成一个.toc
文件,但不在文本的任何地方显示目录。
背景:我想在文本开头使用简短的目录shorttoc
。然后,使用titletoc
,我想在每章开头使用详细的章节目录。对于这些详细的章节目录,我需要\setcounter{tocdepth}{4}
将详细信息写入.toc
。现在,shorttoc
不会.toc
单独创建文件,但您必须将其放在\tableofcontents
后面的某个位置\shorttoc
。因此,仅仅省略\tableofcontents
并不能解决问题。
可能的解决方案:首先运行 (PDF)LaTeX,\tableofcontents
以便.toc
生成文件。然后将其注释掉,再运行 (PDF)LaTeX。
当然,这可行,但根本不是解决问题的优雅方法。我想应该有某种方法可以创建,.toc
而无需实际创建 ToC \tableofcontents
。
这是 MWE。严格来说,它不是最小的,但附加的内容应该可以明确文档的总体思路。
\documentclass{book}
\usepackage{titletoc,titlesec}
\usepackage{shorttoc}
\usepackage{lipsum}
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{4}
\titlecontents{partsection}[2.3em]
{} {\contentslabel{2.3em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsection}[5.5em]
{} {\contentslabel{3.2em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsubsection}[9.6em]
{} {\contentslabel{4.1em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partparagraph}[8.5em]
{} {\contentslabel{0em}} {} {\titlerule*[1pc]{.}\contentspage}
\begin{document}
\frontmatter
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]
\cleardoublepage
\shorttoc{Contents}{1}
\cleardoublepage
\tableofcontents
\mainmatter
\chapter{A chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{}
\section{Section}
\lipsum[1]
\subsection{A subsection}
\lipsum[3]
\subsection{A second subsection}
\subsubsection{SubSubsection}
\paragraph{Paragraph}
\lipsum[4]
\section{Section 2}
\lipsum
\chapter{Second chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{}
\section{Section}
\lipsum[2]
\section{Another section}
\lipsum
\end{document}
附言:我们优先考虑不需要对当前配置进行重大更改的解决方案(我的意思是我宁愿不想使用不同的包来获取使用上述代码获得的整体输出)。
答案1
\tableofcontents
设置章节标题并调用\@starttoc{toc}
。后者读取内容文件并开始一个新文件。以下重新定义\tableofcontents
仅调用\@starttoc{toc}
,并通过本地重新定义读取命令来禁用读取。
\makeatletter
\renewcommand*{\tableofcontents}{%
\begingroup
\let\@input\@gobble
\@starttoc{toc}%
\endgroup
}
\makeatother
答案2
\makeatletter
\newwrite\tf@toc
\immediate\openout\tf@toc\jobname.toc\relax
\makeatother
就是\tableofcontents
没有开始一个部分并输入toc文件。
答案3
除了使用shorttoc
包之外,您还可以简单地tocdepth
在前文开始时将计数器设置为 1(从而影响\tableofcontents
),并在正文开始时将其设置为 4。
\documentclass{book}
\usepackage{titletoc,titlesec}
\usepackage{lipsum}
\setcounter{secnumdepth}{3}
\titlecontents{partsection}[2.3em]
{} {\contentslabel{2.3em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsection}[5.5em]
{} {\contentslabel{3.2em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsubsection}[9.6em]
{} {\contentslabel{4.1em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partparagraph}[8.5em]
{} {\contentslabel{0em}} {} {\titlerule*[1pc]{.}\contentspage}
\begin{document}
\frontmatter
\setcounter{tocdepth}{1}
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]
\tableofcontents
\mainmatter
\setcounter{tocdepth}{4}
\chapter{A chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{}
\section{Section}
\lipsum[1]
\subsection{A subsection}
\lipsum[3]
\subsection{A second subsection}
\subsubsection{SubSubsection}
\paragraph{Paragraph}
\lipsum[4]
\section{Section 2}
\lipsum
\chapter{Second chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{}
\section{Section}
\lipsum[2]
\section{Another section}
\lipsum
\end{document}
答案4
我找到了另一个问题的答案:我实际上不需要,shorttoc
因为通过将\addtocontents{ptc}{\setcounter{tocdepth}{4}}
放入最后一个参数,\printcontents
我可以指定部分目录的深度。因此,我可以选择\setcounter{tocdepth}{1}
普通目录,但在章节目录中有更深的部分:
\documentclass{book}
\usepackage{titletoc,titlesec}
\usepackage{lipsum}
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{1}
\titlecontents{partsection}[2.3em]
{} {\contentslabel{2.3em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsection}[5.5em]
{} {\contentslabel{3.2em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partsubsubsection}[9.6em]
{} {\contentslabel{4.1em}} {} {\titlerule*[1pc]{.}\contentspage}
\titlecontents{partparagraph}[8.5em]
{} {\contentslabel{0em}} {} {\titlerule*[1pc]{.}\contentspage}
\begin{document}
\frontmatter
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]
\cleardoublepage
\tableofcontents
\mainmatter
\chapter{A chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{\setcounter{tocdepth}{4}}
\section{Section}
\lipsum[1]
\subsection{A subsection}
\lipsum[3]
\subsection{A second subsection}
\subsubsection{SubSubsection}
\paragraph{Paragraph}
\lipsum[4]
\section{Section 2}
\lipsum
\chapter{Second chapter}
\startcontents[chapters]
\printcontents[chapters]{part}{1}{\setcounter{tocdepth}{4}}
\section{Section}
\lipsum[2]
\section{Another section}
\lipsum
\end{document}