
Ich kann nicht herausfinden, wie ich in aller Welt auf andere Abschnitte in Unterdateien verweisen soll. Ich habe unten ein einfaches Beispiel vorbereitet:
hauptsächlich
\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
\usepackage{subfiles}
\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}
Eine Datei
\documentclass[main.tex]{subfiles}
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah
\end{document}
B-Datei
\documentclass[main.tex]{subfiles}
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}
Wenn ich die Hauptdatei kompiliere, funktioniert alles richtig. Ich kann nicht herausfinden, wie ich die Unterdateien separat kompilieren und die Querverweise zu anderen Unterdateien zum Laufen bringen kann. Ich kann die Kompilierung des Unterdokuments zum Laufen bringen, indem ich \externaldocument{Afile}
in der Präambel der B-Datei „to“ verwende, aber die Kompilierung der Hauptdatei wird dadurch unterbrochen. Gibt es eine Möglichkeit, sowohl die Haupt- als auch die Unterdatei dazu zu bringen, korrekt Querverweise zu erstellen? Wenn Sie weitere Erläuterungen benötigen, fragen Sie einfach.
Antwort1
Die der Dokumentumgebung zugrunde liegenden Befehle sind \document
und \enddocument
.
Wenn eine Unterdatei von der TeX-Hauptdatei geladen wird, \document
wird der Befehl neu definiert, um keine Tokens zu liefern: Er entspricht dem Befehl \empty
aus dem LaTeX 2ε-Kernel, \empty
wird aber im Gegensatz zum -Befehl in Bezug auf neu definiert \long
.
Solange die Paketautoren/Betreuer des Subfiles-Pakets sich nicht dazu entschließen, dieses Verhalten zu ändern, können Sie LaTeX in den Präambeln Ihrer Subfiles prüfen lassen, ob die Definition des Befehls \document
diesem -Befehl entspricht \long
. \empty
Wenn ja, wird die Subdatei über den \subfile
-Befehl aus der Haupt-TeX-Datei geladen und \externaldocument
wird nicht benötigt. Wenn nicht, wird die Subdatei „eigenständig“ kompiliert und \externaldocument
wird benötigt.
Könnte so aussehen:
main.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}
Bfile.tex
\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
\externaldocument{Afile}%
}%
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}
Eine Quelle der Irritation im Zusammenhang mit dem xr-Paket/, die \externaldocument
im Handbuch des Subfiles-Pakets/der Dokumentklasse nicht erwähnt wird, könnte der \include
..- \includeonly
Mechanismus von LaTeX sein:
Im Handbuch des Subfiles-Pakets steht, dass bei Verwendung des Subfiles-Pakets der Befehl \subfileinclude
anstelle des Befehls verwendet werden soll \include
.
\include
LaTeX erstellt dennoch für jede Datei, die über / \subfileinclude
statt \input
/ importiert wird, \subfile
eine separate/partielle .aux-Datei, deren Dateiname dem Namen der eingeschlossenen .tex-Datei entspricht und deren Dateinamenerweiterung .aux ist.
Daher ist der Dateiname der .aux-Datei, die während der eigenständigen Kompilierung einer Unterdatei erstellt wird, derselbe wie der Dateiname der partiellen .aux-Datei, die während der Kompilierung der TeX-Hauptdatei erstellt wird, wenn die betreffende Unterdatei über geladen wird \subfileinclude
.
Stellen Sie daher bei Verwendung von \include
/ \subfileinclude
sicher, dass die entsprechende partielle .aux-Datei, die beim Kompilieren von main.tex entsteht, entfernt wird, wenn Sie vom Kompilieren von main.tex zum Kompilieren der betreffenden Unterdatei (Standalone) wechseln. Stellen Sie umgekehrt sicher, dass die .aux-Datei, die beim Kompilieren der betreffenden Unterdatei (Standalone) entsteht, entfernt wird, wenn Sie vom Kompilieren der betreffenden Unterdatei (Standalone) zum Kompilieren von main.tex wechseln.
Im Falle von Querverweisen zwischen verschiedenen Dokumenten könnten Sie an einer Übersicht darüber interessiert sein, wie Querverweise in LaTeX implementiert werden. Ich habe versucht, diese Dinge in meiner Antwort auf die Frage zu erklären„Wie kann man Verweise auf Aufzählungen in einer neuen Umgebung verhindern?“.
Darüber hinaus kann bei Querverweisen zwischen verschiedenen Dokumenten mithilfe des xr-Pakets/mithilfe des xr-hyper-Pakets die Eindeutigkeit der Zielnamen für Hyperlinks ein Problem darstellen, wenn Hyperref geladen wird, um neben den Querverweisen auch Hyperlinks zu haben. In meiner Antwort auf die Frage„Querverweis mit ‚xr‘-Paket und endgültiger PDF-Kombination?“Ich habe erläutert, wie Sie solche Probleme umgehen können, wenn Sie den dvipdfmx-Treiber verwenden und mit dem dvipdfmx-Programm von .dvi nach .pdf konvertieren (was beispielsweise die automatisierte Vorgabe bei auf XeTeX basierenden TeX-Engines ist).