Como faço referência a seções em outros subarquivos?

Como faço referência a seções em outros subarquivos?

Não consigo descobrir como devo fazer referência a outras seções em subarquivos. Preparei um exemplo simples abaixo:

principal

\documentclass[12pt,letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{xr}
\usepackage{subfiles}

\begin{document}
\subfile{Afile}
\subfile{Bfile}
\end{document}

Um arquivo

\documentclass[main.tex]{subfiles}
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah 
\end{document}

Arquivo B

\documentclass[main.tex]{subfiles}
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}

Se eu compilar o arquivo principal, tudo funcionará corretamente. Não consigo descobrir como compilar os subarquivos separadamente e fazer com que a referência cruzada para outros subarquivos funcione. Posso fazer com que a compilação do subdocumento funcione usando to \externaldocument{Afile}no preâmbulo do bfile, mas isso interrompe a compilação do arquivo principal. Existe alguma maneira de fazer com que o arquivo principal e o subarquivo sejam cruzados corretamente? Se precisar de mais esclarecimentos, fique à vontade para perguntar.

Responder1

Os comandos que fundamentam o ambiente de documento são \documente \enddocument.

Quando um subarquivo é carregado pelo arquivo TeX principal, o comando \documenté redefinido para não entregar tokens: é igual ao comando \emptydo kernel 2ε do LaTeX, mas ao contrário do \empty-command, ele é redefinido em termos de \long.

Contanto que os autores/mantenedores de pacotes do pacote de subarquivos não decidam mudar esse comportamento, você pode fazer com que o LaTeX verifique nos preâmbulos de seus subarquivos se a definição do comando \documenté igual a esse \long- \empty-comando. Nesse caso, o subarquivo é carregado do arquivo TeX principal por meio do \subfilecomando - e \externaldocumentnão é necessário. Caso contrário, o subarquivo é compilado "independente" e \externaldocumenté necessário.

Poderia ser assim:

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}

Arquivo.tex

\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
  \externaldocument{Bfile}%
}%
\begin{document}
\section{Blah Blah}
\label{section: asection}
blah blah blah blah 
\end{document}

Arquivo B.tex

\documentclass[main.tex]{subfiles}
\DoIfAndOnlyIfStandAlone{%
  \externaldocument{Afile}%
}%
\begin{document}
\section{Bo bo boooooo}
\label{section: bsection}
Unlike section \ref{section: asection}.
\end{document}

Uma fonte de irritação em conjunto com o xr-package/ \externaldocumentnão mencionado no manual do subfiles-package/documentclass pode ser o mecanismo \include.. do LaTeX:\includeonly

O manual do pacote de subarquivos diz que ao usar o pacote de subarquivos deve-se usar o comando \subfileincludeem vez do comando \include.

No entanto, o LaTeX faz, para cada arquivo importado via \include/ \subfileincludeem vez de \input/, \subfileum arquivo .aux separado/parcial cujo nome de arquivo é igual ao nome do arquivo .tex incluído e cuja extensão de nome de arquivo é .aux .

Portanto, o nome do arquivo .aux criado durante a compilação autônoma de um subarquivo será o mesmo que o nome do arquivo .aux parcial criado durante a compilação do arquivo TeX principal ao carregar o subarquivo em questão via \subfileinclude.

Portanto, ao usar \include/ \subfileincludecertifique-se de ter o arquivo .aux parcial correspondente que vem da compilação main.tex removido ao mudar da compilação main.tex para a compilação do subarquivo em questão de forma independente. Vice-versa, certifique-se de remover o arquivo .aux proveniente da compilação autônoma do subarquivo em questão ao alternar da compilação autônoma do subarquivo em questão para a compilação main.tex.

No caso de referência cruzada entre documentos diferentes, você pode estar interessado em um esboço de como a referência cruzada é implementada no LaTeX. Tentei explicar essas coisas na minha resposta à pergunta"Como evitar referência à enumeração dentro de um novo ambiente?".

Além disso, ao fazer referência cruzada entre diferentes documentos por meio do xr-package/por meio do xr-hyper-package, a exclusividade dos nomes dos destinos dos hiperlinks pode ser um problema ao carregar o hyperref por também ter hiperlinks junto com o cross -referências. Na minha resposta à pergunta"Referência cruzada com pacote `xr` e combinação final de PDF?"Eu elaborei como você pode contornar esses problemas ao usar o driver dvipdfmx e converter de .dvi para .pdf por meio do programa dvipdfmx (que é, por exemplo, o padrão automatizado com mecanismos TeX baseados em XeTeX).

informação relacionada