O xr-hyper é compatível com o amsart?

O xr-hyper é compatível com o amsart?

Estou tendo problemas para usar xr-hyper(para referência cruzada entre arquivos) com a classe amsart.

O código a seguir apresenta um erro ao tentar compilar os dois .texarquivos (veja abaixo); qualquer arquivo que eu compile primeiro passa, mas o segundo arquivo falha na compilação. Funciona como esperado se eu substituir \usepackage{amsart}por \usepackage{article}.

Os arquivos são compilados (com as referências corretas exibidas) se eu escrever \usepackage{xr}em vez de \usepackage{xr-hyper}, mas nesse caso os hiperlinks entre arquivos parecem mal direcionados (tanto para a articleclasse quanto para amsarta classe).

Alguma sugestão?


Arquivo um, chamadomy_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}


Arquivo dois, chamadomy_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}


Editar: a pedido, aqui estão mais algumas informações sobre os erros.

Devo confessar que não sou especialista em LaTeX, então não tenho certeza se estou procurando os erros certos.

--

Meu console TeXworks me dá

! Missing number, treated as zero.
<to be read again> 
                   {
l.11 \section{Introduction for Part II}

quando tento compilarmy_part_II.tex

--

Ao tentar a mesma coisa no Overleaf (que requer alguma solução alternativa para xr-hyper, mas que uso regularmente com a articleclasse), os arquivos são compilados, mas com vários avisos (e as referências entre arquivos são exibidas como "??" em my_part_II.pdf). Ao compilar my_part_I.tex, recebo

Label `tocindent-1' multiply defined.
Label `tocindent0' multiply defined.
Label `tocindent1' multiply defined.
Label `tocindent2' multiply defined.
Label `tocindent3' multiply defined.

Se eu compilar my_part_II.tex, recebo

Reference `sec:part_I' on page 1 undefined on input line 50.

Responder1

Se você compilar um de seus arquivos (sem xr-hyper) e olhar no arquivo aux, verá definições de rótulo como esta:

\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{0pt}
\newlabel{tocindent1}{17.77782pt}
\newlabel{tocindent2}{0pt}
\newlabel{tocindent3}{0pt}

amsart usa isso para armazenar valores de recuo para a próxima execução.

Estes \newlabeldefinem comandos \r@tocindent0, etc. Quando você carrega um documento externo, o amsart vê apenas os \newlabel's do documento externo (que tem um valor errado e um formato errado, pois xr-hyper adicionou uma informação de arquivo) e erros, ou vê o \newlabel vem de arquivos auxiliares e reclama de rótulos multiplicados.

Na verdade, a única maneira de contornar o problema é usar um prefixo para garantir que os nomes não se sobreponham: \externaldocument[A-]{my_part_II}.

Como observação: embora atualmente não haja erro com xr, o resultado está errado. Também com o próximo LaTeX xr e xr-hyper serão mesclados e farão o mesmo.

informação relacionada