我正在使用R Markdown和TinyTex编写论文,并使用Biblatex进行引用。它可以使用默认的引用样式很好地工作,但是我需要为我要写的期刊添加自定义书目和引用样式。
我需要遵循《语言学统一样式表》,在Github here上有Biblatex实现,其中包含.bbx和.cbx文件。
我已经尝试将这些.bbx和.cbx文件添加到Library/TinyTex/texmf-local/tex/latex/biblatex
内部的TinyTex本地副本中。我的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.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编写文档,我有一种特殊的引用样式,我想将其与biblatex一起使用。我有一个.bbx
和.cbx
文件来定义样式,可以在Github上找到(上面链接)。问题在于文档无法编译,说明书目/引文样式未定义(即使样式文件位于项目文件夹本身中)。
我发现问题是由于我将选项传递给biblatex的方式引起的。在我的YAML标头中,该行:
biblatexoptions: [bibstyle=biblatex-sp-unified, citestyle=sp-authoryear-comp]
被转换为乳胶命令:
\ExecuteBibliographyOptions{bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp}
我不确定为什么,但是当包含此命令时,它会产生我观察到的错误。
[我还发现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文件保存在项目目录中]
然后,我没有在R Markdown文档的YAML标头中使用biblatexoptions
,而是仅将其与citation_package: biblatex
结合在一起(没有其他选项)。我还添加了keep_tex: yes
。然后,我打开生成的tex文件,找到\usepackage{bibtex}
命令并添加所需的选项,因此它显示为\usepackage[bibstyle=biblatex-sp-unified,citestyle=sp-authoryear-comp]{biblatex}
。
最后,我在终端的tex文件中运行了pdflatex
和biber
。显然远非理想,但从技术上讲,它将产生所需的输出。