我正在撰写我的博士论文,它被分成多个章节子文件,并将它们合并到一个主文件中,以方便编辑。
我尝试在子文件中实现引用,以便在编辑子文件时可以通过\biblio
在主文件中定义供子文件使用的命令来查看参考文献,如下所示:
\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}
每个章节子文件调用\biblio
如下:
%!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}
这在我的笔记本电脑上运行良好,但当我尝试在台式电脑上编译相同的脚本时,任何\cite{}
添加到我单独编译的子文件的新引用(使用 调用)都只会显示为问号,并显示警告“第 x 页上的引用‘citation’未定义”。更奇怪的是,如果我在笔记本电脑上编译它以使其工作,然后在台式电脑上重新编译它,新的引用就会显示出来。两台电脑都使用相同的相对文件路径(文件都保存到共享云存储中),都运行 Windows 10 和带有 TexStudio 编辑器的 MikTex。唯一的区别是,台式电脑上的软件包最近更新了。
有人知道问题出在哪里吗?提前致谢!
答案1
您的问题描述不完整,因此很难重现该问题。当我尝试重建该问题时,它成功了(使用最新的 TeX 发行版)。
一些建议:
当您单独排版子文件时,您必须执行与主文档相同的循环:
latex ...
,,,,bibtex ...
latex ...
latex ...
您所说的从另一台计算机返回并重新运行 latex 后排版就可以正常工作,这似乎没有足够的
latex
和运行bibtex
。在所有计算机上更新 LaTeX 发行版。这将解决许多问题,或者至少应该导致一致且可重现的行为。
请参阅第 3.3 节子文件文档,它解释了如何使用子文件中的可选参考书目来解决您的用例。
长期以来,
subfiles
它可以自行处理大多数路径调整情况,并\subfix
在无法执行时提供服务。
正如我在开始时所说的那样,您的文件似乎运行良好(如果我将它们完成为一个最小的工作示例),但设置可以简化如下,而不需要\main
和\biblio
:
% ThesisMasterfile.tex
\documentclass[12pt]{report}
\usepackage[numbers]{natbib}
\usepackage{subfiles}
\bibliographystyle{ieeetran}% set bibliographystyle for main and subfile
\begin{document}
\chapter{Chapter 1}
\subfile{ThesisSubfiles/Chapter 1}
\bibliography{references.bib}
\end{document}
% ThesisSubfiles/Chapter 1
\documentclass[../ThesisMasterfile]{subfiles}
\begin{document}
\section{Section 1}
Some text.
\ifSubfilesClassLoaded{%
\bibliography{../references}% file paths are always relative to the current main or subfile
}{}
\end{document}
如果你使用biblatex
and biber
,则必须添加
\addbibresource{\subfix{references.bib}}
到主文档的序言部分,并用 替换两次出现\bibliography{...}
的\printbibliography
。