他のサブファイル内のセクションを参照するにはどうすればよいですか?

他のサブファイル内のセクションを参照するにはどうすればよいですか?

サブファイル内の他のセクションをどうやって参照すればいいのか、まったくわかりません。以下に簡単な例を用意しました。

主要

\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\externaldocument{Afile}のプリアンブルで to を使用することでサブドキュメントのコンパイルは動作させることができますが、メイン ファイルのコンパイルが壊れてしまいます。メイン ファイルとサブファイルの両方を正しく相互参照させる方法はありますか? さらに説明が必要な場合は、遠慮なくお問い合わせください。

答え1

ドキュメント環境の基礎となるコマンドは、\documentおよびです\enddocument

サブファイルがメインの TeX ファイルによってロードされると、 コマンドはトークンを配信しないように再定義されます。これは、 LaTeX 2ε カーネルの\documentコマンドと同じですが、 -コマンドとは異なり、 の観点から再定義されます。\empty\empty\long

サブファイル パッケージのパッケージ作成者/管理者がこの動作を変更することを決定しない限り、サブファイルのプリアンブル内でコマンドの定義が-コマンド\documentに等しいかどうかを LaTeX にチェックさせることができます。等しい場合、サブファイルは - コマンドを介してメインの TeX ファイルからロードされ、必要ありません。等しくない場合、サブファイルは「スタンドアロン」でコンパイルされ、必要になります。\long\empty\subfile\externaldocument\externaldocument

次のようになります:

メイン.tex

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

Afile.tex

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

Bファイル.tex

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

\externaldocumentサブファイル パッケージ/ドキュメント クラスのマニュアルに記載されていないxr パッケージ/ に関連するイライラの原因は、 LaTeX の\include..\includeonlyメカニズムである可能性があります。

サブファイル パッケージのマニュアルには、サブファイル パッケージを使用するときは\subfileincludeコマンドではなくコマンドを使用する必要があると記載されています\include

\includeただし、LaTeX は、 /\subfileincludeではなく\input/経由でインポートされた各ファイルに対して、\subfileファイル名が組み込まれている .tex ファイルの名前と同じで、ファイル名拡張子が .aux である別個の部分的な .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 に変換する場合に、このような問題を回避する方法について詳しく説明しました。

関連情報