如何引用其他子文件中的章节?

如何引用其他子文件中的章节?

我不明白我该如何引用子文件中的其他部分。我准备了一个简单的示例:

主要的

\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
\usepackage{subfiles}

\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}

一份文件

\documentclass[main.tex]{subfiles}
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah 
\end{document}

档案

\documentclass[main.tex]{subfiles}
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}

如果我编译主文件,一切都会正常工作。我不知道如何单独编译子文件并使对其他子文件的交叉引用正常工作。我可以通过\externaldocument{Afile}在 bfile 的序言中使用 to 来使子文档的编译正常工作,但它会破坏主文件的编译。有什么方法可以让主文件和子文件正确交叉引用吗?如果您需要更多说明,请随时询问。

答案1

文档环境的基础命令是\document\enddocument

当主 TeX 文件加载子文件时,命令被重新定义为不提供任何标记:它等于来自 LaTeX 2ε 内核的\document命令,但与-command 不同,它根据 重新定义。\empty\empty\long

只要子文件包的包作者/维护者不决定改变此行为,您就可以让 LaTeX 在子文件的前言中检查命令的定义是否\document等于\long- \empty-命令。如果是,则子文件通过 -命令从主 TeX 文件加载,不需要。如果不是,则子文件是“独立”编译的,并且是需要\subfile的。\externaldocument\externaldocument

可能看起来像这样:

主文本

\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
%\usepackage{xr-hyper} % in case of also loading hyperref.
\makeatletter
\newcommand\longempty{}%
\newcommand\DoIfAndOnlyIfStandAlone{%
  \ifx\document\longempty
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
}%
\makeatother
\usepackage{subfiles}
\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}

文本文件

\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
  \externaldocument{Bfile}%
}%
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah 
\end{document}

文本文件

\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
  \externaldocument{Afile}%
}%
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}

与 xr-package/ 相关的一个令人烦恼的问题,\externaldocument在 subfiles-package/documentclass 的手册中没有提到,可能是 LaTeX 的\include..\includeonly机制:

subfiles-package 的手册说,使用 subfiles-package 时,应该使用命令\subfileinclude而不是命令\include

尽管如此,LaTeX 仍会为通过\include/\subfileinclude而不是\input/导入的每个文件\subfile创建一个单独的/部分 .aux 文件,其文件名等于包含的 .tex 文件的名称,其文件扩展名是 .aux 。

因此,在子文件独立编译期间创建的 .aux 文件的文件名将与通过 加载相关子文件时在主 TeX 文件编译期间创建的部分 .aux 文件的文件名相同\subfileinclude

因此,使用\include/时\subfileinclude,请确保在从编译 main.tex 切换到编译相关子文件时,删除编译 main.tex 产生的相应部分 .aux 文件。反之亦然,请确保在从编译相关子文件切换到编译 main.tex 时,删除编译相关子文件时产生的 .aux 文件。

如果不同文档之间有交叉引用,你可能对 LaTeX 中如何实现交叉引用的概述感兴趣。我在回答这个问题时尝试解释这些事情“如何防止在新环境中引用枚举?”

除此之外,当通过 xr-package/xr-hyper-package 在不同文档之间进行交叉引用时,加载 hyperref 时超链接目的地名称的唯一性可能会成为问题,因为在交叉引用的同时还具有超链接。在我的回答中“与‘xr’包和最终的PDF组合交叉引用?”我详细说明了如何在使用 dvipdfmx 驱动程序并通过 dvipdfmx 程序(例如,基于 XeTeX 的 TeX 引擎的自动化默认程序)将 .dvi 转换为 .pdf 时解决此类问题。

相关内容