【问题标题】:Using `list.files()` for bibliography field in Rmd YAML在 Rmd YAML 中使用“list.files()”作为参考书目字段
【发布时间】:2019-01-20 15:07:30
【问题描述】:

我需要一些帮助来使用list.files() 函数自动列出../bib 目录中Rmd YAML 中的书目字段的所有*.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"]

【问题讨论】:

    标签: r knitr


    【解决方案1】:

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

    与其尝试执行引用 YAML 标头中每个 .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 标头更改为如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 2019-05-16
      • 1970-01-01
      • 2020-08-10
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多