我想使用subfiles
和xr
作为外部参考来撰写论文。我使用是subfiles
因为这样我可以单独编写章节而不必编写整个论文。我的问题是,由于缺少辅助文件,不同子文件之间的交叉引用不起作用。
主文档输出中的交叉引用是正确的,但如果我编译一个子文件,那么对另一个子文件的交叉引用就只是问号。在构建日志中,它说
软件包 xr 警告:没有文件 main.aux。
我使用的编辑器是 Ubuntu 20.04 上的 Gummi,在编译选项中我选择了TeXLive 与 pdfTeX我也尝试选择TeXLive 与 XeteX,TeXLive 与 LuateX, 和延迟Xmk,但都没有解决问题。
据我从评论中理解,某些东西(Gummi?).aux
在编译后删除了文件。
当我从终端编译时(使用pdfatex
或latexmk
),所有.aux
文件都会被创建,因此我也会在子文件中获得交叉引用。 (但我不想每次进行影响交叉引用的更改时都从终端进行编译。我使用 Gummi 的原因是它具有即时实时预览功能,因此我不必每三十秒按一次编译按钮。)
在哪里以及如何更改 Gummi 或任何删除文件的程序的设置以防止其执行此操作?
答案1
很少有subfiles
比 LaTeX 内核的\include
/\includeonly
机制更好的解决方案。¹
在这种情况下,我认为放弃 肯定会对你更有利subfiles
。相反,你的各个章节将删除除 和 之间的所有内容\begin{document}
。主文档将为每个名为 的文件\end{document}
加载 章节(请注意扩展名\include{FILE}
FILE.tex
必须语句中可以省略\include
)。最后,在主文档的前言部分,你可以输入\includeonly{FILE}
来表示只FILE
应该排版。当你运行整个文档时(不带\includeonly
——我通常会注释掉整\includeonly
行),LaTeXaux
将为每个加载的文件创建一个文件\include
,并保留页码和\label
定义,然后将它们全部读入。
因此你将拥有如下主文件:
\documentclass{thesis}
...
% \includeonly{analysis} % uncomment this line to only run analysis
\begin{document}
\include{frontmatter}
\include{introduction}
\include{methods}
\include{analysis}
\appendix
\include{appendices}
\end{document}
包含如下文件:
\chapter{Analysis}
Lots of text here
我建议将诸如、等内容\maketitle
也\tableofcontents
集中到一个文件中。诸如\frontmatter
、\mainmatter
或\endmatter
之类的命令\appendix
应位于主文件中。
您将始终针对主文件而不是各个章节运行 LaTeX。您的 IDE 应该具有某种机制,允许您在包含的文件中或可能为整个项目指定主文件。例如,在 emacs 中,在文件中放入以下内容表示主文件是../ltxbook.tex
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../ltxbook"
%%% End:
请注意,在生成索引²时,您需要在运行 makeindex 之前运行整个文件,因为该.idx
文件将不包含\index
被省略的章节的条目\includeonly
。
我承认我可能存在选择性偏见,因为我接触到的大多数
subfiles
人都无法让它发挥作用,但我还没有看到令人信服的论据。我怀疑很多使用 的subfiles
都是对整个\include
机制不了解的用户的货物崇拜。或者任何其他使用 makeindex 的工具,例如一些词汇表工具