子文件和字幕包之间的冲突

子文件和字幕包之间的冲突

我正在写一篇有在线附录的论文。论文和附录相互引用了图表。我希望能够将每个文档编译为单独的 .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}

工作流程

  1. 我先编译一下Main.tex
  2. 然后我注释掉\subfile{Body.tex}并重新编译Main.tex。这会为附录生成正确的文本,但单击时指向图表的超链接会转到文档中的错误位置。这就是我收到有关标签已更改的警告的地方。
  3. 如果我Main.tex再次重新编译,附录中图形的超链接现在有效,但现在对该部分的引用Body.tex显示为??

评论

  • 如果我没有caption启用该包,所有这些都可以正常工作。
  • 如果我只是尝试单独编译Body.texAppendix.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}

由于子文件循环相互依赖,第一次编译的编译顺序可能有点棘手,但编译主体、附录、主体、附录应该可以。

相关内容