r - 在 Sumatra PDF 阅读器中打开已编译的 .rnw 的自定义功能?
问题描述
自从更新到 Windows 10 后,如果 .rnw 文件有引用,我无法使用 Rstudio 中的“编译 PDF”按钮编译它们(我使用 natbib 包)。所以,我放弃了 Sweave 转而使用 Knitr。虽然不如编译 PDF 按钮方便,但该命令
knitr::knit2pdf('my_doc.rnw')
使用 R 代码、Latex 和引用编译 PDF 时不会出错。但是,与“编译 PDF”按钮不同的是,它不会在我首选的 PDF 预览器 Sumatra 中自动启动新编译的 PDF。我的问题是,knitr::knit2pdf 的源代码是否可以,即,
function (input, output = NULL, compiler = NULL, envir = parent.frame(),
quiet = FALSE, ...)
{
out = knit(input, output = output, envir = envir, quiet = quiet)
owd = setwd(dirname(out))
on.exit(setwd(owd))
if (is.null(compiler)) {
compiler = if (grepl("\\.rst$", out))
"rst2pdf"
else "pdflatex"
}
if (identical(compiler, "rst2pdf")) {
if (tolower(file_ext(out)) != "rst")
stop("for rst2pdf compiler input must be a .rst file")
rst2pdf(basename(out), ...)
}
else {
tinytex::latexmk(basename(out), engine = compiler, ...)
}
with_ext(out, "pdf")
}
每次运行时都会修改为启动和更新新编译的 PDFknitr::knit2pdf?
谢谢。
解决方案
我不建议尝试“修改” knit2pdf
——但您可以在编织后轻松地在 SumatraPDF 中打开您的 PDF。只需致电:
system2("C:/Program Files/RStudio/bin/sumatra/SumatraPDF.exe", args = "my_doc.pdf", wait = FALSE, invisible = FALSE)
您可能需要将路径调整为SumatraPDF.exe
. 当 PDF 更改时,SumatraPDF 会自动更新,因此您无需任何额外的努力即可查看更改。
如果您更喜欢使用 oneliner 来编织和打开 PDF:
knit2sumatra <- function(input) {
# "input" should be the filename WITHOUT extension
knitr::knit2pdf(paste0(input, ".Rnw"))
system2(
"C:/Program Files/RStudio/bin/sumatra/SumatraPDF.exe",
args = paste0(input, ".pdf"),
wait = FALSE,
invisible = FALSE
)
}
或者,只需将system2
调用放在 RNW 文件中的一个块(某处)中。SumatraPDF 将尝试过早打开 PDF - 但一旦编译完成,最终的 PDF 将可见。
推荐阅读
- c# - 使用映射值查找和替换子字符串
- c# - ApiExplorer:如何更改 IgnoreApi 的默认值
- python - 如何检查和计算数据帧一的值是否存在于其他数据帧中?
- ios - Html音频播放器音频停在中间
- php - Symfony 4 在注释中使用来自不同命名空间的实体
- python - 修改django测试通过django-otp登录
- c# - 如何以编程方式转到 VS 编辑器中的行/列?
- javascript - Vuejs:如何将 vue js prop 值作为值传递给 html 的属性?
- javascript - 使用 Flask "Uncaught SyntaxError: Unexpected token <" 为 create-react-app 提供服务
- react-native - 错误:捆绑失败:错误:无法解析模块`react-native