【问题标题】:Modify a .bib file from R Markdown从 R Markdown 修改 .bib 文件
【发布时间】:2020-06-15 17:24:56
【问题描述】:

在下面的示例中,我从一大段代码生成包的参考书目。但是,一个包的 BibTeX 条目中存在错误。我可以手动修改此条目,但我的更改将在下次编织文件时被覆盖。

所以我想知道是否可以从R Markdown中的一个chunk修改.bib文件中的行,这样每次编织文件时都会自动更正条目。

例子:

---
title: "Cite R packages"
author: ''
date: ""
output:
  pdf_document
bibliography: mistakeref.bib
---

```{r echo=FALSE}
# If not installed yet: 
# install.packages("cem")
```

This is a citation of a paper: @R-cem 

```{r cite-packages, echo=FALSE}
knitr::write_bib("cem", file = "mistakeref.bib", tweak = TRUE)
```

mistakeref.bib 将由代码创建,但在包cem 的 Bibtex 条目中存在错误。我想更换:

author = {{Iacus} and Stefano M. and {King} and {Gary} and {Porro} and {Giuseppe}},

作者:

author = {Stefano M. Iacus and Gary King and Giuseppe Porro},

基本上,这将是 R 的一种自动“搜索和替换”。我在理解 this answer 时遇到了一些麻烦,我不确定它是否符合我想做的事情。

【问题讨论】:

  • 为什么不首先编辑 .bib 文件?无论如何尝试readLinesgsub
  • 我不明白你的问题,由于gsub 中的大括号,我对invalid regular expression 有一个错误。你能告诉我怎么做吗?我没有把它放在我的帖子中,但我的 .bib 文件中有几个包,只有一个有错误
  • 其实你可以用grep替换整行。

标签: r r-markdown


【解决方案1】:

使用readLines 读入.bib 文件。然后使用grep 来识别“坏”行(. 是一个特殊字符,所以我们需要使用\\. 进行转义)。然后使用cat 替换并保存。

l <- readLines("mybib.bib")
l[grep("Stefano M\\.", l)] <- 
  "  author = {Stefano M. Iacus and Gary King and Giuseppe Porro},"
cat(l, sep="\n", file="mybib1.bib")

只需扩展 grep 正则表达式,直到有一个匹配项。

【讨论】:

  • 理想情况下,您希望匹配要替换的 exact 行以避免误报。这里真的没有理由使用近似匹配。
  • @KonradRudolph 您可以轻松地将完全匹配放入grep
  • 但你的回答并没有做到这一点……
  • @KonradRudolph 所以 cmets 在帖子中添加了一些有用的东西,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2019-06-05
  • 2016-02-06
  • 2019-10-13
相关资源
最近更新 更多