我在使用 titletoc 和 multitoc 时遇到了一个麻烦的问题。简而言之,代码如下所示:
分数维:
\documentclass{report}
\usepackage{listings}
\usepackage{titletoc}
\usepackage[toc,page]{appendix}
\contentsuse{lstlisting}{lol}
\contentsuse{lstlisting}{apl}
\titlecontents{lstlisting}[2em]
{\addvspace{0.25pc}}
{\textbf{Code \thecontentslabel} }
{}
{\titlerule*[0.5em]{$\cdot$}\contentspage}
[]
\makeatletter
\providecommand{\phantomsection}{}
\newcommand\appendixlistingname{\lstlistlistingname}
\newcommand{\listofappendixlistings}{%
% Applying the same trick as listings does with \lstlistoflistings: Modifying \@starttoc such that it can load only .apl files
\begingroup
\let\@starttoc@orig\@starttoc%
\renewcommand{\contentsname}{\appendixlistingname}
\renewcommand{\@starttoc}[1]{%
\@starttoc@orig{apl}%
}%
\phantomsection
\addcontentsline{toc}{section}{\appendixlistingname}
\tableofcontents% Calling \tableofcontents with the `.apl` file instead of `.toc`
\endgroup
}
\newcommand{\appendixFix}{%
\setcounter{lstlisting}{0}%
\@ifundefined{theHlstlisting}{%
}{%
\renewcommand{\theHlstlisting}{appendix}
}%
\write\@auxout{%
\string\let\string\latex@tf@lol\string\tf@lol% Store the original `\tf@lol` file handle
\string\let\string\tf@lol\string\tf@apl%
}%
}{}{}
\makeatother
% Backup
\let\backupCommand\lstlistoflistings
\let\backupCommandZ\listofappendixlistings
%\usepackage[toc]{multitoc}
%\renewcommand*{\multicolumntoc}{2}
%\setlength{\columnseprule}{0.5pt}
\begin{document}
\chapter{YOLO}
\backupCommand
\begin{lstlisting}[caption=Test]
Some code
\end{lstlisting}
\appendixFix
\begin{appendices}
\backupCommandZ
\begin{lstlisting}[caption=Test2]
Some code
\end{lstlisting}
\end{appendices}
\end{document}
如果没有 multitoc,它会为每个部分(主要部分和附录)生成一个列表:
但是当我取消注释 3 个 multitoc 行时,两个部分的列表都损坏了。
有什么解决办法吗?
谢谢
附言:我检查了存储参考资料的两个文件(主要的.lol,附录的apl)在编译后是否有预期的内容。
主要.lol
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {5.1}Exemple des fonctionnalités de Lodash}{30}{lstlisting.5.1}%
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {5.2}Axios : Exemple d'utilisation d'une POST request}{32}{lstlisting.5.2}%
主程序
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {B.1}{\ignorespaces \ignorespaces {Exemple d'une ressource information avec notre norme}\relax }}{97}{lstlisting.appendix}%
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {D.1}Point d'entrée d'une application, sur base de Yargs}{111}{lstlisting.appendix}%
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {D.2}Exemple d'une implémentation d'une commande "Yargs"}{111}{lstlisting.appendix}%
\defcounter {refsection}{0}\relax
\contentsline {lstlisting}{\numberline {D.3}Implémentation de la recherche par \glspl {tag}}{112}{lstlisting.appendix}%
答案1
感谢 Ijon Tichy(来自 LaTeX.org),我知道了这个错误背后的原因:
几年前,我曾向软件包作者发送过一个错误报告,因为 multitoc 禁用了除 toc、lot 和 lof 之外的所有文件的 @starttoc。他回答说,他不再支持该软件包,并建议不要再使用它。
对于任何感兴趣的人,这是我的解决方案:
\usepackage{multicol}
\newcommand*{\multicolumntoc}{2}
\setlength{\columnseprule}{0.5pt}
\makeatletter
\newcommand\beautifultableofcontents{%
\begin{multicols}{\multicolumntoc}[\section*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}]%
\@starttoc{toc}%
\end{multicols}%
}
\makeatother
可以像这样调用:
\beautifultableofcontents