I am writing my PhD thesis, which is split into multiple chapter subfiles with a masterfile that combines them all for convenience of editing.
I have attempted to implement citations in the subfiles so I can see my references when I am editing my subfiles by defining the command \biblio
in the masterfile for use in the subfiles as follows:
\providecommand{\main}{.}
\documentclass[12pt]{report}
\usepackage[numbers]{natbib}
\usepackage{subfiles}
\def\biblio{\bibliographystyle{ieeetran}\bibliography{\main/references}} % *Modification: added `\main/` to specify relative file location.
\begin{document}
\def\biblio{}
\chapter{Chapter 1}
\subfile{ThesisSubfiles/Chapter 1}
\chapter{Chapter 2}
\subfile{ThesisSubfiles/Chapter 2}
\chapter{Chapter 3}
\subfile{ThesisSubfiles/Chapter 3}
\bibliographystyle{ieeetran}
\bibliography{references.bib}
\end{document}
With each chapter subfile calling \biblio
as follows:
%!TeX root = Chapter 1.tex
\providecommand{\main}{..}
\documentclass[../ThesisMasterfile.tex]{subfiles}
\begin{document}
\section{Section 1}
Some text.
\section{Section 2}
Some text.
\biblio
\end{document}
This works fine on my laptop, but when I attempt to compile the same script on my desktop PC, any new citations (invoked using \cite{}
) added to any subfile which I compile on its own just appear as question marks with the warning "Citation 'citation' on page x undefined". Even stranger is that if I compile it on my laptop to make it work and then recompile it on my desktop PC, the new references then show up. Both PCs use the same relative file paths (the files are all saved to a shared cloud storage), both are running Windows 10 and MikTex with TexStudio editor. The only differences is, the packages on the desktop PC have been updated more recently.
Does anyone have any idea what the problem is? Thanks in advance!
Best Answer
Your problem description is not self-contained, so it is difficult to reproduce the problem. When I try to reconstruct the issue, it works (with a recent TeX distribution).
Some suggestions:
When you typeset the subfile on its own, you have to perform the same cycle as with the main document:
latex ...
,bibtex ...
,latex ...
,latex ...
Your statement that typesetting worked after returning from the other computer and rerunning latex, seems like there haven't been enough runs of
latex
andbibtex
.Update your LaTeX distribution, on all of your computers. This will solve many problems, or at least should lead to a consistent and reproducible behavior.
Take a look at section 3.3 of the subfiles documentation, which explains how to solve your use case with an optional bibliography in the subfile.
Since quite some time now,
subfiles
handles most cases of path adjustments itself, and offers\subfix
in case it can't do it.As I said in the beginning, your files seem to work fine (if I complete them to a minimal working example), but the setup could be simplified as follows, without the need for
\main
and\biblio
:If you use
biblatex
andbiber
instead, you would have to addto the preamble of the main document and to replace the two occurrences of
\bibliography{...}
by\printbibliography
.