是否可以提高从 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.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
问题来自 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 这样的值应该足够了,更高的值将以更大的文件大小为代价提高图像质量。
我有简单的 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
问题来自 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 这样的值应该足够了,更高的值将以更大的文件大小为代价提高图像质量。