\externaldocument 的特殊 \cref 显示

\externaldocument 的特殊 \cref 显示

我使用 cleveref 指向我的文档中的方程式,以及指向单独文件中的技术附录(由 \externaldocument 加载)

设置

假设第一个文件在main.tex,被编译等等。

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

另一个文件引用了这个,编译后main

\documentclass{article}
\usepackage[capitalise,noabbrev]{cleveref}
\crefname{equation}{}{}
\usepackage{xr}
\externaldocument[main:]{main} %Loads a doc for external
\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} and \cref{main:sec:sub}\\
     local eq ref: \cref{eq:bc}, external ref: \cref{main:eq:ab}
\end{document}

问题: 上述方法应该可行,但在阅读时我无法知道引用是我的情况下的外部(技术附录)还是内部链接。

如果文件是外部的,是否有任何方法可以\cref有条件地更改文本(例如,设置某些内容,以便如果引用的标签以 开头,则在标题开头main:添加等)。该技术应该适用于章节、命题、图表,但可能不适用于具有此设置形式的方程式。理想情况下,这会显示为或... 无论哪种方式都行,但我认为后者更清楚一些。Main(1)Main (1)(Main 1)


扩展xr-hyperxr-hyper要使它与相关和包 一起工作,需要做一些不同的事情hyperref。我不关心文档之间的超链接是否真的起作用,测试是:

在文件中main.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}

答案1

在此处输入图片描述

这会将相同的前缀(例如main:)添加到 cleverref 的 able 类型,与标签使用的前缀相同,因此引用是类型main:section而不是section,然后您可以使用

\Crefname{main:section}{\TR-section}{\TR-main-sections}%

指定该类型的格式。

\documentclass{article}
\usepackage{cleveref}
\usepackage{xr}
\makeatletter
\long\def\XR@test#1#2#3#4\XR@{%
  \ifx#1\newlabel
    \xr@cref#2@cref\relax#3\@nil
  \else\ifx#1\@input
     \edef\XR@list{\XR@list#2\relax}%
  \fi\fi
  \ifeof\@inputcheck\expandafter\XR@aux
  \else\expandafter\XR@read\fi}

\def\xr@@cref{@cref}
\def\xr@cr@add#1{{[\XR@prefix\@gobble#1}}
\def\xr@cref#1@cref#2\relax#3\@nil{%
\def\tmp{#2}%
\ifx\tmp\xr@@cref
  \edef\tmp{\noexpand\newlabel{\XR@prefix#1@cref}{\xr@cr@add#3}}%
  \tmp
\else
 \newlabel{\XR@prefix#1}{#3}%
\fi
}
\makeatother
  \protected\def\TR{TR}% hide from lowercase
 \Crefname{main:section}{\TR-section}{\TR-main-sections}%
\externaldocument[main:]{maindoc} %Loads a doc for external
\begin{document}
    \section{My section}\label{sec:mysection}
    Linking to \cref{main:sec:mytitle} or internally \cref{sec:mysection}
\end{document}

相关内容