2

目标:我能够csl在我的 YAML 前端中使用 URL 来指定我的文档,并且我希望能够对bibliography元素执行相同的操作。

问:这可能吗?

动机:为这些元素使用 URL,而不是直接链接到我的工作目录中的文件,通过合并公开可用的文件和在更新时也可以轻松同步到一个中心位置的文件,增强了我的文档呈现工作流程的可重复性.csl.bib警告:只要复制者有互联网连接)。

次优替代方案:替代方案可能是将.bib.csl文件包含在工作目录中,以确保它们与项目捆绑在一起。然后它们也可以离线使用。这种方法有两个缺点:

  1. 这将在我的计算机上产生多个.bib.csl文件的副本(我要在其中渲染文档的每个项目的副本)
  2. 该文件是通过引用管理器自动生成的,因此不能在不破坏引用管理器和文件.bib之间的同步的情况下将其放入多个位置(针对不同的项目) 。.bib

示范:

这是一个使用 csl元素 URL 的工作示例(ecology.csl文件直接来自官方 Citation Style Language GitHub 存储库:

reprex_library.bib

@Misc{Chang2015,
  Title                    = {shiny: Web Application Framework for R. R package version 0.12.1},

  Author                   = {Chang, W. and Cheng, J. and Allaire, JJ. and Xie, Y. and McPherson, J. },
  Year                     = {2015},

  Type                     = {Computer Program},
  Url                      = {http://CRAN.R-project.org/package=shiny}
}


@Article{RCoreTeam,
  Title                    = {R: A Language and Environment for Statistical Computing},
  Author                   = {{R Core Team}},
  Year                     = {2015},

  Type                     = {Journal Article},
  Url                      = {http://www.R-project.org}
}

reprex_paper_bib-direct_csl-link.Rmd

---
title: 'My Title'
author: "Me me me me!"
output: pdf_document
bibliography: reprex_library.bib
csl: https://raw.githubusercontent.com/citation-style-language/styles/master/ecology.csl
---

Application written in the R programming language [@RCoreTeam] using the Shiny framework [@Chang2015].

# REFERENCES

此输出成功:

processing file: reprex_paper_bib-direct_csl-direct.Rmd
  |.................................................................| 100%
  ordinary text without R code


/usr/local/bin/pandoc +RTS -K512m -RTS reprex_paper_bib-direct_csl-direct.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output reprex_paper_bib-direct_csl-direct.tex --template /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rmarkdown/rmd/latex/default-1.17.0.2.tex --highlight-style tango --pdf-engine pdflatex --variable graphics=yes --variable 'geometry:margin=1in' --filter /usr/local/bin/pandoc-citeproc 
output file: reprex_paper_bib-direct_csl-direct.knit.md


Output created: reprex_paper_bib-direct_csl-direct.pdf

.csl带有文件URL 的成功渲染 pdf 的图像

这是一个无效的示例,尝试使用指向我的 Dropboxbibliography中相同文件的公共 Web 链接填充元素:reprex_library.bib

reprex_paper_bib-link_csl-link.Rmd

---
title: 'My Title'
author: "Me me me me!"
output: html_document
bibliography: https://dl.dropboxusercontent.com/s/3e601ma7ji9iu9z/reprex_library.bib
csl: https://raw.githubusercontent.com/citation-style-language/styles/master/ecology.csl
---

Application written in the R programming language [@RCoreTeam] using the Shiny framework [@Chang2015].

# REFERENCES

这打破了这个输出:

|.................................................................| 100%
  ordinary text without R code


/usr/local/bin/pandoc +RTS -K512m -RTS reprex_paper_bib-link_csl-link.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output reprex_paper_bib-link_csl-link.tex --template /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rmarkdown/rmd/latex/default-1.17.0.2.tex --highlight-style tango --pdf-engine pdflatex --variable graphics=yes --variable 'geometry:margin=1in' --filter /usr/local/bin/pandoc-citeproc 


processing file: reprex_paper_bib-link_csl-link.Rmd
output file: reprex_paper_bib-link_csl-link.knit.md

Could not find bibliography file: https://dl.dropboxusercontent.com/s/3e601ma7ji9iu9z/reprex_library.bib
Error running filter /usr/local/bin/pandoc-citeproc:
Filter returned error status 1
Error: pandoc document conversion failed with error 83
Execution halted

这是我的R会话信息:

> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.2

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] compiler_3.4.2  backports_1.1.2 magrittr_1.5    rsconnect_0.8.5 rprojroot_1.3-2
 [6] htmltools_0.3.6 tools_3.4.2     rticles_0.4.1   yaml_2.1.16     Rcpp_0.12.13   
[11] stringi_1.1.5   rmarkdown_1.8.7 knitr_1.18      stringr_1.2.0   digest_0.6.14  
[16] evaluate_0.10.1

我不知道这是错误还是预期行为。如果是有意的,我不知道为什么。任何帮助将不胜感激!

编辑:

pandoc-citeproc从进一步阅读来看,也许这是在编织过程中调用的预期行为,使用--filter /usr/local/bin/pandoc-citeproc

pandoc-citeproc手册来看,似乎csl故意允许 YAML 元素是“CSL 样式文件的路径或 URL”,而该bibliography元素只能是“要使用的参考书目文件的路径或 YAML 路径列表”。

我已经在这个问题中添加了 pandoc 和 pandoc-citeproc 标签,以防它与工作流的这些部分相关。

4

1 回答 1

1

似乎可以在代码块中下载文件。我将示例文档放入Untitled.Rmd,然后运行它:

---
title: 'My Title'
author: "Me me me me!"
output: html_document
bibliography: Untitled_files/reprex.bib
csl: https://raw.githubusercontent.com/citation-style-language/styles/master/ecology.csl
---

Application written in the R programming language [@RCoreTeam] using the Shiny framework [@Chang2015].

```{r}
dir.create("Untitled_files")
download.file("https://dl.dropboxusercontent.com/s/3e601ma7ji9iu9z/reprex_library.bib", "Untitled_files/reprex.bib")
```

# REFERENCES

目录名Untitled_files很神奇Untitled.Rmd:因为foo.Rmdfoo_files是编织后要清理的目录。可能在某些情况下knitr会创建它,然后我dir.create会导致警告,但在这个简单的示例中是必要的。

于 2018-01-27T18:55:32.653 回答