从以下答案中获得重大启发:
隐藏 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。