Достижение согласованных размеров шрифта фигуры с knitr, HTML/markdown и PDF/Latex

Я пытаюсь устранить заметную разницу в размере шрифта при сравнении графиков, сгенерированных для документа knitr. Вывод HTML/markdown кажется тем, что я считаю правильным размером, в то время как выход PDF/Latex примерно на 2-4 шага больше (например, если бы я ожидал 12pt, выход был бы ближе 14 или 16 очков). Обратите внимание, что проблема, по-видимому, ограничена текстом графика/рисунка и, похоже, не отображается с другим текстом в выходном документе.

Самый простой способ продемонстрировать это - это содержимое по умолчанию, которое 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.

Итак, мой главный вопрос: ожидается ли уровень различий, который я вижу между выходными форматами? Я единственный? Это уникально для моей системы?

Если это ожидаемое поведение, как люди решают проблему? Для ggplots я использовал theme_bw(8.5) для масштабирования шрифтов для вывода PDF/латекса. Это работает, но это добавляет еще один уровень сложности при создании вывода для нескольких платформ/использования из одного и того же файла *.Rmd... одного из ключевых преимуществ rmarkdown.

Технические характеристики моей установки и системы

  • OS X 10.10.2, MacBook Pro (Retina, 15 дюймов, начало 2013 года).
  • RStudio Version 0.99.329
  • R версия 3.1.2 (2014-10-31) - "Тыквенный шлем"
  • rmarkdown 0.5.1
  • pandoc 1.13.1

Ответ 1

Вы пробовали решение this, которое устанавливает различные устройства вывода для разных форматов вывода? Вот он:

Решение для создания pdf и html-вывода из уникального файла Markdown, задав определенные параметры для knitr в Makefile:

$(PDF): $(SRC) Makefile
Rscript \
  -e "library(knitr)" \
  -e "opts_chunk[['set']](dev = 'pdf')" \
  -e "pat_gfm()" \
  -e "knit('$<', 'temp.md')"
$(PANDOC) temp.md -o [email protected]
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", "docx" или "latex" в зависимости от выбранного формата вывода (HTML, Word или PDF). Таким образом, вы можете протестировать это и установить соответствующие параметры fig.width и fig.height соответственно.