Как использовать инструмент командной строки Rscript для создания книги в bookdown
Из-за функции перекрестных ссылок я использую bookdown
вместо rmarkdown
генерировать динамические отчеты. У меня есть более одного отчета для генерации, поэтому я составил R
скрипт для вызова bookdown:render_book
в for
цикл для генерации всех отчетов. К сожалению, это ошибка. Для простоты я построю один минимальный пример:
bookdown
файл для рендеринга (сохранен как index.Rmd
):
---
title: "test"
output: html_document
---
```{r test}
ext_var
```
build.R
:
ext_var <- "test.html"
bookdown::render_book("index.Rmd", output_file = ext_var) # it will call `rmarkdown::render`.
При использовании следующих команд: Rscript build.R
, он сгенерирует следующие сообщения об ошибках:
$ Rscript build.R
Error in rmarkdown::render(main, output_format, ..., clean = clean, envir = envir, :
'ext_var'
Calls: <Anonymous> -> render_cur_session -> <Anonymous>
Please delete _main.Rmd after you finish debugging the error.
Затем я изменил свой build.R
использовать rmarkdown::render
вместо:
ext_var <- "test.html"
rmarkdown::render("index.Rmd", output_file = ext_var)
Там не будет никакой ошибки. Поэтому я думаю, что могут быть некоторые проблемы, которые нужно исправить.
sessionInfo()
:
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RevoUtils_11.0.0 RevoUtilsMath_11.0.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.17 bookdown_0.7 digest_0.6.15 rprojroot_1.3-2 backports_1.1.2
[6] magrittr_1.5 evaluate_0.10.1 stringi_1.1.7 rstudioapi_0.7 rmarkdown_1.10
[11] tools_3.5.0 stringr_1.3.1 xfun_0.1 yaml_2.1.19 compiler_3.5.0
[16] htmltools_0.3.6 knitr_1.20
Также подал вопрос № 592 в rstudio/bookdown
репозиторий.
3 ответа
Как вы сами обнаружили, проблема была вызвана по умолчанию render_book(clean_envir = TRUE)
в твоем случае.
Однако, пожалуйста, обратите внимание, что bookdown::render_book()
не должен работать с выходными форматами, отличными от указанных в пакете bookdown. Другими словами, вы не должны ожидать html_document
формат для работы render_book
, Если вам нужна функция перекрестных ссылок, пожалуйста, используйте те выходные форматы, имена которых заканчиваются на 2
в пакете скидок (например, bookdown::html_document2
), и эти форматы предназначены для работы с rmarkdown::render()
, См. Раздел 3.4 в книге скидок для получения дополнительной информации.
После тщательного исследования bookdown::render_book
Функция, я нашел реальную причину этой ошибки. Эта функция установила один аргумент clean_envir
и его значение по умолчанию !interactive()
, Вот почему переменные среды исчезают при вязании с bookdown
с инструментом командной строки. Решение этой проблемы легко, просто установите clean_envir
как FALSE
т.е.
ext_var <- "test.html"
bookdown::render_book("index.Rmd", output_file = ext_var, clean_envir = FALSE)
Тогда это работает.
Bookdown нужно больше, чем один Rmd-файл, поэтому ошибка не Rscript
но с вашей настройкой.
Если у вас есть правильные настройки уценки, такие как
edd@rob:~/git/bookdown-demo(master)$ ls
01-intro.Rmd 05-summary.Rmd _bookdown.yml preamble.tex
02-literature.Rmd 06-references.Rmd index.Rmd README.md
03-method.Rmd book.bib LICENSE style.css
04-application.Rmd bookdown-demo.Rproj _output.yml toc.css
edd@rob:~/git/bookdown-demo(master)$
затем работает
Rscript -e 'bookdown::render_book("index.Rmd")'
делает то, что вы ожидаете. Я не уверен, что поддерживает bookdown с учетом выходного файла rmarkdown::render()
как вы обычно указываете в _bookdown.yml
,