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

N0r*_*ert 6 docx tikz knitr r-markdown

我有简单的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}
```
Run Code Online (Sandbox Code Playgroud)

这是pgfmanual.pdf的17.11的例子.

如果我'png'改为'svg':HTML输出很棒

TikZ SVG中的SVG图像 - 看起来很棒

它用tikz引擎产生圆形和矩形.
但是,即使使用100%缩放,生成的图像在DOCX中看起来也很难看并且像素化:

docx中的TikZ图像 - 低分辨率

我试图改变fig.width,dpi,out.width但没有得到积极的结果.

对我来说最好的结果将是以下内容:获取具有TikZ代码中指定尺寸的高分辨率图像.

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

更新1:@CL使用set pandoc dpi使用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}
```
Run Code Online (Sandbox Code Playgroud)

以错误结束:

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
Run Code Online (Sandbox Code Playgroud)

tar*_*leb 5

问题来自Ti k Z图像的创建和转换方式.Knitr首先通过pdflatex(或luatex/XeLaTeX)将代码编译成PDF文件.然后,生成的PDF将通过ImageMagick转换为PNG convert.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'}
Run Code Online (Sandbox Code Playgroud)

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