r - 使用 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 示例:
- 主文件
- 参考文献.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 标头创建了一个等效的最小 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(目前与 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在我的目录中时不知道.bbx
and文件(这是我希望根据 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
.
(或者,仅用于特定文档,.bbx
and.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}
.
最后,我在终端中运行pdflatex
了biber
tex 文件。显然远非理想,但它在技术上会产生所需的输出。