我尝试按照第 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 文件写入任何内容。