【问题标题】:Adding a new bibliography style with R Markdown and TinyTex使用 R Markdown 和 TinyTex 添加新的书目样式
【发布时间】:2020-06-12 08:14:22
【问题描述】:

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

我需要遵循语言学的统一样式表,在 Github here 上有一个 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
  • references.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}

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 标头创建了一个等效的最小 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 中编译它(使用 @987654337 @ 和 sp-authoryear-comp.cbx 文件添加)。我重现了同样的错误。

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

【问题讨论】:

  • kpsewhich biblatex-sp-unified.bbx 在终端中的输出是什么?如果不返回文件的路径,我会尝试sudo mktexlsr
  • kpsewhich 返回kpsewhich: command not found。这很奇怪,因为 tlmgr 说 kpathsea 已经安装(tlmgr install: package already present: kpathsea)。 which kpsewhich 返回/usr/local/bin/kpsewhich,它位于$PATH
  • 你可以尝试使用完整路径,即/usr/local/bin/kpsewhich biblatex-sp-unified.bbx吗?
  • 您使用的是rmarkdownpandoc 的哪个版本?您的示例分别适用于 2.1 和 2.7.3 版本。
  • 我认为更新现有答案以包含此信息会更有意义。

标签: r latex r-markdown biblatex tinytex


【解决方案1】:

更新:这似乎是使用过时版本的 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 最初建议我在 cmets 中检查我的 R Markdown/Pandoc 版本。如果您对他的 cmets 也有用,请给他一个赞。


问题回顾:

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

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

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 标头中使用 biblatexoptions,而是简单地使用 citation_package: biblatex 编织它(并且没有额外的选项)。我还添加了keep_tex: yes。然后,我打开生成的 tex 文件,找到了 \usepackage{bibtex} 命令并添加了所需的选项,所以它显示为 \usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}

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

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2021-03-18
    • 2020-09-22
    • 2017-01-14
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多