使用 includeonly 和 endfloat 时跨 .tex 文档引用图形

使用 includeonly 和 endfloat 时跨 .tex 文档引用图形

我希望有一个文档Main.tex引用两个子文档中的内容,Doc1.tex并且可以Doc2.tex通过\include{}和配置为仅将其中一个特定文档中的内容编译为 PDF。根据这个答案到:将一个 latex 文档拆分为两个包含参考文献的 pdf 输出!,我可以让基本功能正常工作。但是,当我使用该endfloat包时,功能就崩溃了。下面是一个最小的工作示例。如果我:

  1. 首先Main.tex使用\includeonly{}注释掉的命令进行编译。

  2. 然后重新编译并Main.tex从中删除注释\includeonly{}

但是,一旦我删除注释以加载包endfloat,我就失去了引用图形的能力Doc2.tex- 相反,参考文献只会出现??在编译后的 PDF 中。

主文本

\documentclass{article}
% \usepackage[notablist,nofiglist,nomarkers]{endfloat}  %% places all figures and tables at the end.

% \includeonly{Doc1}

\begin{document}

\include{Doc1}

\include{Doc2}

\end{document}

文档1.tex

As I show in Figure \ref{fig1} in Doc2 ...

Doc2.tex

\begin{figure}
\centering\rule{1cm}{1cm}
\caption{This is a figure}
\label{fig1}
\end{figure}

答案1

这个问题可以拆分成两个部分:

  • 分别编译这两个部分。我推荐subfiles使用 - 它允许您轻松地与子文件共享主文件的前言

  • 子文件之间的交叉引用. 随着xr-hyper包,您可以从另一个文件导入标签。诀窍是只将其用于子文件的编译,而不是在编译主文件时使用,这就是为什么以下参考资料中包含了对编译作业名称的测试。

如何使用它们的示例可以在以下位置找到交叉引用问题

答案2

如果正如您在评论中提到的那样,数字可以位于每个子文件的末尾,那么这可能会起作用:

\processdelayedfloats每个子文档的末尾。

不进行编译\includeonly直到一切稳定然后使用\includeonly

答案3

有趣的是,我发现我原来的脚本实际上就像给定的那样工作如果我使用 TeXShop 编译它们,但如果我像以前一样使用 Sublime LaTeXing 编译它们,则不会。我仍然不完全确定其中的原因。但在 TeXShop 中,成功的工作流程是:

  1. 编译Main.tex
  2. 再次编译Main.tex,不做任何更改
  3. 取消注释includeonly{ },然后Main.tex再次编译。

感谢@Ulrike Fischer 的回答,它让我尝试了这些思路的变化,首先完全按照 Ulrike 的回答所建议的那样,然后意识到如果我切换编译器,Ulrike 的基本程序甚至可以在我发布的原始脚本上运行。

相关内容