在下面的 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 的子文档包。