【问题标题】:The behavior of the knitr button in RStudio when rendering an Rmd file sitting inside a blogdown static folder渲染位于 blogdown 静态文件夹中的 Rmd 文件时,RStudio 中 knitr 按钮的行为
【发布时间】:2021-04-25 11:32:51
【问题描述】:

我有一个要转换为 pdf 文件的 Rmd 文件。目前它位于“静态”文件夹的子文件夹中,该文件夹是我的博客站点结构的一部分,由 blogdown 包创建。问题是,当我在 RStudio 中点击“Knit”按钮时,它会调用rmarkdown::render_site(...),而我期待的是rmarkdown::render(...)。我确实有一个文件R/build.R,其中包含一行命令blogdown::build_dir("static"),所以这对我来说很奇怪。当我尝试转换不同文件夹中的其他 Rmd 文件(与我的博客文件夹/文件无关)时,一切正常。

为了得到我想要的,我目前正在控制台中输入rmarkdown::render("myfile.Rmd"),或者我正在使用无限月亮阅读器,但都没有“编织”按钮那么方便:(

以下是xfun::session_info('blogdown')更新blogdown包到ver 1.1后的输出:

> xfun::session_info('blogdown')
R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363), RStudio 1.4.1103

Locale:
  LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
  LC_NUMERIC=C                           LC_TIME=English_United States.1252    

Package version:
  base64enc_0.1.3 BH_1.75.0.0     blogdown_1.1    bookdown_0.21   digest_0.6.27   evaluate_0.14   glue_1.4.2     
  graphics_4.0.3  grDevices_4.0.3 highr_0.8       htmltools_0.5.0 httpuv_1.5.4    jsonlite_1.7.2  knitr_1.30     
  later_1.1.0.1   magrittr_2.0.1  markdown_1.1    methods_4.0.3   mime_0.9        promises_1.1.1  R6_2.5.0       
  Rcpp_1.0.5      rlang_0.4.9     rmarkdown_2.6   servr_0.21      stats_4.0.3     stringi_1.5.3   stringr_1.4.0  
  tinytex_0.29    tools_4.0.3     utils_4.0.3     xfun_0.20       yaml_2.2.1     

编辑: 我不确定这是否会有所帮助,但我想转换为 pdf 的 HW3.Rmd 文件如下所示:

---
title: "Homework 3"
subtitle: "due Feb 2, 2021"
output:
  pdf_document: default
---

```{r}
1 + 1
```

当我将此文件保存在C:/Users/jungl/Dropbox/GitHub/blog2020/static/Drexel_2021/HW3.Rmd 中的文件夹中时(这里C:/Users/jungl/Dropbox/GitHub/blog2020 是保存所有由blogdown 创建的文件夹/文件的根文件夹),“编织”按钮意外地调用rmarkdown::render_site(...)。但是,当我在文件夹中复制与C:/Users/jungl/Dropbox/test/HW3.Rmd 相同的HW3.Rmd 时,“Knit”按钮按预期工作并调用rmarkdown::render(...)。所以看起来 RStudio 的“Knit”按钮以某种方式自动确定它是否应该调用 rmarkdown::render_site(...)rmarkdown::render(...) 基于工作中的 Rmd 文件是否位于包含 blogdown-generated 的根文件夹的(子)文件夹中文件夹/文件。

编辑: Github 存储库位于https://github.com/junglee0713/blog2020,我刚刚检查过同样的问题仍然存在。我要转换为PDF的HW3.Rmd文件在https://github.com/junglee0713/blog2020/tree/master/static/Drexel_2021

另一个编辑:安装 blogdown 的开发版本似乎可以解决问题(下面的输出,请注意它仍然调用 rmarkdown::render_site(...)),但还有另一个问题。它将同一目录中的其他 Rmd 文件(例如 HW1.RmdHW2.Rmd)渲染为相应的 PDF 文件。

==> rmarkdown::render_site('C:/Users/jungl/Dropbox/GitHub/blog2020/static/Drexel_2021/HW3.Rmd',  encoding = 'UTF-8');
  |..................                                                    |  25%
  ordinary text without R code

  |...................................                                   |  50%
label: setup (with options) 
List of 1
 $ include: logi FALSE



