【问题标题】:rmarkdown::render() does not pass -shell-escape options from pandoc to pdflatexrmarkdown::render() 不会将 -shell-escape 选项从 pandoc 传递到 pdflatex
【发布时间】:2018-05-02 23:50:26
【问题描述】:

我想渲染一个 Rmarkdown 文件,它需要 pdflatex 中的 -shell-escape 选项或 pandoc 中的 --pdf-engine-opt=-shell-escape 选项。我在 YAML 标头中指定了 pandoc_args: "--pdf-engine-opt=-shell-escape",但 rmarkdown::render() 似乎按此顺序调用程序:

  1. knitr::knit() 到 *.md
  2. 编码转换为*.utf8.md
  3. pandoc 到 *.tex (pandoc mwe.utf8.md --to latex --output mwe.tex ...)
  4. pdflatex 转 *.pdf (pdflatex mwe.tex)

render() 在第 3 步和第 4 步之间丢失了我的 -shell-escape 选项,并且由于 pdflatex 无法将命令传递给 shell,我收到错误消息。有没有办法:1)让 pandoc 输出 *.pdf 文件而不是 *.tex,或者 2)将 -shell-escape 传递到 pdflatex?

MWE:mwe.Rmd

---
title: "mwe"
header-includes: |
  \usepackage{epstopdf}
  \epstopdfDeclareGraphicsRule{.tif}{png}{.png}{sips -s format png #1 --out \OutputFile}
  \PrependGraphicsExtensions{.tif, .tiff}
output: 
  pdf_document:
    pandoc_args: "--pdf-engine-opt=-shell-escape"
---

![](image.tif)

在 R 控制台中运行 $ rmarkdown::render("mwe.Rmd", output_file="mwe.pdf") 会出现错误,因为没有使用 -shell-escape 调用 pdflatex:

! Package pdftex.def Error: File `image-tif-converted-to.png' not found.

Error: Failed to compile mwe.tex. See mwe.log for more info.

在 R 控制台中运行 $ knitr::knit("mwe.Rmd"),然后在终端中运行 $ pandoc mwe.md -o mwe.pdf 会返回正确的 PDF。或者,在终端的中间 tex 文件上运行 $ pandoc mwe.md -s -o mwe.tex; pdflatex -shell-escape mwe.tex 也会返回正确的 PDF。

TIF 图片来自:https://upload.wikimedia.org/wikipedia/commons/6/6a/Chi_Recombination_Model_for_Wikipedia.tif

【问题讨论】:

  • 你解决了吗?

标签: r-markdown pandoc


【解决方案1】:

我在尝试导入铸造的乳胶包时遇到了同样的问题 - 我的 .rmd 文件开头附近的这个 R 代码为我修复了它:

```{r setup, include=FALSE}
    options(tinytex.engine_args = '-shell-escape')
```

如果相关,我正在使用 RStudio 和 sweave 编译文档,在 MacOS 10.14.6 上。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多