rmarkdown :: render()不会将-shell-escape选项从pandoc传递到pdflatex

时间:2018-05-02 23:50:26

标签: r-markdown pandoc

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

  1. knitr :: knit()to * .md
  2. 编码转换为* .utf8.md
  3. pandoc to * .tex(pandoc mwe.utf8.md --to latex --output mwe.tex ...
  4. pdflatex至* .pdf(pdflatex mwe.tex
  5. 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。

    https://upload.wikimedia.org/wikipedia/commons/6/6a/Chi_Recombination_Model_for_Wikipedia.tif

    获得的TIF图像

1 个答案:

答案 0 :(得分:1)

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

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

如果有必要,我将在MacOS 10.14.6上使用RStudio编译文档并进行编织。希望这会有所帮助!