processing file: HW3.Rmd
  |....................................................                  |  75%
  ordinary text without R code

  |......................................................................| 100%
label: unnamed-chunk-1 (with options) 
List of 1
 $ eval: symbol F


"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS HW3.utf8.md --to latex --from markdown+autolink_bare_uris+tex_math_single_backslash --output HW3.tex --lua-filter "C:\Users\jungl\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\jungl\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\latex-div.lua" --self-contained --highlight-style tango --pdf-engine pdflatex --variable graphics --variable "geometry:margin=1in" 
output file: HW3.knit.md


Output created: HW3.pdf
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

因此,每次我将HW3.Rmd 渲染为 PDF 时,我也会收到 HW1.pdfHW2.pdf 的主动更新(如您所见,HW3.Rmd 中没有任何 ggplot 图形,并且输出警告使用 binwidth 选择更好的值。HW2.Rmd 确实有 geom_histogram())。对我来说更有趣的是,在HW1.RmdHW2.RmdHW3.Rmd所在的文件夹中,还有其他我转换为HTML的Rmd文件(比如Drexel_2021_Lecture_1.RmdDrexel_2021_Lecture_2.RmdDrexel_2021_Lecture_3.Rmd- - 它们是 xaringan 幻灯片)并且不会受到编织的影响。

【问题讨论】:

  • 如果您能在帖子中提供xfun::session_info('blogdown') 的输出,将会非常有帮助。
  • 谢谢!我将在下面发布来自 xfun::session_info('blogdown') 的输出。但是,我仍然有同样的问题。以下是我点击“Knit”按钮后得到的结果:==> rmarkdown::render_site('C:/Users/jungl/Dropbox/GitHub/blog2020/static/Drexel_2021/HW3.Rmd', encoding = 'UTF- 8');渲染静态/Drexel_2021/HW3.Rmd...完成。
  • 以后,请将会话信息添加到您的原始帖子中(您可以随时编辑),而不是将其作为答案发布,因为它不是答案。这次我为你做了。现在我能请你提供一个可重现的例子吗?因为这在我自己的测试中无法重现。
  • 感谢一辉编辑我的原帖——现在我根据你的建议从答案中删除了xfun::session_info('blogdown')
  • 不客气!如果您提供可重现的示例,我将更容易为您提供帮助。

标签: r r-markdown knitr render blogdown


【解决方案1】:

当你点击“Knit”按钮时,blogdown会首先调用rmarkdown::render_site(),但是这个函数是actually calls rmarkdown::render() eventually

如果单击 Knit 按钮时它没有将您的 Rmd 文件编译为 PDF,请确保您使用的是最新版本的 blogdown,因为这听起来像是我已修复的错误几个月前 (when in doubt, try to update packages)。

如果你安装当前开发版本的blogdown(安装后重启R):

install.packages('blogdown', repos = c(
  rstudio = 'https://rstudio.r-universe.dev',
  CRAN = 'https://cloud.r-project.org'
))

当你点击 Knit 按钮时,你会在 R Markdown 选项卡中看到详细的编织日志:

【讨论】:

  • 我将 blogdown 包更新到了​​ 1.1 版。还是一样的问题
  • 非常感谢!安装dev版本似乎解决了这个问题,但这次它也将同一目录中的一些其他Rmd文件渲染为PDF(也许之前版本的blogdown也是这种情况,我可能没有注意到) ,如原始帖子的新编辑部分所述。
  • 太棒了!我很高兴我们正在取得进展。它不应该渲染其他 Rmd 文件。这听起来像是R/build.Rblogdown::build_dir() 的问题。我想我知道如何解决它,明天我会研究它。
  • @Jung-JinLee 你可以重新安装开发版 blogdown (v1.1.7) 应该可以解决问题了。
  • 嗨 Yihui,问题完全解决了!! 非常感谢您迄今为止所付出的时间和精力,以及您的优秀软件包/书籍,这些软件包/书籍使整个 R 社区受益!
猜你喜欢
  • 2023-03-23
  • 2021-03-11
  • 2016-09-05
  • 2023-04-07
  • 2014-02-01
  • 1970-01-01
  • 2018-02-22
  • 2019-04-13
  • 2017-07-10
相关资源
最近更新 更多