如何使用 bibtex 引文编译子文件?

如何使用 bibtex 引文编译子文件?

考虑以下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.texmain.texchapter1.texmain.tex\@ifclassloadedchapter1.texsubfilesmain.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会使事情变得更加复杂。

相关内容