\include 和 \hyperref 包之间的冲突

\include 和 \hyperref 包之间的冲突

在下面的 MWE 中,pdflatex mwe ; pdflatex mwe当 mwe.tex 为

\documentclass{amsart}
\usepackage{hyperref}
\includeonly{}
\begin{document}
\include{refFile}
Blah blah
\ref{eq:label}
\end{document}

refFile.aux文件由以下文件生成refFile.tex

\documentclass{amsart}
\begin{document}
\begin{align}
\label{eq:label}
x=y
\end{align}
\end{document}

问题的根源在于\include命令。如果注释掉该命令,代码可以编译,但命令当然\ref{eq:label}不起作用。

有人可以告知发生了什么事,以及如何解决这个问题吗?

非常感谢,Leo

答案1

问题似乎是您正在将mwe.tex和编译refFile.tex为两个单独的文档。这不是\include应该使用的方式。所有包含的文档都应仅包含实际的文档内容,而不应包含\documentclass\usepackage\begin{document}。当我尝试将两个文件编译为单独的文档时,会弹出以下错误:

Runaway argument?
{\@firstoffive }\fi  \end {document}
! File ended while scanning use of \Hy@setref@link.

因此,您应该重写您的文件,使其mwe.tex成为具有完整文档结构的主文档:

\documentclass{amsart}
\usepackage{hyperref}
%\includeonly{}

\begin{document}
\include{refFile}
Blah blah
\ref{eq:label}
\end{document}

所包含的子文件refFile.tex如下所示:

\begin{align}
\label{eq:label}
x=y
\end{align}

请注意,这\includeonly{}不会包含任何子文件,因此会留下未定义的引用。如果删除该行,则生成的文档将正确引用您的方程式。

如果你真的想包含完整的文档,请查看CTAN 的子文档包

相关内容