生成 .toc 文件但不生成 ToC

生成 .toc 文件但不生成 ToC

问题:我想要生成一个.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}

相关内容