我正在处理一个较大的 Latex 文档(我的论文),其中每个章节都有自己的 .tex 文件。出于各种原因,我有两个主文件:一个包含所有章节,另一个我会随时间修改以编译我当时正在处理的任何章节。
在大多数情况下,各章都是独立的,解决引用问题并不是什么大问题。但是,有少数重要的结果需要跨章引用,而且有几次我需要引用另一章,即In Chap.~\ref{ch:other_chapter}, we discuss X, Y, and Z.
。照原样,这当然会导致编译后的文档中出现“第 ??” 章。我真的很想能够将单个章节的 PDF 交给其他人审阅,而无需一堆“??”引用(而不必等待整个文档编译完成)。
所以...假设只有少数这样的引用,以便可以手动完成此操作,并且假设我不介意它们的值不是相当对的,有没有一种简单的方法可以手动设置我的单章主文件中的标签值,以便我编译的文档 a) 没有一堆未定义的引用,并且 b) 不包含只是为了填充引用的空章节。
我尝试过类似
% the chapter I'm currently working on
\include{the_chapter}
% so I can reference the next chapter without having to compile it
\setcounter{chapter}{2}
\label{ch:other_chapter}
但随后\ref{ch:other_chapter}
它自身又解析为之前章节的一个节。
我不想这样做:
\include{the_chapter}
\chapter{The other chapter}
\label{ch:other_chapter}
因为这实际上会在文本中生成新的章节、目录等。
答案1
我认为您不必担心这个问题,因为一旦您准备好一切,它就会被解决。
如果你真的想手动设置引用,你可以在序言中说
\makeatletter
\newcommand{\manuallabel}[2]{\def\@currentlabel{#2}\label{#1}}
\makeatother
然后使用
\manuallabel{ch:other_chapter}{2}
这样\ref{ch:other_chapter}
就会打印“2”。在第二个参数中,你可以输入任何你想要的内容。
答案2
您遇到的问题很常见,很多比手动修复引用更好的解决方案。使用一个主文件,您可以\includeonly{chap-foo}
只编译一个章节。这样,引用其他章节会很好。
这要求其他章节在过去已经编译过。指向的内容由文件\ref{foo}
中定义的内容决定。因此,只要您不会过于频繁地删除所有文件,这是一种交叉引用未编译章节的好方法。因为即使您没有编译,仍会被读取,因此它知道被编译的应该是什么样子。.aux
\label{foo}
.aux
bar.tex
bar.aux
latex
\ref
\label
bar.tex