\documentclass{article}
\bibliography{honoursbib.bib}
\begin{document}
Hello, this is a test.\cite{Jensen2012}
\end{document}
我得到了 Jensen2012 的问号。我正在使用 Zotero(带有 betterbib(la)tex)来构建 bib 文件,并且我使用 texstudio。Texstudio 似乎能够读取 bib 文本,因为我获得了参考书目的自动完成建议。
答案1
从你的问题来看,你似乎是 LaTeX 的新手,因为你做了一些非常容易理解和容易纠正的假设和错误。
LaTeX 不像文字处理器或应用程序那样将所有内容集成到一个程序中。它更像是一家出版公司,其中有许多不同的程序可以做许多略有不同的事情。
地下室有两个部门:TeX,一种排版机,它通过一系列工具增强,形成了我们所说的 LaTeX。它处理一个文本文件,该文件以各种方式标记,以告诉它如何格式化文档。它不关心该文本文件是如何生成的。只要给它一个标记的文件并告诉它排版,它就会非常顺利地运行(例如在终端中)。通常,这个标记文件的扩展名为.tex
。
隔壁是书目部门。它的工作是与 TeX 合作,生成格式正确的书目。它有一个老旧但可靠的机器,称为 BibTeX,还有一个较新的机器,称为 BibLaTeX/Biber。它需要一个额外的文件,其中包含可能被引用的作品的书目信息,扩展名为.bib
。它与 TeX 协同工作,如中所述关于引用失败的问题。
地下室里还有一些其他较小的部门,负责索引和词汇表等事务。与参考书目部门一样,他们与 TeX 的合作非常密切。实际上,在将文档定稿时,这些不同的部门通常必须将文件从一个部门传递到另一个部门:从地下室到最终形式的标记文档有时需要通过 TeX 和其他部门进行多次“传递”。
所有这些都可以“手动”完成,只需使用最基本的文本编辑器和命令行即可。这确实是“老派”方式。但为了让用户的生活更轻松,楼上有很多机构帮助用户与楼下脾气暴躁的技术人员进行互动。这些机构以不同的方式帮助生成以 TeX 及其同事喜欢的方式标记的文档,然后将其传递到楼下进行排版。这就是人们在谈论“前端”时所描述的。最终,这些机构所做的就是以 TeX 及其同事希望看到的格式(希望如此)生成文件,将它们交给排版,然后将结果呈现给用户。它们都以略有不同的方式完成。TeXstudio 就是其中之一(还有其他程序,我们都有自己的偏好)。 Zotero 最终是另一种:它只是将一组参考资料以(某些人!)认为方便的格式保存,然后将其以他们喜欢的格式放在参考书目部门的一种方式。这些“前端”都不负责楼下发生的事情,它们在与楼下的交互方面做得好或坏。
就您而言,您遇到的第一个问题是您没有按照 TeX 和 bibTeX 希望看到的方式标记文档。
\documentclass{article}% Yup. That's there.
% TeX sees this and knows a lot about what the
% document should look like.
\bibliography{honoursbib.bib} % Not happy. TeX and bibTeX want to see
% this at the point in the document where
% you want the bibliography to be printed.
% But everything that comes before
% \begin{document} is part of the
% "preamble", a set of /general/ rules
% about the document, not something to
% print out. So this is too soon. TeX
% can't "put" a bibliography here.
%
% This may seem counterintuitive: and
% indeed the more modern machine likes to
% be told earlier what file you are going
% to use for your citations.
%
% Also, they don't really want to see the
% .bib extension on this. The /know/ it's
% got to be a .bib file, because that's all
% they can handle. Again, this seems silly,
% and the more modern Biber /does/ want it.
\begin{document}% Good! Now TeX knows it's looking at stuff you want
% to have typeset.
Hello, this is a test.\cite{Jensen2012}% Fine. TeX is happy. The first
% bit is some stuff to typeset. TeX
% doesn't care about the stuff in
% in the \cite command. When it
% gets to it it sees that bibTeX
% hasn't yet told it how to cite
% "Jensen2012", so it makes a note
% to bibTeX (on a different file)
% "Work out how to cite this,
% please", and puts a question-mark
% in the file.
\end{document}% TeX is happy enough, but because it hasn't been told to
% print a bibliography, it doesn't bother to tell bibTeX
% where to look for citations! And it also doesn't have
% anything it can use to tell bibTeX HOW to format them.
所以当这一切结束时,TeX 给 bibTeX 写了一条注释:“请告诉我如何引用‘Jensen2012’”:但是它并没有告诉它在哪里查找该参考文献,也没有告诉它如何格式化它。
此时需要做的是,您(或 TeXstudio)也运行 bibTeX。然后应该发生的是,bibTeX 会向 TeX 写一条注释,说“下次排版时,这里是处理‘引用’的方法,这里是要打印的参考书目”。要使其工作,您需要运行 bibTeX,然后当然再次运行 TeX,这样它才能真正遵循这些说明。TeXstudio 肯定会提供一种简单的方法来做到这一点(似乎在“工具”按钮下)。但对于您来说,它无论如何都会失败,因为无论如何您都没有在文档中包含正确的信息来告诉 bibTeX 如何处理引用!
如果你运行 bibTeX 并查看它的投诉,你会看到:
I found no \bibdata command% <- I don't know where to look for data
I found no \bibstyle command% <- And I don't know how to format it
因此正确的最小文档看起来像这样。
\documentclass{article}
\begin{document}
Hello, this is a test.\cite{Jensen2012}
\bibliographystyle{plain}% When it sees this, TeX writes a note to tell
% bibTeX what sort of bibliography you want.
\bibliography{honoursbib}% This tells TeX to print the bibliography (if
% bibTeX has done its work) or to write a note to
% bibTeX telling it where to find the references
\end{document}
那么你将需要:
运行一次 TeX,以便它能够提取需要传递给 bibTeX 的信息。此时,您/期望/会出现一些问号,因为在 TeX 读取完该内容之前,它不知道要请求什么。
运行 bibTeX,它将快速找到该
.bib
文件(它现在知道如何找到它)并查看一个名为的文件plain.bst
(它告诉它引用应该是什么样的)并生成 TeX 可以排版的内容。再次运行 TeX,让所有内容正确排序。根据引用的风格,您可能需要多次运行它。无论如何,您几乎总是需要多次运行 TeX,因为有些其他事情(如内部交叉引用和目录)TeX 至少要先生成文档一次才能完成。
一旦你理解了幕后发生了什么,你就更容易弄清楚如何哄骗你的特定“前端”为你做正确的事情。这是关于 LaTeX 的一个普遍事实,尽管有点令人沮丧。我认为这是一个非常合理的教程,你可能会觉得有用。LaTeX 教程中的 bibtex 教程。
(顺便说一句,为了节省时间,我在回答这个问题时一直使用“TeX”,而实际上我应该说“LaTeX”。不要在任何这些问题上使用“纯 TeX”。纯 TeX 是一个真正粗鲁的角色,它徘徊在印刷店的后面,做着伟大的工作——但你不会想直接和它交谈。)