正确排序 xr-hyper、hyperref 和 cleveref

正确排序 xr-hyper、hyperref 和 cleveref

我想使用\cref、外部文档和超链接。获取以下文件,对其进行标记main1.tex并编译:

\documentclass{article}
\usepackage[capitalise,noabbrev]{cleveref}
\crefname{equation}{}{}     
\begin{document}
    \section{MyTitle}\label{sec:mytitle}            
\begin{equation}
A = b\label{eq:ab}
\end{equation}
  \end{document}

现在,获取另一个引用它的文件:

\documentclass{article}
\usepackage{xr-hyper}
%\usepackage{hyperref} %Want to turn this on!!!!!
\usepackage[capitalise,noabbrev]{cleveref}
\externaldocument[main:]{main1} %If you comment this off, can turn on the hyperref

\begin{document}
    \section{My section}\label{sec:mysection}
       \begin{equation}
       B = C\label{eq:bc}
       \end{equation} 
     local ref: \cref{sec:mysection}, external ref: \cref{main:sec:mytitle}\\
     local eq ref: \cref{eq:bc}, external ref: \cref{main:eq:ab}\\
\end{document}

如果您编译上述代码,它将正常工作并生成对本地和外部文件的正确引用。但是,如果您打开hyperref,它不会编译。相反。如果您注释掉\externaldocument并打开hyperref,它就可以正常工作(当然,它找不到删除引用)。

问题: 我想将所有这些一起使用,以便我可以在我的 PDF 中获取超链接,用于\cref引用,并加载外部文档。我该如何实现它?还是我遗漏了一些显而易见的东西?

我不需要文档本身之间的超链接,所以如果这是问题的根源并且我可以关闭它,那么就没问题。

答案1

所有这些包都改变了文件中引用的写入方式.aux。正确的加载顺序是

\usepackage{xr-hyper}
\usepackage{hyperref}
\usepackage{cleveref}

但主文档和外部文档都需要这个。因此

外部文件main1.tex

\documentclass{article}

\usepackage{xr-hyper}
\usepackage{hyperref}
\usepackage[capitalise,noabbrev]{cleveref}
\crefname{equation}{}{}     

\begin{document}

\section{MyTitle}\label{sec:mytitle}            

\begin{equation}
  A = b\label{eq:ab}
\end{equation}

\end{document}

和主要文件

\documentclass{article}

\usepackage{xr-hyper}
\usepackage{hyperref}
\usepackage[capitalise,noabbrev]{cleveref}
\externaldocument[main:]{main1}

\begin{document}

\section{My section}\label{sec:mysection}

\begin{equation}
  B = C\label{eq:bc}
\end{equation} 

Local ref: \cref{sec:mysection}, external ref: \cref{main:sec:mytitle}

Local eq ref: \cref{eq:bc}, external ref: \cref{main:eq:ab}

\end{document}

将在任何地方提供超链接。

相关内容