
我不知道我到底應該如何引用子文件中的其他部分。我準備了一個簡單的例子如下:
主要的
\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 時解決此類問題。