问题描述
Stack Overflow 的类似情况问题
我的knitr版本为1.23,更新1.28仍无法改变出现的error,卸载或者升级我自己在官网下载的pandoc可以解决这个问题,但是我觉得是knit的指令逻辑有问题,不使用R内的pandoc而是使用我自己安装的pandoc。
使用Rstudio的knit按钮导出html,转换得到中间的.knit.md文件之后会调用pandoc,在这一步出错,调用pandoc的目标是"C:/Users/15510/AppData/Local/Pandoc/pandoc",我自己下载的官网pandoc
"C:/Users/15510/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS Learning_RMarkdown.utf8.md --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash+smart --output Learning_RMarkdown.html --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\15510\Documents\R\win-library\3.6\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\15510\AppData\Local\Temp\Rtmpy4rEnC\rmarkdown-str3acc60572d24.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --lua-filter "C:/Users/15510/Documents/R/win-library/3.6/rmarkdown/rmd/lua/pagebreak.lua" --lua-filter "C:/Users/15510/Documents/R/win-library/3.6/rmarkdown/rmd/lua/latex-div.lua"
output file: Learning_RMarkdown.knit.md
Error running filter C:/Users/15510/Documents/R/win-library/3.6/rmarkdown/rmd/lua/pagebreak.lua:
...uments/R/win-library/3.6/rmarkdown/rmd/lua/pagebreak.lua:18: module 'pandoc.utils' not found:no file 'pandoc.utils.lua' in pandoc's datadir
no field package.preload['pandoc.utils']
no file 'C:\Users\15510\AppData\Local\Pandoc\lua\pandoc\utils.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\lua\pandoc\utils\init.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\pandoc\utils.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\pandoc\utils\init.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\..\share\lua\5.3\pandoc\utils.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\..\share\lua\5.3\pandoc\utils\init.lua'
no file '.\pandoc\utils.lua'
no file '.\pandoc\utils\init.lua'
no file 'C:\Users\15510\AppData\Local\Pandoc\pandoc\utils.dll'
no file 'C:\Users\15510\AppData\Local\Pandoc\..\lib\lua\5.3\pandoc\utils.dll'
no file 'C:\Users\15510\AppData\Local\Pandoc\loadall.dll'
no file '.\pandoc\utils.dll'
no file 'C:\Users\15510\AppData\Local\Pandoc\pandoc.dll'
no file 'C:\Users\15510\AppData\Local\Pandoc\..\lib\lua\5.3\pandoc.dll'
no file 'C:\Users\15510\AppData\Local\Pand
一开始查了半天lua的问题,但是后来想起一开始使用knit没有问题,在手动安装pandoc到用户环境之后出现这个问题,于是卸载官方pandoc,之后可以正常使用。
正常使用的调用对象是C:/Program Files/RStudio/bin/pandoc/pandoc
,和Sys.getenv("RSTUDIO_PANDOC")
一致
但是其他软件要用pandoc,所以仔细观察日志,发现两次指令传的路径不一样,在安装官方pandoc到用户变量之后knit调用官方pandoc去了,所以应该不是pandoc的问题,而是调用错程序了
【此时的R内pandoc版本为1.19.2.1,我安装的pandoc为2.0.5】
正常使用的输出是这个,开头的参数和Sys.getenv("RSTUDIO_PANDOC")
一致:
"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS Learning_RMarkdown.utf8.md --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output Learning_RMarkdown.html --smart --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\15510\Documents\R\win-library\3.6\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\15510\AppData\Local\Temp\RtmpIDlLSs\rmarkdown-str1ac601d14b0.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
output file: Learning_RMarkdown.knit.md
后来把官网的pandoc(2.9.2.1)用管理员安装安装到全用户的环境变量里面,knit也可以正常运行,调用的是R的pandoc,knit不会调用电脑环境的pandoc。
所以为什么knit会运行用户path变量的pandoc而不是R内置的pandoc呢?
而且更奇怪的是当我同时安装在用户和管理员两个pandoc之后,传递的参数开头变成了C:/PROGRA1/Pandoc/pandoc并且可以运行,删去管理员的pandoc之后又会把路径变成user的pandoc然后生成失败。
这个问题我找了两个人的Windows电脑尝试复现,发现一个人的电脑出现类似的问题,使用的pandoc变路径为后来安装的官网版本pandoc(但是他的pandoc版本高,所以可以运行)。
Stack Overflow那个人的问题似乎也是这个情况。
如果一个人有安装旧版本的pandoc在用户路径内,knit调用非R内置pandoc是有可能出现问题的。
情况总结:
- 没有自己安装官网的pandoc:正常,指令开头为"C:/Program Files/RStudio/bin/pandoc/pandoc"
- 安装2.0.5的官网pandoc到我的用户user15510之后:失败,指令开头为C:\Users\15510\AppData\Local\Pandoc
- 删去这个,重新在全计算机path安装了一个pandoc之后:成功,指令开头为"C:/Program Files/RStudio/bin/pandoc/pandoc"
- 在user再同时安装一个pandoc:成功,指令开头为C:/PROGRA1/Pandoc/pandoc不是实际存在的路径
- 删除全计算机的pandoc,并重启Rstudio:失败,指令开头为C:\Users\15510\AppData\Local\Pandoc
- 如果用户path的pandoc是2.9高版本可以生成:成功,指令开头为C:\Users\15510\AppData\Local\Pandoc
我的环境
R带来的pandoc路径:
Sys.getenv("RSTUDIO_PANDOC")[1] "C:/Program Files/RStudio/bin/pandoc"
我曾经安装的pandoc路径:C:\Users\15510\AppData\Local\Pandoc
【在Windows 用户15510的用户变量】
后来安装的pandoc路径:C:\Program Files\Pandoc\
【系统变量】
R version 3.6.0 (2019-04-26)
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] knitr_1.23 Matrix_1.2-17 lubridate_1.7.4 wordcloud2_0.2.2
loaded via a namespace (and not attached):
[1] Rcpp_1.0.1 lattice_0.20-38 digest_0.6.20 grid_3.6.0 jsonlite_1.6
[6] magrittr_1.5 evaluate_0.14 highr_0.8 stringi_1.4.3 rticles_0.11
[11] rmarkdown_2.1 tools_3.6.0 stringr_1.4.0 htmlwidgets_1.3 rsconnect_0.8.13
[16] xfun_0.7 yaml_2.2.0 compiler_3.6.0 htmltools_0.3.6