\addcontentsline 不写入文件

\addcontentsline 不写入文件

我尝试按照第 2.3 节的指示制作自定义答案列表LaTeX 伴侣,第二版

我编写了以下代码来定义我的自定义列表:

\newcommand{\exerciseref}[1]{\hyperref[exercise#1]{Exercise #1}}
\newcommand{\declareexercise}[1]{\paragraph{Exercise #1} \label{exercise#1}}

\newcommand\l@answer[2]{\@dottedtocline{1}{1.5em}{2.3em}{\exerciseref{#1}}{\pageref{#1}}}
\newcommand\addanswer[1]{\addcontentsline{ans}{answer}{#1}}
\newcommand\listofanswers{\section*{Answers}\@starttoc{ans}}

该命令\declareexercise引入一个指向练习答案的标签,该命令\exerciseref使用\hyperref来引用由“\declareexercise”创建的标签。

根据同伴的说法,我首先定义命令\l@answer,它用于\@dottedtocline定义列表中出现的答案的外观。然后,我定义命令\addanswer,它指示 LaTeX 将内容行写入文件\jobname.ans。最后,我定义命令\listofanswers,它通过调用来启动列表\@starttoc

然后在我的文件中,我在文档开头的某处介绍该列表,并将答案添加到文档末尾的列表中,如下所示:

\listofanswers
some texts and some declaration of answers using \declareexercise...
\addanswer...

令我惊讶的是,结果列表只有一个以 开头的标题\section*{Answers}。当我检查 .ans 文件时,我发现它是空的。我确信我运行了 LaTeX 两次以上,目录是正确的。

什么问题?

答案1

一切正常。

你检查过文件内容吗.aux?它应该包含类似以下行

\@writefile{ans}{\contentsline ...

您是否检查过您的.ans文件未被锁定以进行写入?

还阅读日志文件,可能有一些注释。

答案2

我发现了两个问题。

一个问题:命令中使用的级别\addcontentsline不应该是“answer”,因为我没有定义它。否则,LaTeX 会将 section*2 写入命令\contentsline。但是,我不太明白为什么未定义的级别“example”在同伴的示例中可以正常工作:

\newcommand\ecaption[1]{\addcontentsline{xmp}{example}{#1}}
\makeatletter 
\newcommand\listofexamples{\section*{Comments}\@starttoc{xmp}}
\newcommand\l@example[2]{\par\noindent#1,~\textit{#2}\par} 
\makeatother

另一个问题是一个错误。我拼错了用于创建列表的页面样式名称中的一个字母。因此 LaTeX 不知何故忽略了整个页面,并且没有向 .ans 文件写入任何内容。

相关内容