使用 R Markdown 和 TinyTex 添加新的书目样式

Adding a new bibliography style with R Markdown and TinyTex

我正在使用 R Markdown 和 TinyTex 写一篇论文,使用 Biblatex 作为参考。它适用于默认的引用样式,但我需要为我正在为其写作的期刊添加自定义参考书目和引文样式。

我需要遵循语言学统一样式表,在 Github here 上有一个 Biblatex 实现,其中包含一个 .bbx 和 .cbx 文件。

我已经尝试将这些 .bbx 和 .cbx 文件添加到我的本地 TinyTex 副本中,在 Library/TinyTex/texmf-local/tex/latex/biblatex 中。我的 YAML header 包括:

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 存储库中的常规安装说明,我认为 .bbx 和 .cbx 文件就足够了。

我应该把 .bbx 和 .cbx 文件放在哪里,以便 tlmgr 可以找到它们? And/or 我需要采取哪些额外步骤才能在我的论文中使用这种样式?

============================================= =======================

更新:问题似乎出在 R Markdown 使用的 Pandoc LaTeX 模板上。

抛开 R Markdown,我创建了一个更小的最小 LaTeX 示例:

其中 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}

而references.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}
}

我使用命令序列 pdflatexbiberpdflatexpdflatex 成功编译了这个示例。因此,我的本地 TeX 安装似乎知道我添加的 biblatex-sp-unified.bbxsp-authoryear-comp.cbx 文件,并且可以很好地使用它们。

随后,我使用 YAML header:

创建了一个等效的最小 R Markdown 文档
title: "Untitled"
output:
  pdf_document:
    citation_package: biblatex
bibliography: references.bib
biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]

和body:

Something something [@darwin_origin_1859].

这一次,我收到了与之前相同的旧错误消息:

tlmgr search --file --global '/biblatex-dm.cfg'
! Package keyval Error: bibstyle undefined.

这似乎表明问题是由 Pandoc 的 LaTeX 模板中的某些内容引起的,但我不知道是什么。

只是为了确认它绝对是 Pandoc 模板而不是我自己的 installation/setup,我使用了上面编织最小 R Markdown 示例时生成的 .tex 文件,并尝试在 Overleaf 中编译它(添加了 biblatex-sp-unified.bbxsp-authoryear-comp.cbx 文件)。我重现了同样的错误。

虽然我认为我已经定位了问题,但我仍然非常想了解问题出在 Pandoc 模板中的内容和位置。我也很想知道是否有人有任何修复(除了使用不同的模板或自己编写之外)。

更新:这似乎是使用 out-of-date 版本的 R Markdown and/or Pandoc 的问题。

我使用的是 rmarkdown 软件包 v.1。在撰写本文时,最 up-to-date 版本是 2.1.

我更新了我的所有包和 Rstudio(目前与 Pandoc v2.3.1 一起发布)并且不再遇到问题。我还升级了 R(从 3.5.something 到 3.6.2)并在我使用它的时候做了一个新的 re-install tinytex,但我不确定这些东西是否对这个特定的有影响问题。

现在,当我将 biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp] 放入我的 YAML header 时,它会正确转换为 LaTeX 命令 \usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex},而不是如下所述的 \ExecuteBibliographyOptions 命令。

Ralf Stubner 最初建议我在评论中查看我的 R Markdown/Pandoc 版本。如果您对他的评论也有用,请给他点个赞。


问题回顾:

我正在用 R Markdown 编写文档,我有一种特殊的引用样式,我想将其与 biblatex 一起使用。我有一个定义样式的 .bbx.cbx 文件,可在 Github(上面链接)上找到。问题是文档无法编译,说 biblio/citation 样式未定义(即使样式文件位于项目文件夹本身)。

我发现问题是由我将选项传递给 biblatex 的方式引起的。在我的 YAML Header 中,行:

biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]

转换为 latex 命令:

\ExecuteBibliographyOptions{bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp}

我不确定为什么,但是当包含此命令时,它会产生我观察到的错误。

正在安装新的 Biblatex 样式:

我发现 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 文件一起保存在项目目录中)

原始的 hacky 答案(但请参阅上面的更新):

我没有在 R Markdown 文档的 YAML header 中使用 biblatexoptions,而是简单地用 citation_package: biblatex 编织了它(没有额外的选项)。我还添加了 keep_tex: yes。然后,我打开了生成的 tex 文件,找到 \usepackage{bibtex} 命令并添加了所需的选项,因此它显示为 \usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}.

最后,我运行 pdflatexbiber 在终端中的tex 文件。显然远非理想,但它在技术上会产生所需的输出。