Достижение согласованных размеров шрифта фигуры с 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 соответственно.