Совместим ли xr-hyper с amsart?

Совместим ли xr-hyper с amsart?

У меня возникли проблемы с использованием 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 будут объединены и сделают то же самое.

Связанный контент