![与其他文件中的定理的交叉引用](https://linux22.com/image/473077/%E4%B8%8E%E5%85%B6%E4%BB%96%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AE%9A%E7%90%86%E7%9A%84%E4%BA%A4%E5%8F%89%E5%BC%95%E7%94%A8.png)
非常简单的例子。假设我有两个文件:
# first.tex:
\documentclass[acmtog,anonymous,review]{acmart}
\begin{document}
\section{}\label{sec:first}
\begin{theorem}\label{thm:first}
\end{theorem}
\end{document}
和
# second.tex:
\documentclass[acmtog,anonymous,review]{acmart}
\usepackage{xr}
\externaldocument{first}
\begin{document}
\section{Proofs of \autoref{sec:first}}
\begin{theorem}
\end{theorem}
\end{document}
我想我想要实现的目标很明显:我想在 second.tex 中有一个标题为“第 1 节的证明”的部分。出于某种原因,这行不通。我收到警告:软件包 xr 警告:输入第 4 行无文件 first.aux 标签未导入。。 但为什么?
我还想在 second.tex 中拥有一个类似于定理的环境,例如“\autoref{thm:first} 的证明”。我该如何获得它?
答案1
为了实现这一目标,您必须处理许多问题。
首先,鉴于您报告的错误(“Package xr 警告:没有文件 first.aux 标签未导入。”),@DavidCarlisle 是正确的(像往常一样),您缺少文件first.aux
。因此,您必须first.tex
首先运行 latex,这将创建first.aux
包含要导入的标签的文件。
掌握了这些后,如果您在second.tex
标签上运行 latex,则将导入这些标签,但您将获得许多“多次定义”的标签,因为acmart
设置了许多内部标签(用于目录、总页数等),并且这些标签在两个文档之间必然相同,因此会发生冲突。因此,您可以使用前缀来导入标签first.aux
(可选参数\externaldocument
):
\externaldocument[F-]{first}
(F-
表示“第一个”,但您喜欢任何前缀)。
然后您可以引用通过向标签添加前缀second.tex
而导入的标签,例如。first
F-sec:first
此外,acmart
将章节标题大写,因此如果您使用\section{Proofs of \autoref{F-sec:first}}
,您将收到警告“第 1 页上的引用‘F-SEC:FIRST’未定义”。发生的情况是标签本身与标题一起大写,因此找不到标签。 acmart
用于textcase
该作业,它提供\NoCaseChange
在这种情况下保护材料片段的功能。但\autoref
事情有点复杂,因为如果您将其包装在\NoCaseChange
引用名称中,则将保持小写。我认为这里最简单的方法是只使用标准引用:
\section{Proofs of section~\NoCaseChange{\ref{F-sec:first}}}
此外,使用\NoCaseChange
会报错“PDF 字符串中不允许使用令牌”。您可以通过本地禁用生成书签来hyperref
解决这个问题:\NoCaseChange
\pdfstringdefDisableCommands{%
\renewcommand{\NoCaseChange}[1]{#1}%
}
最后,由于acmart
加载hyperref
,为了获取到其他文档的正确超链接,您应该加载xr-hyper
(一只鸟告诉我这在未来可能不再需要,但目前仍然需要)。
把东西放在一起。first.tex
:
\documentclass[acmtog,anonymous,review]{acmart}
\begin{document}
\section{}\label{sec:first}
\begin{theorem}\label{thm:first}
\end{theorem}
\end{document}
second.tex
:
\documentclass[acmtog,anonymous,review]{acmart}
\usepackage{xr-hyper}
\externaldocument[F-]{first}
\pdfstringdefDisableCommands{%
\renewcommand{\NoCaseChange}[1]{#1}%
}
\begin{document}
\section{Proofs of section~\NoCaseChange{\ref{F-sec:first}}}
\begin{theorem}
\end{theorem}
\end{document}
将导致: