我使用 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-hyper
xr-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}