У меня возникли проблемы с использованием xr-hyper
(для перекрестных ссылок между файлами) класса amsart
.
Следующий код выдает мне ошибку при попытке скомпилировать оба .tex
файла (см. ниже); какой бы файл я ни скомпилировал первым, он проходит, но затем второй файл не компилируется. Он работает так, как и ожидалось, если я заменяю \usepackage{amsart}
на \usepackage{article}
.
Файлы компилируются (с отображением правильных ссылок), если я пишу \usepackage{xr}
вместо \usepackage{xr-hyper}
, но в этом случае гиперссылки между файлами кажутся неправильно направленными (как для article
класса, так и amsart
для класса).
Какие-либо предложения?
Файл первый, называется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}
Файл два, называется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
Если вы скомпилируете один из своих файлов (без 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 добавил информацию о файле) и ошибки, либо видит \newlabel из обоих вспомогательных файлов и жалуется на множественные метки.
По моему скромному мнению, единственный способ обойти эту проблему — использовать префикс, чтобы гарантировать, что имена не будут пересекаться: \externaldocument[A-]{my_part_II}
.
В качестве примечания: хотя в настоящее время нет ошибок с xr, результат все равно неверный. Также в следующем LaTeX xr и xr-hyper будут объединены и сделают то же самое.