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)
如果我'png'改为'svg':HTML输出很棒
它用tikz引擎产生圆形和矩形.
但是,即使使用100%缩放,生成的图像在DOCX中看起来也很难看并且像素化:

我试图改变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)
问题来自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这样的值应该足够,更高的值将以更大的文件大小为代价提高图像质量.
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |