Wie referenziere ich Abschnitte in anderen Unterdateien?

Wie referenziere ich Abschnitte in anderen Unterdateien?

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 \documentund \enddocument.

Wenn eine Unterdatei von der TeX-Hauptdatei geladen wird, \documentwird der Befehl neu definiert, um keine Tokens zu liefern: Er entspricht dem Befehl \emptyaus dem LaTeX 2ε-Kernel, \emptywird 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 \documentdiesem -Befehl entspricht \long. \emptyWenn ja, wird die Subdatei über den \subfile-Befehl aus der Haupt-TeX-Datei geladen und \externaldocumentwird nicht benötigt. Wenn nicht, wird die Subdatei „eigenständig“ kompiliert und \externaldocumentwird 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 \externaldocumentim Handbuch des Subfiles-Pakets/der Dokumentklasse nicht erwähnt wird, könnte der \include..- \includeonlyMechanismus von LaTeX sein:

Im Handbuch des Subfiles-Pakets steht, dass bei Verwendung des Subfiles-Pakets der Befehl \subfileincludeanstelle des Befehls verwendet werden soll \include.

\includeLaTeX erstellt dennoch für jede Datei, die über / \subfileincludestatt \input/ importiert wird, \subfileeine 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/ \subfileincludesicher, 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).

verwandte Informationen