使用多个文档进行交叉引用

使用多个文档进行交叉引用

我正在尝试解决在生成大型文档并将其拆分为较小文档时出现的问题。基本结构如下。

主文档(main.tex)包含整个项目的格式信息,以及各章的单独文件(part1.texpart2.tex等)。

我需要生成大量的交叉引用,主要是为了列举某个部分内的项目,但理想情况下也需要列举跨部分的一些元素。

我的基本工作流程是在 emacs 中使用 RefTeX 功能编辑 LaTeX 文档以生成交叉引用。我的问题是,当 RefTex 自动为我提供标签时(我不愿意放弃这种便利),它会从头开始为每个部分的标签编号。

因此,part1.tex可能看起来像这样。

\begin{enumerate}
\item first thing in part 1.\label{item:1}
\item second thing in part 1.\label{item:2}
\end{enumerate}
Reference to \ref{item:1}

相应地,part2.tex可能是这样的。

\begin{enumerate}
\setcounter{enumi}{2}
\item first thing in part 2.\label{item:1}
\item second thing in part 2.\label{item:2}
\end{enumerate}
Reference to \ref{item:1}

(注意:我得到该\setcounter命令只是为了确保两个部分之间的数字不同,这样我才能看到交叉引用是否正常工作。)

调用这些的主要文档是基本main.tex

\documentclass{book}

\begin{document}
\input{part1}
\input{part2}
\end{document}

问题在于,由于 RefTeX 会从其提供的标签开始,因此交叉引用会出错。上面显示的part1.tex和中的引用都将是“3”,即最后一个附加到的part2.tex枚举项的编号。\label{item:1}

过去,我只是简单地强行解决这个问题。当需要进行最终编译时,我会搜索并替换代码中的所有标签,以包含每个输入文件的唯一前缀。例如,item:xx中的所有标签part1.tex都会变成 的item-part1:xx标签,并进行必要的修改part2.tex。但这很丑陋,肯定有更好的方法。

我不知道是否有软件包可以帮我解决这个问题(我查看了xr,但没有办法解决),或者是否有办法定制 RefTeX,这样当它在其中一个部分内自动生成标签时,它会自动知道在所有其他部分中正在使用的标签,从而确保不会创建重复的标签。

不管怎样,我在 OSX 上运行 TeX,以防万一。

答案1

我已经找到解决方案,为了完整性我将其发布在这里。

RefTeX 与 AucTeX 结合使用,可以识别构成我所使用的多文档结构的所有文档中的标签。只需在构成结构的每个文件中包含指向主文件的指针即可,在此示例中为main.texpart1.texpart2.tex

%%% Local Variables:
%%% TeX-master: "main"
%%% End:

提示:将声明放入主文件(在本例中为 main.tex)至关重要。我开始在网上寻找解决问题的方法,因为在之前的尝试中,我只在输入文件中包含了指向主文件的指针,而不是主文件本身。

答案2

\ref相同的操作\label不会产生不同的结果。您的\jobname.log文件应该包含警告,

there were multiply defined labels. 

唯一的选择是更改\label。对于大型文档,您只需要想出一个对您有意义且对其他人来说相当容易理解的约定。

例如,如果你part1.tex关注的是指数函数,那么你可以使用以下标签

\label{exp:item:description}  % for items
\label{exp:fig:description}   % for figures
\label{exp:tab:description}   % for tables
\label{exp:sec:description}   % for sections

等等,其中description是与你标记的对象相关的内容。如果part2.tex全部是关于多项式函数的,那么你可能使用与上面相同的结构,只是写成poly而不是exp

您描述的设置听起来类似于这样一种情况:您将两个名叫鲍勃的人放在一个房间里,喊出鲍勃的名字,并期望正确的人回答。

相关内容