Bibliografías al utilizar subarchivos

Bibliografías al utilizar subarchivos

Estoy escribiendo mi doctorado. tesis en XeLaTeX con Biblatex, y hay momentos en los que necesito compilar capítulos individuales, y momentos en los que necesito compilar el documento completo, entonces uso subarchivos, lo cual funciona de maravilla. Sin embargo, en cada uno de estos capítulos tengo un \printbibliographycomando que me gustaría desactivar al compilar el documento final, para que solo \printbibliographyse ejecute el comando en el archivo principal.

La estructura del archivo es algo como:

Main.tex:

\usepackage{subfiles, biblatex}
\begin{document}

\subfile{Chapter1.tex}

\printbibliography
\end{document}

Chapter1.tex:

\documentclass[Main.tex]{subfiles}
\begin{document}
\cite{Someguy1981}
\printbibliography
\end{document}

Respuesta1

Del subfiles.stycomando \subfilese define como:

\newcommand\subfile[1]{\begingroup\skip@preamble\input{#1}\endgroup}

Por lo tanto, es sencillo incorporar algún código para redefinirlo localmente \printbibliographyy no hacer nada. Por ejemplo, agregue lo siguiente al preámbulo del archivo principal:

\makeatletter

\newrobustcmd*{\nobibliography}{%
  \@ifnextchar[%]
    {\blx@nobibliography}
    {\blx@nobibliography[]}}

\def\blx@nobibliography[#1]{}

\appto{\skip@preamble}{\let\printbibliography\nobibliography}

\makeatother

Tenga en cuenta que biblatexhace que los datos bibliográficos estén disponibles mediante comandos de citas. Entonces, a menos que desee ver las entradas de bibliografía fuera del archivo principal, no es necesario invocar los subarchivos \printbibliography.

Respuesta2

También utilicé el enfoque de Audrey (https://tex.stackexchange.com/a/107111/85983) por un tiempo, pero me molestó tener que escribir \printbibliographyal final de cada subarchivo. Ahora estoy usando los siguientes Latex Hooks en el preámbulo de mi archivo principal:

%%% Default start and end for each subfile
\AtBeginDocument{%
}

\AtEndDocument{%
    \printbibliography
    \listoffigures
    \listoftables
    \newpage
    \printacronyms[include-classes=abbrev,name=Acronyms]
}

Respuesta3

Desde la versión 2.0 de subarchivos, también se puede usar la macro de condición \ifSubfilesClassLoaded{}{}para hacer algo similar al enfoque de Audrey (https://tex.stackexchange.com/a/107111/85983).

Con mi configuración, un MWE es el siguiente:

principal.tex

\documentclass{book}
\usepackage{biblatex}
\usepackage{subfiles} % must be last usepackage

\providecommand{\topdir}{.}
\addglobalbib{\topdir/references.bib} % topdir is needed here so that
                                      % we can resolve the path in the subfile
                                      % correctly. There we re-define the
                                      % topdir macro to the location of the
                                      % bib file.

\begin{document}
\subfile{dir/sub}
\printbibliography[heading=bibintoc]{}
\end{document}

sub.tex

\providecommand{\topdir}{..} % reset all paths to location of main.tex
\documentclass[../main.tex]{subfiles}

\begin{document}
% some content with citations

\ifSubfilesClassLoaded{%
    \printbibliography{}
}{} % we have no 'else' action
\end{document}

Respuesta4

Otro enfoque podría ser distinguir entre los subarchivos y el archivo principal por su nombre de trabajo. Digamos que su archivo principal se llama Thesis.tex, entonces el nombre del trabajo es normalmente Thesisy puede probar

\IfEq{\jobname}{\detokenize{Thesis}}{}{%
    \AtEndDocument{%
        \printbibliography%
    }
}

esto insertará una bibliografía al final de los subarchivos y no hará nada en su archivo principal.

(Si es posible, utilice esto antes \usepackage{biblatex}; de lo contrario, podría generar una advertencia; consulteAdvertencia de referencias no definidas para \AtEndDocument{\printbibliography})

información relacionada