\subref 和 xr 可以一起工作吗?

\subref 和 xr 可以一起工作吗?

使用xr我可以交叉引用另一个文档中的标签。使用subcaption我可以引用子图(或类似图)。但如果我尝试将它们合并在一起,似乎它们无法相互识别:

a.tex:

\documentclass{article}
\usepackage{subcaption}
\begin{document}
\section{Main}
\begin{figure}
  \begin{subfigure}{0.5\textwidth}
  A
  \caption{}\label{fig:A}
  \end{subfigure}
  \begin{subfigure}{0.5\textwidth}
  B
  \caption{}\label{fig:B}
  \end{subfigure}
\caption{A figure}\label{fig}
\end{figure}
See \ref{fig}, panels \subref{fig:A} and \subref{fig:B}.
\end{document}

豐特克斯

\documentclass{article}
\usepackage{subcaption}
\usepackage{xr}
\externaldocument[A-]{a}
\begin{document}
\section{Main}
See \ref{A-fig}, panels \subref{A-fig:A} and \subref{A-fig:B}.
\end{document}

编译后a.texb.tex显示:

LaTeX Warning: Reference `sub@A-fig:A' on page 1 undefined on input line 7.


LaTeX Warning: Reference `sub@A-fig:B' on page 1 undefined on input line 7.

如果我将 改为\subref{A-fig:A}\ref{A-sub@fig:B}它似乎可以按预期工作。 是否可以修改 的定义\subref以使其与 兼容xr

答案1

问题是两者都在标签名称中添加了前缀。

您可以将 xr 前缀更改为后缀

\documentclass{article}
\usepackage{subcaption}
\usepackage{xr}
\usepackage{etoolbox}
\makeatletter
\patchcmd\XR@test{\XR@prefix#2}{#2\XR@prefix}{}{\fail}
\externaldocument[-A]{a}
\begin{document}
\section{Main}
See \ref{fig-A}, panels \subref{fig:A-A} and \subref{fig:B-A}.
\end{document}

另一种方法是修补子标题命令(在两个文档中!)以切换到后缀:

\usepackage{etoolbox}

\makeatletter
\patchcmd\subcaption@@label{sub@#2}{#2@sub}{}{\fail}
\patchcmd\subcaption@ref{sub@#2}{#2@sub}{}{\fail}
\makeatother

相关内容