如何引用其他子文件中的部分?

如何引用其他子文件中的部分?

我不知道我到底應該如何引用子文件中的其他部分。我準備了一個簡單的例子如下:

主要的

\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}

B檔案

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

如果我編譯主文件,一切正常。我不知道如何單獨編譯子文件並使交叉引用其他子文件起作用。我可以透過在 bfile 的序言中使用 to 來編譯子文檔,\externaldocument{Afile}但它會破壞主文件的編譯。有什麼方法可以讓主文件和子文件正確交叉引用嗎?如果您需要更多說明,請隨時詢問。

答案1

文檔環境下的命令是\document\enddocument

當主 TeX 檔案載入子檔案時,該命令將被重新定義以不傳遞任何標記:它等於來自 LaTeX 2ε-核心的\document命令,但與- 命令不同,它是根據.\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}

B文件文件

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

\externaldocument與subfiles-package/documentclass 手冊中未提及的xr-package/ 相關的刺激源可能是 LaTeX 的\include.. \includeonly-機制:

subfiles-package 的手冊說,當使用 subfiles-package 時,應該使用 command\subfileinclude而不是 command \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-driver 並透過 dvipdfmx-program(例如,基於 XeTeX 的 TeX 引擎的自動預設設定)從 .dvi 轉換為 .pdf 時解決此類問題。

相關內容