Bibliographien bei Verwendung von Unterdateien

Bibliographien bei Verwendung von Unterdateien

Ich schreibe meine Doktorarbeit in XeLaTeX mit Biblatex und manchmal muss ich einzelne Kapitel kompilieren, manchmal muss ich das gesamte Dokument kompilieren. Dafür verwende ich Unterdateien, was wunderbar funktioniert. In jedem dieser Kapitel habe ich jedoch einen \printbibliographyBefehl, den ich beim Kompilieren des endgültigen Dokuments deaktivieren möchte, sodass nur der \printbibliographyBefehl in der Hauptdatei ausgeführt wird.

Die Dateistruktur sieht ungefähr so ​​aus:

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}

Antwort1

Der subfiles.styBefehl \subfileist wie folgt definiert:

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

Es ist also ganz einfach, Code einzubinden, um lokal neu zu definieren, \printbibliographydass nichts geschieht. Fügen Sie beispielsweise Folgendes zur Präambel der Hauptdatei hinzu:

\makeatletter

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

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

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

\makeatother

Beachten Sie, dass biblatexbibliografische Daten über Zitatbefehle verfügbar gemacht werden. Wenn Sie die Bibliografieeinträge also nicht außerhalb der Hauptdatei anzeigen möchten, müssen die Unterdateien nicht aufgerufen werden \printbibliography.

Antwort2

Ich habe auch Audreys Ansatz verwendet (https://tex.stackexchange.com/a/107111/85983), aber es hat mich genervt, am Ende jeder Unterdatei schreiben zu müssen \printbibliography. Jetzt verwende ich die folgenden Latex-Hooks in der Präambel meiner Hauptdatei:

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

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

Antwort3

Seit Version 2.0 von Subfiles kann man das Bedingungsmakro auch verwenden, \ifSubfilesClassLoaded{}{}um etwas Ähnliches wie Audreys Ansatz zu tun (https://tex.stackexchange.com/a/107111/85983).

Mit meinem Setup sieht ein MWE wie folgt aus:

main.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}

Antwort4

Ein anderer Ansatz könnte darin bestehen, die Unterdateien und die Hauptdatei anhand ihres Jobnamens zu unterscheiden. Angenommen, Ihre Hauptdatei heißt Thesis.tex, dann lautet der Jobname normalerweise Thesisund Sie können testen

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

dadurch wird am Ende der Unterdateien eine Bibliografie eingefügt und in Ihrer Hauptdatei geschieht nichts.

(wenn möglich, verwenden Sie dies vorher \usepackage{biblatex}, sonst kann es zu einer Warnung kommen, sieheundefinierte Referenzwarnung für \AtEndDocument{\printbibliography})

verwandte Informationen