将简短的目录条目添加到目录条目中,反之亦然

将简短的目录条目添加到目录条目中,反之亦然

从以下答案中获得重大启发:

隐藏 toc 中的 toc,以及隐藏 shorttoc 中的 shorttoc

我制作了以下代码:

\documentclass{memoir}

\newcommand{\shorttoc}{%
\renewcommand*{\contentsname}{Short Contents}
\begingroup%
\def\inshorttoc{}%
\tableofcontents*%
\addtocontents{toc}{\string\ifdefined\string\inshorttoc\string\else}%
\addcontentsline{toc}{chapter}{\contentsname}%
\addtocontents{toc}{\string\fi}%
\endgroup%
}

\newcommand{\toc}{%
\renewcommand*{\contentsname}{Contents}
\begingroup%
\def\intoc{}
\tableofcontents*
\addtocontents{toc}{\string\ifdefined\string\intoc\string\else}%
\addcontentsline{toc}{chapter}{\contentsname}%
\addtocontents{toc}{\string\fi}%
\endgroup%
}
\makeatother

\usepackage{mwe}

\begin{document}
\shorttoc

\cleardoublepage

\toc

\blinddocument
\end{document}

它应该将短内容条目放入长目录中,反之亦然。但在更新我的 TeX live 发行版后,代码抛出了错误:

Extra }, or forgotten \endgroup. \@writefile{toc}{\fi}
Extra }, or forgotten \endgroup. \@writefile{toc}{\fi}

但代码在旧发行版上编译时没有错误。

答案1

研究 LaTeX 的较新版本时,我发现 @\writefile 命令略有变化(请参阅 2018-12-01 版 LaTeX2e 源文档第 269-271 页,链接为https://www.latex-project.org/help/documentation/source2e.pdf) 来解决一些虚假空格的问题。使用 @writefile 命令的旧定义解决了该问题,它是:

\long\def\@writefile#1#2{%
  \@ifundefined{tf@#1}\relax
    {\@temptokena{#2}%
     \immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
    }%
}

适当的解决方案将避免重新定义@writefile。

相关内容