我有一个简单的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.width
,dpi
,out.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
答案 0 :(得分:5)
问题出在创建和转换Ti k Z图像的方式上。 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这样的值就足够了,更高的值将以更大的文件大小为代价来提高图像质量。