使用 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
- 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}
}
我使用命令序列 pdflatex
、biber
、pdflatex
、pdflatex
成功编译了这个示例。因此,我的本地 TeX 安装似乎知道我添加的 biblatex-sp-unified.bbx
和 sp-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.bbx
和 sp-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}
.
最后,我运行 pdflatex
和biber
在终端中的tex 文件。显然远非理想,但它在技术上会产生所需的输出。
我正在使用 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
- 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}
}
我使用命令序列 pdflatex
、biber
、pdflatex
、pdflatex
成功编译了这个示例。因此,我的本地 TeX 安装似乎知道我添加的 biblatex-sp-unified.bbx
和 sp-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.bbx
和 sp-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}
.
最后,我运行 pdflatex
和biber
在终端中的tex 文件。显然远非理想,但它在技术上会产生所需的输出。