使用knitr、HTML/markdown和PDF/Latex实现一致的图表字体大小

14

我试图解决一个问题,即在比较生成的knitr文档的绘图时,字体大小存在明显差异。HTML/markdown输出似乎是我认为正确大小的,而PDF/Latex输出则大约大2-4个点(例如,如果我期望12pt,则输出更接近14或16pt)。请注意,该问题似乎仅限于绘图/图形文本,并且不会在输出文档中的其他文本中显示。

最简单的方法是使用RStudio(版本0.99.329)创建新的*.Rmd文件时自动填充的默认内容来演示这一点。可通过此链接进行并排比较。在我看来,HTML版本大小合适,而PDF/Latex版本则不是。

据我所知,我没有任何自定义设置在.Rprofile或其他位置可能影响此问题。我已经尝试禁用/启用pdf裁剪,但似乎也没有影响到此问题。我已在同事的机器上复制了此问题(也运行OS X和相同版本的RStudio)。

rmarkdown框架之外(即仅运行R代码),PDF和PNG输出之间似乎没有这样的差异。例如,以下代码生成的输出非常相似:

library(ggplot2)
r <- ggplot(data = diamonds, 
    aes(x = carat, y = price, color = cut, group = cut))
r + geom_smooth(size = 2) + 
    ggtitle("Plant growth with\ndifferent treatments")

ggsave(file="test.pdf")
ggsave(file="test.png")

考虑到上面的代码产生的输出图相当相似,我怀疑我看到的问题与knitr或rmarkdown/pandoc转换过程有关。

因此,我的主要问题是,我看到的输出格式之间的差异水平是否是预期的?我是唯一一个遇到这个问题的人吗?还是这是我系统独有的问题?

如果这是正常行为,那么人们是如何解决这个问题的呢?对于ggplot图,我一直在使用theme_bw(8.5)来降低PDF/latex输出的字体大小。虽然这有效,但在使用同一个*.Rmd文件从多个平台/用途创建输出时,它会增加另一个层次的复杂性......这是rmarkdown的一个重要优势之一。

我的设置和系统规格

  • OS X 10.10.2,MacBook Pro (Retina, 15-inch, Early 2013)
  • RStudio 版本 0.99.329
  • R 版本 3.1.2 (2014-10-31) -- "Pumpkin Helmet"
  • rmarkdown 0.5.1
  • pandoc 1.13.1

我有同样的问题。我认为这与PDF和HTML文件使用不同标准图形设备有关('dev: ('pdf'用于LaTeX输出,'png'用于HTML/Markdown;字符)', http://yihui.name/knitr/options/)。如果我手动将`dev=pdf`设置为HTML文件,则无法显示该文件,但生成的文件显示与PDF生成相同的字体大小。如果我手动将`dev='png'`设置为PDF文件,则会出现“error: unused argument (pdf=list(useDingbats=FALSE)”的错误,这可能与dev.args代码块选项有关。在这里,我认为也可能是解决方案... - Julian
示例图片链接似乎已损坏。 - Michael Roswell
1个回答

4

您是否尝试过此解决方案,该解决方案为不同的输出格式设置了不同的输出设备?以下是解决方案:

通过在Makefile中为knitr设置特定选项,从唯一的Markdown文件生成pdf和html输出的解决方案:

$(PDF): $(SRC) Makefile
Rscript \
  -e "library(knitr)" \
  -e "opts_chunk[['set']](dev = 'pdf')" \
  -e "pat_gfm()" \
  -e "knit('$<', 'temp.md')"
$(PANDOC) temp.md -o $@
rm temp.md
这篇答案也有有趣的想法。
下面是代码:
请尝试将这个代码块放在Rmd文档的开头。
```{r setup, cache=FALSE, include=FALSE}
library(knitr)
output <- opts_knit$get("rmarkdown.pandoc.to")
if (output=="html") opts_chunk$set(fig.width=11, fig.height=11)
if (output=="docx") opts_chunk$set(fig.width=6,  fig.height=6)
```

opts_knit$get() 返回的选项之一是 markdown.pandoc.to。这显然根据所选输出格式(HTML、Word 或 PDF)设置为“html”、“docx”或“latex”。因此,您可以测试并相应地设置块选项 fig.width 和 fig.height。


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。 - Bhavesh Odedra
完成。谢谢您让我知道! - Denis Rasulev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接