我正在将一些文本拆分成几个文件,因此有外部引用。我想以某种方式强调这些引用,以便打印,例如:“定理 7(来自 OtherPaper)”。由于有很多这样的引用,并且拆分不稳定,我希望有一种自动方法来实现这一点。到目前为止,我拥有的是:
\documentclass{article}
\usepackage{xcolor}
\usepackage{xr-hyper}
\usepackage[hypertex]{hyperref}
\begin{document}
\def\ifUnDefinedCs#1{\expandafter\ifx\csname#1\endcsname\relax} %Victor Eijkhout, "TeX by Topic", p.143
\newcommand{\myautoref}[1]{\ifUnDefinedCs{r@#1} {\pending{#1}}\else\autoref{#1}\fi}
\newcommand{\pending}[1]{\color{red}\autoref{#1} from "file.tex"}
% \externaldocument{file}[../file] %(A)
Using \myautoref{sec:vis} and \myautoref{sec:vis},...
% \externaldocument{file}[../file] %(B)
\end{document}
一旦\externaldocument{file}[../file]
发布,所有标签file.aux
都会立即添加,如果我没记错的话。因此,如果使用行 (A),则其上的引用在打印时与任何本地引用“看起来没有任何不同”。如果使用行 (B),则标签添加得太晚了,重复编译不会改变任何东西。
我的问题是:是否有可能强制执行“第二遍”,即激活无关的标签后他们的参考文献已经标记了吗?
答案1
我不确定这是 OP 的要求:该xr
包允许为外部文档指定标签前缀,比如说A-
。
有必要(以我的观点来看)首先检查该\r@A-#2
命令是否存在,如果不存在,\autoref{...}
则该引用被视为本地引用并被使用。
顺便说一句:\ifUnDefinedCs
这不是必需的,因为 LaTeX 核心\@ifundefined{}{}{}
已经提供了。
\documentclass{article}
\usepackage{xcolor}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument[A-]{extfile} %(A)
\makeatletter
\newcommand{\myautoref}[2][A-]{%
\@ifundefined{r@#1#2}{% Nope A-#2 isn't there
\@ifundefined{r@#2}{%
}{%
\autoref{#2}%
}%
}{%
{\pending{#1#2}}%
}%
}
\newcommand{\pending}[1]{\color{red}\autoref{#1} from "file.tex"}
\makeatother
\begin{document}
Using \myautoref{sec:vis} and \myautoref{sec:vis}, but \myautoref{localsection}
\section{Local section}\label{localsection}
\end{document}
扩展文件.tex
\documentclass{article}
\begin{document}
\section{A section} \label{sec:vis}
\end{document}