传递给 \addcontentsline 的参数

传递给 \addcontentsline 的参数

根据此主题 包含传递参数的文件

它应该很简单

\def\thetitle{longtitle}
\include{text}

它确实运行得很好,但不适用于目录。

在“文本”文件中,我有一行手动将标题添加到我的目录中,并且所有页面都引用最后添加的长标题

\phantomsection
\addcontentsline{toc}{chapter}{\bf \thetitle}

在主文件中

\documentclass[10pt,a4paper]{report}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

\tableofcontents

\def\thetitle{title1}
\include{test}

\def\thetitle{title2}
\include{test}
\end{document}

目录包含两次 title2,并且都指向同一页面,即第二个页面。

答案1

该文件test被包含两次:

\begin{document}

\tableofcontents

\def\thetitle{title1}
\include{test} % first

\def\thetitle{title2}
\include{test} % second
\end{document}

\addcontentsline命令将其操作写入.aux文件。在本例中,它进入.aux包含文件的文件中test.aux

通过调用\include{test}两次,第二条\include语句将覆盖test.aux。因此,最后,将仅包含第二次调用(带有)test.aux的数据。写入文件时,读取 两次,您将获得带有两次的内容条目。\include{test}title2.toctest.auxtitle2

因此 的文件\include必须是唯一的,同一个文件不能在一条语句中使用多次\include。如果要两次包含某个文件,则必须求助于\input。或者可以使用操作系统层的技巧,例如将文件链接到不同的名称以获取 的唯一名称\include

相关内容