
No puedo entender cómo se supone que debo hacer referencia a otras secciones en los subarchivos. He preparado un ejemplo sencillo a continuación:
principal
\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
\usepackage{subfiles}
\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}
Un archivo
\documentclass[main.tex]{subfiles}
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah
\end{document}
Archivo B
\documentclass[main.tex]{subfiles}
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}
Si compilo el archivo principal todo funciona correctamente. No puedo entender cómo compilar los subarchivos por separado y hacer que funcionen las referencias cruzadas con otros subarchivos. Puedo hacer que la compilación del subdocumento funcione usando to \externaldocument{Afile}
en el preámbulo del archivo b, pero interrumpe la compilación del archivo principal. ¿Hay alguna manera de hacer que tanto el archivo principal como el subarchivo hagan referencias cruzadas correctamente? Si necesita más aclaraciones no dude en preguntar.
Respuesta1
Los comandos que subyacen al entorno de documentos son \document
y \enddocument
.
Cuando el archivo TeX principal carga un subarchivo, el comando \document
se redefine para no entregar tokens: es igual al comando \empty
del kernel LaTeX 2ε pero, a diferencia del \empty
comando -, se redefine en términos de \long
.
Siempre que los autores/mantenedores del paquete de subarchivos no decidan cambiar este comportamiento, puede hacer que LaTeX verifique dentro de los preámbulos de sus subarchivos si la definición del comando \document
es igual a ese \long
comando \empty
. Si es así, el subarchivo se carga desde el archivo TeX principal mediante el \subfile
comando -y \externaldocument
no es necesario. De lo contrario, el subarchivo se compila de forma "independiente" y \externaldocument
es necesario.
Podría verse así:
principal.tex
\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
%\usepackage{xr-hyper} % in case of also loading hyperref.
\makeatletter
\newcommand\longempty{}%
\newcommand\DoIfAndOnlyIfStandAlone{%
\ifx\document\longempty
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
}%
\makeatother
\usepackage{subfiles}
\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}
Afile.tex
\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
\externaldocument{Bfile}%
}%
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah
\end{document}
ArchivoB.tex
\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
\externaldocument{Afile}%
}%
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}
Una fuente de irritación en conjunto con el xr-package/ \externaldocument
no mencionado en el manual del subfiles-package/documentclass podría ser el \include
.. \includeonly
mecanismo de LaTeX:
El manual del paquete de subarchivos dice que cuando se usa el paquete de subarchivos se debe usar el comando \subfileinclude
en lugar del comando \include
.
No obstante, LaTeX para cada archivo que se importa a través de \include
/ \subfileinclude
en lugar de \input
/ \subfile
crea un archivo .aux separado/parcial cuyo nombre de archivo es igual al nombre del archivo .tex incluido y cuya extensión de nombre de archivo es .aux.
Por lo tanto, el nombre del archivo .aux creado durante la compilación independiente de un subarchivo será el mismo que el nombre del archivo .aux parcial creado durante la compilación del archivo TeX principal al cargar el subarchivo en cuestión a través de \subfileinclude
.
Por lo tanto, cuando use \include
/ \subfileinclude
asegúrese de eliminar el archivo .aux parcial correspondiente que proviene de la compilación de main.tex al cambiar de compilar main.tex a compilar el subarchivo en cuestión de forma independiente. Viceversa, asegúrese de eliminar el archivo .aux que proviene de la compilación independiente del subarchivo en cuestión cuando cambie de compilar el subarchivo en cuestión de forma independiente a compilar main.tex.
En caso de referencias cruzadas entre diferentes documentos, es posible que le interese un resumen de cómo se implementan las referencias cruzadas en LaTeX. Intenté explicar estas cosas en mi respuesta a la pregunta."¿Cómo evitar referencias a enumeraciones dentro de un nuevo entorno?".
Además de esto, al hacer referencias cruzadas entre diferentes documentos mediante el paquete xr/mediante el paquete xr-hyper, la unicidad de los nombres de los destinos de los hipervínculos puede ser un problema al cargar hyperref por tener también hipervínculos junto con la cruz. -referencias. En mi respuesta a la pregunta"¿Referencia cruzada con el paquete `xr` y la combinación final de PDF?"Expliqué cómo se pueden solucionar estos problemas al utilizar el controlador dvipdfmx y convertir de .dvi a .pdf mediante el programa dvipdfmx (que es, por ejemplo, el valor predeterminado automatizado con motores TeX basados en XeTeX).