我正在用R Markdown和TinyTex写一篇论文,用Bibratex作为参考。它可以与默认的参考样式配合使用,但我需要为我正在撰写的期刊添加一个自定义的参考书目和引文样式。
我需要遵循语言学的统一样式表,Github上有一个Bibliatex实现,其中包含一个.bbx和.cbx文件。
我已经尝试将这些.bbx和.cbx文件添加到我的本地TinyTex副本中,位于Library/TinyTex/texmf-local/tex/latex/biblatex
中。我的YAML标题包括:
output:
pdf_document:
citation_package: biblatex
biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]
当我编织文件时,我得到以下错误:
tlmgr search --file --global '/biblatex-dm.cfg'
! Package keyval Error: bibstyle undefined.
我没有biblatex-dm.cfg
文件(我也不知道那会是什么)。根据该风格的Github repo中的常规安装说明,我本以为.bbx和.cbx文件就足够了。
我应该把.bbx和.cbx文件放在哪里,以便tlmgr可以找到它们?和/或我需要采取哪些额外步骤才能在论文中使用这种风格?
=============================================
更新:问题似乎来自R Markdown使用的Pandoc-LaTeX模板。
抛开R Markdown,我创建了一个较小的最小LaTeX示例:
- main.tex
- 参考.bib
main.tex所在位置:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}
addbibresource{references.bib}
begin{document}
Something something citep{darwin_origin_1859}.
printbibliography
end{document}
参考.bib是:
@book{darwin_origin_1859,
location = {London},
title = {On the Origin of Species by Means of Natural Selection},
publisher = {J. Murray},
author = {Darwin, Charles},
date = {1859}
}
我使用命令pdflatex
、biber
、pdflatex
、pdflatex
的顺序成功地编译了这个示例。因此,我的本地TeX安装似乎知道我添加的biblatex-sp-unified.bbx
和sp-authoryear-comp.cbx
文件,并且可以很好地使用它们。
随后,我创建了一个等价的带有YAML标题的最小R Markdown文档:
title: "Untitled"
output:
pdf_document:
citation_package: biblatex
bibliography: references.bib
biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]
和机身:
Something something [@darwin_origin_1859].
这一次,我收到了以前相同的错误消息:
tlmgr search --file --global '/biblatex-dm.cfg'
! Package keyval Error: bibstyle undefined.
这似乎表明问题是由Pandoc的LaTeX模板中的某些内容引起的,但我不知道是什么。
为了确认它肯定是Pandoc模板,而不是我自己的安装/设置,我采用了在上面编织最小R Markdown示例时生成的.tex文件,并尝试在Overleaf中编译它(添加了biblatex-sp-unified.bbx
和sp-authoryear-comp.cbx
文件)。我又犯了同样的错误。
尽管我认为我已经将问题本地化,但我仍然非常想了解Pandoc模板中的问题是什么以及在哪里。我也很想知道是否有人有任何修复(除了使用不同的模板或编写自己的模板)。
更新:这似乎是使用R Markdown和/或Pandoc的过时版本的问题
我使用的是rmarkdown
软件包v.1。在撰写本文时,最新版本是2.1。
我更新了我的所有软件包,并更新了Rstudio(目前与Pandocv2.3.1一起提供),不再遇到问题。我还升级了R(从3.5.something到3.6.2),并在我工作的时候重新安装了tinytex,但我不确定这些东西是否对这个特定的问题有影响。
现在,当我把biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]
放在YAML头中时,它被正确地转换为LaTeX命令usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}
,而不是下面描述的ExecuteBibliographyOptions
命令。
Ralf Stubner最初建议我在评论中查看我的R Markdown/Pandoc版本。如果他的评论也有用,请投赞成票。
问题回顾:
我正在用R Markdown写一份文件,我有一个特别的参考风格,我想和biblax一起使用。我有一个定义样式的.bbx
和.cbx
文件,可以在Github上找到(链接到上面)。问题是文档无法编译,称书目/引文样式未定义(即使样式文件在项目文件夹中)。
我发现问题是由我将选项传递给biblax的方式引起的。在我的YAML标题中,行:
biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]
转换为latex命令:
ExecuteBibliographyOptions{bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp}
我不知道为什么,但当包含这个命令时,它会产生我观察到的错误。
安装新的Bibratex样式:
我发现TeX不知道.bbx
和.cbx
文件在我的~/Library/TinyTex/texmf-local/tex/latex/biblatex
目录中(根据Github安装说明,我希望将它们放在那里)。
为了使系统能够识别引用样式,我将.bbx
和.cbx
文件分别放置在~/Library/TinyTex/texmf-dist/tex/latex/biblatex/bbx
和~/Library/TinyTex/texmf-dist/tex/latex/biblatex/cbx
中。然后,在终端中,我运行了sudo mktexlsr
。
(或者,仅用于特定文档,.bbx
和.cbx
文件可以简单地与R Markdown文件一起保存在项目目录中)
原始破解答案(但请参阅上面的更新):
我没有在R Markdown文档的YAML头中使用biblatexoptions
,而是简单地用citation_package: biblatex
编织它(没有额外的选项)。我还添加了keep_tex: yes
。然后,我打开生成的tex文件,找到usepackage{bibtex}
命令并添加所需的选项,这样它就读取了usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}
。
最后,我在终端的tex文件上运行了pdflatex
和biber
。显然远非理想,但它将在技术上产生所需的产出。