是否可以提高从 RMarkdown 的 TikZ 插入 Word 文档的图像的分辨率?

Is it possible to increase resolution of image inserted to Word document from RMarkdown's TikZ?

我有简单的 RMarkdown 文档:

---
output:
  word_document: default
  html_document: default
---


```{r,engine='tikz', fig.ext = 'png'}
\begin{tikzpicture}
\path (0,0) node
(x) {Hello World!}
(3,1) node[circle,draw](y) {$\int_1^2 x \mathrm d x$};
\draw[->,blue]
(x) -- (y);
\draw[->,red]
(x) -| node[near start,below] {label} (y);
\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {label} (y);
\end{tikzpicture}
```

例子from 17.11 of pgfmanual.pdf.

如果我将 'png' 更改为 'svg':

HTML 输出会很好

它使用 tikz 引擎生成圆形和矩形。
但即使缩放 100%,生成的图像在 DOCX 中看起来也很丑陋和像素化:

我尝试更改 fig.widthdpiout.width 但没有得到积极的结果。

对我来说最好的结果是:获得 TikZ 代码中指定尺寸的高分辨率图像。

是否可以提高从 TikZ 插入 Word 文档的图像的分辨率?

更新 1:@CL 提出的设置 pandoc's dpi using pandoc_args 的解决方案不起作用。

更新 2:@tarleb 提出的解决方案 {r,engine='tikz', engine.opts = list(convert.opts = '-density 800 -resize 800x800'), fig.ext = 'png'}:

---
output:
  word_document: default
  html_document: default
---

```{r,engine='tikz', engine.opts = list(convert.opts = '-density 800 -resize 800x800'), fig.ext = 'png'}
\begin{tikzpicture}
\path (0,0) node
(x) {Hello World!}
(3,1) node[circle,draw](y) {$\int_1^2 x \mathrm d x$};
\draw[->,blue]
(x) -- (y);
\draw[->,red]
(x) -| node[near start,below] {label} (y);
\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {label} (y);
\end{tikzpicture}
```

以错误结束:

sh: -density 800 -resize 800x800: command not found
Quitting from lines 8-18 (tikz-sizing.Rmd) 
Error in engine(options) : 
  Failed to compile tikz-sizing_files/figure-docx/unnamed-chunk-1-1.pdf to tikz-sizing_files/figure-docx/unnamed-chunk-1-1.png
Calls: <Anonymous> ... process_group.block -> call_block -> block_exec -> in_dir -> engine
Execution halted

问题来自 TikZ 图像的创建和转换方式。 Knitr首先通过pdflatex(或luatex/XeLaTeX)将代码编译成PDF文件。生成的 PDF 然后通过 ImageMagick 的 convert 转换为 PNG。 PDF包含矢量图形,而PNG是面向像素的位图格式;生成的 PNG 的质量仅受转换器使用的采样率的限制。 ImageMagick 使用的默认值是 72 dpi,将其提高到一个较大的值(如 300)将为小图像提供更好的结果。

R Markdown 允许通过 engine.opts 设置控制 PDF → PNG 转换:

{r, engine='tikz', engine.opts = list( convert = 'convert', convert.opts = '-density 300'), fig.ext = 'png'}

这告诉 ImageMagick 使用更高的采样率/像素密度。像 300 这样的值应该足够了,更高的值将以更大的文件大小为代价提高图像质量。