考虑以下main.tex
:
\documentclass{report}
\usepackage{filecontents}
\usepackage{subfiles}
\begin{filecontents}{\jobname.bib}
@book{key,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
}
\end{filecontents}
\begin{document}
\subfile{chapter1.tex}
\bibliographystyle{unsrt}
\bibliography{\jobname}
\end{document}
这是chapter1.tex
:
\documentclass[main.tex]{subfiles}
\begin{document}
\chapter{My Title}
\cite{key} % the problem
\end{document}
使用 pdflatex bibtex pdflatex pdflatex进行编译main.tex
,一切正常。但其主要目标subfiles
是允许子文件编译,我无法弄清楚如何chapter1.tex
在定义引用的情况下以这种方式进行编译。
有人能发布允许这样做的确切更改吗(使用 bibtex)?subfiles
文档中的“提示”对我来说不够。(我试过了,\subfix
但没有成功。)
答案1
如果我们运行bibtex chapter1
(运行之后pdflatex chapter1
),我们得到
This is BibTeX, Version 0.99d (MiKTeX 2.9.7380 64-bit) The top-level auxiliary file: chapter1.aux I found no \bibdata command---while reading file chapter1.aux I found no \bibstyle command---while reading file chapter1.aux
因此 BibTeX 抱怨不知道采用哪种样式以及.bib
访问哪个文件。本质上,这是因为chapter1.tex
既没有\bibliographystyle
调用来设置参考书目样式,也没有\bibliography
调用来告诉 BibTeX.bib
要使用哪个文件。子文件可以读取其父级的序言,但不能读取文档正文,因此它永远看不到中的\bibliographystyle{unsrt}
and 。\bibliography{\jobname}
main.tex
我们需要一种方法来告诉 BibTeX 有关样式和.bib
文件的信息。
对于简单的参考书目样式,因为\bibliographystyle
可以在序言中使用,所以你可以让你的main.tex
阅读
\documentclass{report}
\usepackage{subfiles}
\bibliographystyle{unsrt}
\begin{document}
\subfile{chapter1.tex}
\bibliography{mybibfile}
\end{document}
但这仍然chapter1.tex
没有意识到\bibliography
。不幸的是,不可能简单地移到\bibliography
序言中,因为(使用 BibTeX)\bibliography
必须在打印参考书目的地方使用。
如果要使用有效引文单独编译文件,则需要\bibliography
调用。但只需添加到就会导致两个参考书目(和/或错误)。理想情况下,我们会找到一种方法来检查我们是单独编译子文件还是在完整文件的上下文中编译。我在文档中没有找到对此的官方检查,但我认为这将是一个有用的补充,所以我不得不自己进行测试来复制:如果是单独编译的,则该类将是,如果它是在类的上下文中编译的,则不同。chapter1.tex
\bibliography{mybibfile}
chapter1.tex
main.tex
chapter1.tex
main.tex
\@ifclassloaded
chapter1.tex
subfiles
main.tex
因此,我们在这里:\subfilesbibliography
在文件单独编译时创建参考书目,但在主文档中编译时不创建参考书目。
main.tex
\documentclass{report}
\usepackage{subfiles}
\bibliographystyle{unsrt}
\makeatletter
% curse you, \@onlypreamble\@ifclassloaded
\newcommand*{\subfilesbibliography}[1]{%
\expandafter\ifx\csname [email protected]\endcsname\relax
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
{\bibliography{#1}}
{}%
}
\makeatother
\begin{document}
\subfile{chapter1.tex}
\bibliography{mybibfile}
\end{document}
chapter1.tex
\documentclass[main.tex]{subfiles}
\begin{document}
\chapter{My Title}
\cite{key} % the problem
\subfilesbibliography{mybibfile}
\end{document}
请注意,我使用固定文件名而不是\jobname
,因为的变量性质\jobname
会使事情变得更加复杂。