r - 在 Rmd YAML 中使用 `list.files()` 作为引用书目字段

标签 r knitr

我需要一些帮助来使用 list.files() 函数自动列出 Rmd YAML 中引用书目字段的 ../bib 目录中的所有 *.bib 文件。

我在 ../bib 目录中有三个 bib 文件(“a.bib”、“b.bib”、“c.bib”)。 无需在 YAML 的引用书目字段中手动输入每个文件名,我想自动解析每个 bib 文件名及其该字段的相对路径,这样我只需在需要时在“bib”目录中添加更多 bib 文件即可更多引用。 我尝试了一些可能的代码,如下所示;然而,它失败了。任何帮助将不胜感激。

---
title: "Test Document"
output: pdf_document
bibliography: ['`r paste0("bib/", list.files("bib", pattern = "(*.bib)$"))`']
---


# Intro

This is test.

我希望 YAML 中的 bibliography 字段填充现有的 *.bib 文件名列表(及其相对路径),如下所示:

bibliography: ["bib/a.bib", "bib/b.bib", "bib/c.bib"]

最佳答案

您似乎正在使用单引号来指示 YAML header 中的可执行 R 代码,但我尝试过的似乎都不起作用。这可能是不可能的...

为什么不创建一个新的合并引用书目,而不是尝试执行引用 YAML header 中每个 .bib 文件的表达式。

要创建合并引用书目,您可以使用 bib2df包裹。

尝试以下代码:

# Load the bib2df library.
library(bib2df)

# Set path to .bib files. 
bib_path <- paste0(getwd(),"/bib")

# Create vector of all .bib files. 
bib_refs <- list.files(path=bib_path,pattern = ".bib")

# Create an empty list for storing bib data frames. 
bibs_list <- list()

# Loop through bib_refs and store as df in bibs_list
for (i in 1:length(bib_refs)){
  ref_path <- paste0(bib_path,"/",bib_refs[i])
  bibs_list[[i]] <- bib2df(ref_path)
  }

# bind dfs in list.
bibs_df <- do.call(rbind,bibs_list)

# Create new merged bibliography
df2bib(bibs_df, file = paste0(bib_path,"/","bibliography.bib"))

现在您可能需要指定 .bib 文件的路径,该路径与您渲染 .R 或 .Rmd 文件的工作目录不同。为此,我将 YAML header 更改为如下所示:

bibliography: D:\\Documents\\R\\StackOverflow\\bib\\bibliography.bib

关于r - 在 Rmd YAML 中使用 `list.files()` 作为引用书目字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277774/

相关文章:

r - 使用 fitdist 函数(fitdistrplus 包)估计比例和形状参数的缩放

r - R启动并显示错误消息

RMarkdown、R 笔记本和内存管理

Rmd/Kntir : Markdown citations in LaTeX environments

r - 如何在knitr中获取 block 名称?

r - Mongolite 未将带有列表列的数据框正确插入 Mongodb

R Plotly 无法从条形图中删除跟踪 0

r - 如何在 R Shiny 中获取用户信息

javascript - 具有指向代码查找 block 的内部链接

regex - 将不同的范围应用于 Sublime Text 语法定义文件中的相同字符