Tengo problemas para usar xr-hyper
(para hacer referencias cruzadas entre archivos) con la clase amsart
.
El siguiente código me da un error al intentar compilar ambos .tex
archivos (ver más abajo); el archivo que compilo primero pasa, pero luego el segundo archivo no se compila. Funciona como se esperaba si lo reemplazo \usepackage{amsart}
con \usepackage{article}
.
Los archivos se compilan (con las referencias correctas mostradas) si escribo \usepackage{xr}
en lugar de \usepackage{xr-hyper}
, pero en ese caso los hipervínculos entre archivos parecen mal dirigidos (tanto para la article
clase como para amsart
la clase).
¿Alguna sugerencia?
Archivo uno, llamadomy_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}
Archivo dos, llamadomy_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, aquí hay más información sobre los errores.
Debo confesar que no soy un experto en LaTeX, por lo que no estoy seguro de estar viendo los errores correctos.
--
Mi consola TeXworks me da
! Missing number, treated as zero.
<to be read again>
{
l.11 \section{Introduction for Part II}
cuando intento compilarmy_part_II.tex
--
Cuando intento lo mismo en Overleaf (que requiere alguna solución alternativa xr-hyper
, pero que uso regularmente con la article
clase), los archivos se compilan pero con varias advertencias (y las referencias entre archivos se muestran como "??" en my_part_II.pdf
). Al compilar my_part_I.tex
, obtengo
Label `tocindent-1' multiply defined.
Label `tocindent0' multiply defined.
Label `tocindent1' multiply defined.
Label `tocindent2' multiply defined.
Label `tocindent3' multiply defined.
Si luego compilo my_part_II.tex
, obtengo
Reference `sec:part_I' on page 1 undefined on input line 50.
Respuesta1
Si compila uno de sus archivos (sin xr-hyper) y mira el archivo auxiliar, verá definiciones de etiquetas como esta:
\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{0pt}
\newlabel{tocindent1}{17.77782pt}
\newlabel{tocindent2}{0pt}
\newlabel{tocindent3}{0pt}
amsart usa esto para almacenar valores de sangría para la siguiente ejecución.
Estos \newlabel
definen comandos \r@tocindent0
, etc. Cuando carga un documento externo, amsart ve solo el \newlabel del documento externo (que tiene un valor incorrecto y un formato incorrecto ya que xr-hyper ha agregado información de archivo) y errores, o ve el \newlabel proviene de ambos archivos auxiliares y se queja de etiquetas multiplicadas.
En mi humilde opinión, la única forma de solucionar el problema es utilizar un prefijo para garantizar que los nombres no se superpongan: \externaldocument[A-]{my_part_II}
.
Como nota al margen: si bien actualmente no produce un error con xr, el resultado es incorrecto. Además, con el próximo LaTeX xr y xr-hyper se fusionarán y harán lo mismo.