![将简短的目录条目添加到目录条目中,反之亦然](https://linux22.com/image/388656/%E5%B0%86%E7%AE%80%E7%9F%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E6%9D%A1%E7%9B%AE%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%9B%AE%E5%BD%95%E6%9D%A1%E7%9B%AE%E4%B8%AD%EF%BC%8C%E5%8F%8D%E4%B9%8B%E4%BA%A6%E7%84%B6.png)
从以下答案中获得重大启发:
隐藏 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。