我正在写一篇有在线附录的论文。论文和附录相互引用了图表。我希望能够将每个文档编译为单独的 .pdf 文件并保留图表引用。该subfiles
软件包似乎可以很好地完成这项工作。但是,有一个小缺陷,当我使用该caption
软件包进行修改(例如,修改图表编号的显示方式)时,它似乎会遇到困难。实际上,如果我也加载该caption
软件包,那么附录中的超链接将不再正常工作。当我编译文档时,我收到以下警告:
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
不幸的是,如果我重新运行编译,它会破坏其他引用。下面是一个最小的工作示例,其中更具体解释了我试图遵循的过程。
主文本
\documentclass{report}
\usepackage{subfiles}
\usepackage{xr-hyper}
\usepackage{hyperref}
\usepackage[notablist,nofiglist,nomarkers]{endfloat}
\usepackage{caption}
\begin{document}
\subfile{Body.tex}
\setcounter{page}{1}
\setcounter{figure}{0}
\setcounter{postfigure}{0}
\renewcommand{\thepostfigure}{\Alph{section}.\arabic{postfigure}}
\renewcommand{\thefigure}{\Alph{section}.\arabic{figure}}
\subfile{Appendix.tex}
\end{document}
身体.tex
\documentclass[Main.tex]{subfiles}
\begin{document}
\section{Section 1}
\label{sec:Section1}
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Body Figure 1}
\label{body_fig1}
\end{figure}
As I show in \autoref{fig1} in \autoref{sec:Online_Appendix} of the appendix ...
\processdelayedfloats
\end{document}
附录.tex
\documentclass[Main.tex]{subfiles}
\begin{document}
\pagebreak
\appendix
\section{Online Appendix}
\label{sec:Online_Appendix}
My discussion in \autoref{sec:Section1} is informed by \autoref{fig1} and \autoref{fig2} and \autoref{fig3}.
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 1}
\label{fig1}
\end{figure}
\pagebreak
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 2}
\label{fig2}
\end{figure}
\pagebreak
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 3}
\label{fig3}
\end{figure}
\end{document}
工作流程
- 我先编译一下
Main.tex
。 - 然后我注释掉
\subfile{Body.tex}
并重新编译Main.tex
。这会为附录生成正确的文本,但单击时指向图表的超链接会转到文档中的错误位置。这就是我收到有关标签已更改的警告的地方。 - 如果我
Main.tex
再次重新编译,附录中图形的超链接现在有效,但现在对该部分的引用Body.tex
显示为??
评论
- 如果我没有
caption
启用该包,所有这些都可以正常工作。 - 如果我只是尝试单独编译
Body.tex
或Appendix.tex
,交叉引用就无法正常工作,这就是我使用带有多个单独编译的过程的原因Main.tex
。
答案1
您缺少来自https://tex.stackexchange.com/a/378163/36296。如果您希望在子文件中引用另一个子文件,则必须指定此外部文档:
\documentclass{report}
\usepackage{subfiles}
\usepackage{xr-hyper}
\usepackage{hyperref}
\usepackage[notablist,nofiglist,nomarkers]{endfloat}
\usepackage{xstring}
\usepackage{caption}
\begin{document}
\subfile{body.tex}
\setcounter{page}{1}
\setcounter{figure}{0}
\setcounter{postfigure}{0}
\renewcommand{\thepostfigure}{\Alph{section}.\arabic{postfigure}}
\renewcommand{\thefigure}{\Alph{section}.\arabic{figure}}
\subfile{appendix.tex}
\end{document}
% !TeX root = body.tex
\documentclass[main.tex]{subfiles}
\IfEq{\jobname}{\detokenize{main}}{}{%
\externaldocument{appendix}
}
\begin{document}
\section{Section 1}
\label{sec:Section1}
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Body Figure 1}
\label{body_fig1}
\end{figure}
As I show in \autoref{fig1} in \autoref{sec:Online_Appendix} of the appendix ...
\processdelayedfloats
\end{document}
% !TeX root = appendix.tex
\documentclass[main.tex]{subfiles}
\IfEq{\jobname}{\detokenize{main}}{}{%
\externaldocument{body}
}
\begin{document}
\pagebreak
\appendix
\section{Online Appendix}
\label{sec:Online_Appendix}
My discussion in \autoref{sec:Section1} is informed by \autoref{fig1} and \autoref{fig2} and \autoref{fig3}.
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 1}
\label{fig1}
\end{figure}
\pagebreak
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 2}
\label{fig2}
\end{figure}
\pagebreak
\begin{figure}
\centering\rule{1cm}{1cm}
\caption{Appendix Figure 3}
\label{fig3}
\end{figure}
\end{document}
由于子文件循环相互依赖,第一次编译的编译顺序可能有点棘手,但编译主体、附录、主体、附录应该可以。