Как я могу использовать URL для библиографического элемента YAML в документе RMarkdown?

Цель: я могу использовать URL для указания csl для моего документа в рамках моей темы YAML, и я хотел бы иметь возможность сделать то же самое для bibliography элемент.

Вопрос: возможно ли это?

Мотивация: использование URL-адресов для этих элементов, в отличие от прямых ссылок на файлы в моем рабочем каталоге, повышает воспроизводимость моего рабочего процесса рендеринга документов путем включения общедоступных .csl а также .bib файлы, которые также легко синхронизируются с одним центральным местоположением по мере их обновления (предостережение: если у репродуктора есть подключение к Интернету).

Неоптимальная альтернатива: альтернативой может быть включение .bib а также .csl файлы в рабочем каталоге, гарантируя, что они остаются в комплекте с проектом. Тогда они также доступны в автономном режиме. У этого подхода есть 2 недостатка:

  1. Это приведет ко многим копиям .bib а также .csl файлы на моем компьютере (копия для каждого проекта, в котором у меня есть документ для рендеринга)
  2. .bib файл генерируется автоматически с помощью менеджера ссылок и поэтому не может быть помещен в несколько мест (для разных проектов) без нарушения синхронизации между менеджером ссылок и .bib файл.

Демонстрация:

Вот рабочий пример использования URL для csl элемент (ecology.csl файл напрямую из официального репозитория 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

Изображение успешно отрендеренного PDF с URL на .csl файл

Вот нерабочий пример, пытаясь заполнить bibliography элемент с общедоступной веб-ссылкой на тот же reprex_library.bib файл хранится в моем Dropbox:

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 намеренно может быть "путем или URL-адресом файла стиля CSL", тогда как bibliography Элементом может быть только "путь или список путей YAML используемых файлов библиографии".

Я добавил теги pandoc и pandoc-citeproc к этому вопросу на случай, если он окажется связанным с этими частями рабочего процесса.

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.Rmd, foo_files каталог, который будет очищен после вязания Есть, вероятно, обстоятельства, когда knitr создам его, а потом мой dir.create приведет к предупреждению, но это необходимо в этом простом примере.

Другие вопросы по тегам