首页 > 解决方案 > 使用 R Markdown 和 TinyTex 添加新的书目样式

问题描述

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

我需要遵循语言学的统一样式表,在这里Github 上有一个 Biblatex 实现,其中包含一个 .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 存储库中的常规安装说明,我认为 .bbx 和 .cbx 文件就足够了。

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

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

更新:问题似乎来自 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}
}

pdflatex我使用命令序列, biber, pdflatex,成功编译了这个示例pdflatex。因此,我的本地 TeX 安装似乎知道我添加的biblatex-sp-unified.bbxsp-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.bbxsp-authoryear-comp.cbx文件)。我重现了同样的错误。

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

标签: rlatexr-markdownbiblatextinytex

解决方案


更新:这似乎是使用过时版本的 R Markdown 和/或 Pandoc 的问题。

我正在使用rmarkdown包 v.1。在撰写本文时,最新版本是 2.1。

我更新了我的所有软件包并更新了 Rstudio(目前与 Pandoc v2.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 编写文档,并且我有一种特殊的引用样式,我想将其与 biblatex 一起使用。我有一个定义样式.bbx.cbx文件,可以在 Github 上找到(上面链接)。问题是文档无法编译,说 biblio/citation 样式未定义(即使样式文件位于项目文件夹本身中)。

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

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

被转换为乳胶命令:

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

我不知道为什么,但是当包含这个命令时,它会产生我观察到的错误。

安装新的 Biblatex 样式:

我发现 TeX在我的目录中时不知道.bbxand文件(这是我希望根据 Github 安装说明放置它们的位置)。.cbx~/Library/TinyTex/texmf-local/tex/latex/biblatex

为了获得系统识别的引用样式,我将.bbx.cbx文件分别放在里面~/Library/TinyTex/texmf-dist/tex/latex/biblatex/bbx~/Library/TinyTex/texmf-dist/tex/latex/biblatex/cbx。然后,在终端中,我跑了sudo mktexlsr.

(或者,仅用于特定文档,.bbxand.cbx文件可以简单地与 R Markdown 文件一起保存在项目目录中)

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

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

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


推荐阅读