![\subref 和 xr 可以一起工作吗?](https://linux22.com/image/457724/%5Csubref%20%E5%92%8C%20xr%20%E5%8F%AF%E4%BB%A5%E4%B8%80%E8%B5%B7%E5%B7%A5%E4%BD%9C%E5%90%97%EF%BC%9F.png)
使用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.tex
,b.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