【发布时间】: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() 似乎按此顺序调用程序:
- knitr::knit() 到 *.md
- 编码转换为*.utf8.md
- pandoc 到 *.tex (
pandoc mwe.utf8.md --to latex --output mwe.tex ...) - 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"
---

在 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