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 .tex
arquivos (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 article
classe quanto para amsart
a 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 article
classe), 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 \newlabel
definem 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.