Ich habe Probleme bei der Verwendung xr-hyper
(für Querverweise zwischen Dateien) mit der Klasse amsart
.
Der folgende Code erzeugt einen Fehler, wenn ich versuche, beide .tex
Dateien zu kompilieren (siehe unten); egal, welche Datei ich zuerst kompiliere, es funktioniert, aber die Kompilierung der zweiten Datei schlägt fehl. Es funktioniert wie erwartet, wenn ich \usepackage{amsart}
durch ersetze \usepackage{article}
.
Die Dateien werden kompiliert (mit der Anzeige der korrekten Referenzen), wenn ich \usepackage{xr}
statt schreibe \usepackage{xr-hyper}
, aber in diesem Fall scheinen die dateiübergreifenden Hyperlinks fehlgeleitet zu sein (sowohl für die article
Klasse als auch für amsart
die Klasse).
Irgendwelche Vorschläge?
Datei eins, genanntmy_part_I.tex
\documentclass{amsart}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument{my_part_II}
\begin{document}
\section{Introduction for Part I}
\label{sec:part_I}
See \ref{sec:part_I} or \ref{sec:part_II}.
\end{document}
Datei zwei, genanntmy_part_II.tex
\documentclass{amsart}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument{my_part_I}
\begin{document}
\addtocounter{section}{1}
\section{Introduction for Part II}
\label{sec:part_II}
See \ref{sec:part_I} or \ref{sec:part_II}.
\end{document}
Edit: Auf Anfrage hier noch ein paar Infos zu den Fehlern.
Ich muss gestehen, dass ich kein LaTeX-Experte bin und daher nicht sicher bin, ob ich die richtigen Fehler sehe.
--
Meine TeXworks-Konsole gibt mir
! Missing number, treated as zero.
<to be read again>
{
l.11 \section{Introduction for Part II}
wenn ich versuche zu kompilierenmy_part_II.tex
--
Wenn ich dasselbe auf Overleaf versuche (was einige Workarounds für erfordert xr-hyper
, das ich aber regelmäßig mit der article
Klasse verwende), werden die Dateien kompiliert, aber mit mehreren Warnungen (und die dateiübergreifenden Verweise werden als „??“ in angezeigt my_part_II.pdf
). Beim Kompilieren my_part_I.tex
erhalte ich
Label `tocindent-1' multiply defined.
Label `tocindent0' multiply defined.
Label `tocindent1' multiply defined.
Label `tocindent2' multiply defined.
Label `tocindent3' multiply defined.
Wenn ich dann kompiliere my_part_II.tex
, bekomme ich
Reference `sec:part_I' on page 1 undefined on input line 50.
Antwort1
Wenn Sie eine Ihrer Dateien kompilieren (ohne xr-hyper) und in die AUX-Datei schauen, sehen Sie Label-Definitionen wie diese:
\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{0pt}
\newlabel{tocindent1}{17.77782pt}
\newlabel{tocindent2}{0pt}
\newlabel{tocindent3}{0pt}
amsart verwendet dies, um Einrückungswerte für den nächsten Lauf zu speichern.
Diese \newlabel
definieren Befehle \r@tocindent0
usw. Wenn Sie ein externes Dokument laden, sieht amsart entweder nur die \newlabels aus dem externen Dokument (das einen falschen Wert und ein falsches Format hat, da xr-hyper eine Dateiinfo hinzugefügt hat) und Fehler, oder es sieht die \newlabels aus beiden AUX-Dateien und beschwert sich über multiplizierte Labels.
Meiner Meinung nach besteht die einzige Möglichkeit, das Problem zu umgehen, darin, durch ein Präfix sicherzustellen, dass sich die Namen nicht überschneiden: \externaldocument[A-]{my_part_II}
.
Nebenbemerkung: Auch wenn es derzeit mit xr keinen Fehler gibt, ist das Ergebnis trotzdem falsch. Auch mit dem nächsten LaTeX werden xr und xr-hyper zusammengeführt und tun dasselbe.