daqana/tikzDevice

tikzDevice ignores engine passed via dev.args

fkohrt opened this issue · 2 comments

When using tikzDevice as device when plotting with knitr and rmarkdown, there appear to be differences between using global options and chunk options for setting the PDF engine. I will demonstrate this with a R Markdown document with embedded PDF documents.

Setting engine = "luatex" has no effect when using the dev.args chunk option, the PDF metadata still indicate pdfTeX as creator:

---
title: "Setting PDF engine via chunk options"
output: html_document
---

```{r, dev-tikz, dev = "tikz", dev.args = list(engine = "luatex")}
par(mar = c(4, 4, 2, .1))
curve(dnorm, -3, 3, xlab = '$x$', ylab = '$\\phi(x)$',
      main = 'The density function of $N(0, 1)$')
text(-1, .2, cex = 3, col = 'blue',
  '$\\phi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{\\frac{-x^2}{2}}$')
```

Only when setting the global option tikzDefaultEngine = "luatex", the metadata indicate LuaTeX as creator:

---
title: "Setting PDF engine via global options"
output: html_document
---

```{r}
options(tikzDefaultEngine = "luatex")
```

```{r, dev-tikz, dev = "tikz"}
par(mar = c(4, 4, 2, .1))
curve(dnorm, -3, 3, xlab = '$x$', ylab = '$\\phi(x)$',
      main = 'The density function of $N(0, 1)$')
text(-1, .2, cex = 3, col = 'blue',
  '$\\phi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{\\frac{-x^2}{2}}$')
```
rstub commented

AFAIK this is a conseuqnece of how the tikzDevice support has been implemented in knitr. The resulting .tex file is always processed using tikzDefaultengine, c.f. https://github.com/yihui/knitr/blob/master/R/plot.R#L174

This is also documented at https://github.com/yihui/knitr/blob/master/inst/examples/knitr-graphics.Rnw#L249-L251

Then this should be an issue of {knitr}. I will create one there.