daqana / tikzDevice

A R package for producing graphics output as PGF/TikZ code for use in TeX documents.
https://daqana.github.io/tikzDevice
131 stars 26 forks source link

tikzDevice ignores engine passed via dev.args #214

Closed fkohrt closed 1 year ago

fkohrt commented 2 years ago

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:

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

```{r}
options(tikzDefaultEngine = "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}}$')
rstub commented 1 year ago

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

fkohrt commented 1 year ago

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