xr-hyper
クラスで (ファイル間の相互参照用)を使用する際に問題が発生していますamsart
。
次のコードでは、両方のファイルをコンパイルしようとするとエラーが発生します(下記参照)。最初にコンパイルしたファイルはコンパイルされますが、2 番目のファイルはコンパイルに失敗します。を に.tex
置き換えると、期待どおりに動作します。\usepackage{amsart}
\usepackage{article}
\usepackage{xr}
の代わりにと記述すると、ファイルはコンパイルされます (正しい参照が表示されます) 。\usepackage{xr-hyper}
ただし、その場合、ファイル間のハイパーリンクが誤っているように見えます (article
クラスとamsart
クラスの両方について)。
助言がありますか?
ファイル1、my_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}
ファイル2、my_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}
編集: リクエストに応じて、エラーに関する詳細情報をここに示します。
正直に言うと、私は LaTeX の専門家ではないので、正しいエラーを見ているかどうかはわかりません。
--
私のTeXworksコンソールは私に
! Missing number, treated as zero.
<to be read again>
{
l.11 \section{Introduction for Part II}
コンパイルしようとするとmy_part_II.tex
--
Overleaf で同じことを試したところ( では何らかの回避策が必要ですxr-hyper
が、私はarticle
クラスで定期的に使用しています)、ファイルはコンパイルされますが、いくつかの警告が表示されます( ではファイル間の参照が「??」と表示されますmy_part_II.pdf
)。 をコンパイルするとmy_part_I.tex
、
Label `tocindent-1' multiply defined.
Label `tocindent0' multiply defined.
Label `tocindent1' multiply defined.
Label `tocindent2' multiply defined.
Label `tocindent3' multiply defined.
コンパイルするとmy_part_II.tex
、
Reference `sec:part_I' on page 1 undefined on input line 50.
答え1
ファイルの 1 つを (xr-hyper なしで) コンパイルし、aux ファイルを確認すると、次のようなラベル定義が表示されます。
\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{0pt}
\newlabel{tocindent1}{17.77782pt}
\newlabel{tocindent2}{0pt}
\newlabel{tocindent3}{0pt}
amsart はこれを使用して、次回の実行のためのインデント値を保存します。
これらは\newlabel
コマンド\r@tocindent0
などを定義します。外部ドキュメントをロードすると、amsart は外部ドキュメントからの \newlabel のみ (xr-hyper がファイル情報を追加したため、値と形式が間違っています) とエラーを認識するか、または両方の aux ファイルからの \newlabel を認識してラベルが重複しているとエラーを出力します。
私の意見では、この問題を回避する唯一の方法は、名前が重複しないようにプレフィックスを使用することです\externaldocument[A-]{my_part_II}
。
補足として: 現在 xr ではエラーは発生しませんが、それでも結果は間違っています。また、次の LaTeX では xr と xr-hyper が統合され、同じ動作をします。