我的问题与所问的问题非常相似这里。此外,我找到了一个解决方案\ref
这里。但是我找不到解决方案\cref
。
设置:我有一个包含许多章节的大文件,其中章节、环境和方程式之间有许多引用。引用是通过包创建的\cref
,通常包含超链接hyperref
。
问题:大多数时候,我只想在我的 pdf 中包含某些章节,但仍希望参考资料能够起作用。
我的想法:我将.aux
完整版本的文件存储在文件中full.aux
。然后我使用xr
包将其包含进去。到目前为止,这种方法效果很好,我的参考资料可以正确显示。但是(当然)没有地方引用超链接,所以它们只是跳转到文档的开头。
我的问题是:是否可以完全停用这些外部超链接,同时保留内部超链接?对我来说,使用\cref*
没有意义,因为这也意味着更改整个文档。
这是一个简单的例子。这是一份完整的文档。
全文 \documentclass{文章} \usepackage{hyperref} \usepackage{cleveref} \usepackage{xr} \externaldocument{完整} \开始{文档} 首页\新页 第二页: \开始{方程} a=b \label{eq:第一个方程} \end{方程} \开始{方程} c=d\label{eq:第二个方程} \end{方程} \新一页 \cref{eq:第一个方程} \cref{eq:第二个方程} \结束{文档}
这就是我的主要文档。
主文本 \documentclass{文章} \usepackage{hyperref} \usepackage{cleveref} \usepackage{xr} \externaldocument{完整} \开始{文档} 首页\新页 第二页: \开始{方程} a=b \label{eq:第一个方程} \end{方程} \新一页 \cref{eq:第一个方程} \cref{eq:第二个方程} \结束{文档}
这就是我想要的工作方式,但没有明确使用\cref*
全文 \documentclass{文章} \usepackage{hyperref} \usepackage{cleveref} \usepackage{xr} \externaldocument{完整} \开始{文档} 首页\新页 第二页: \开始{方程} a=b \label{eq:第一个方程} \end{方程} \新一页 \cref*{eq:第一个方程} \cref{eq:第二个方程} \结束{文档}
答案1
经过进一步的研究,我发现,上述问题的任何可能解决方案都意味着重新定义 和 中的标准命令xr
。cleveref
这似乎不是解决问题的优雅方法。
因此,我想出了以下解决方案:我\externaldocument{full}
用替换\externaldocument[ext:]{full}
并创建了我自己的引用命令\myref
,它的作用相当于\cref
内部引用和\cref*{ext:#referencename}
内部找不到的引用。
这不是对我的问题的明确回答,但可能是解决问题更优雅的方法。
这是我的最小示例的完整解决方案。
\documentclass{文章} \usepackage{xr} \usepackage{hyperref} \usepackage{cleveref} \externaldocument[ext:]{完整} \制作字母 \newcommand\myref[1]{ \@ifundefined{r@#1}{ \cref*{ext:#1} }{ \cref{#1} } } \makeatother \开始{文档} 首页\新页 第二页: \开始{方程} a=b \label{eq:第一个方程} \end{方程} \新一页 \myref{eq:第一个方程}\quad \myref{eq:第二个方程} \结束{文档}