Размер шрифта фрагмента кода в Rmarkdown с кеттером и латексом
В knitr параметр размера отлично работает в файле .Rnw
, следующий код генерирует:
\documentclass{article}
\begin{document}
<<chunk1, size="huge">>=
summary(mtcars)
@
\end{document}
![rnw]()
Однако я не могу заставить его работать в Rmarkdown. Следующий код не изменяет размер шрифта, как в файле .Rnw
. То же самое происходит при попытке установить параметры с помощью opts_chunk$set(size="huge")
.
Является ли это ожидаемым поведением? Как изменить размер шрифта кода куска? (Я имею в виду использование опций knitr, а не добавлением \huge
перед кодом)
---
title: "Untitled"
output: pdf_document
---
```{r, size="huge"}
summary(mtcars)
```
![enter image description here]()
Я использую RStudio версии 0.98.987, knitr 1.6 и rmarkdown 0.2.68.
Ответы
Ответ 1
Подбирая идею изменить вязание крючком, мы можем сделать следующее:
def.chunk.hook <- knitr::knit_hooks$get("chunk")
knitr::knit_hooks$set(chunk = function(x, options) {
x <- def.chunk.hook(x, options)
ifelse(options$size != "normalsize", paste0("\n \\", options$size,"\n\n", x, "\n\n \\normalsize"), x)
})
Этот фрагмент изменяет хук по умолчанию. Он просто проверяет, не равен ли размер параметра чанка его значению по умолчанию (normalsize
), и если да, добавляет значение options$size
к выводу чанка кода (включая исходный код!) И добавляет \\normalsize
в следующем порядке: переключиться обратно.
Так что, если вы добавите size="tiny"
к чанку, тогда весь вывод, сгенерированный этим чанком, будет напечатан таким образом.
Все, что вам нужно сделать, это включить этот фрагмент в начало вашего документа.
Ответ 2
Per этот Gist, вы должны определить размер шрифта с помощью css:
<style type="text/css">
body, td {
font-size: 14px;
}
code.r{
font-size: 20px;
}
pre {
font-size: 20px
}
</style>
code.r
будет управлять размером шрифта для R-кода, эхом из блока кода, а pre
будет применяться к любым результатам R, выводимым из кода.
Полный рабочий файл .Rmd может выглядеть так:
---
title: "FontTest"
author: "Thomas Hopper"
date: "January 13,2016"
output: html_document
---
<style type="text/css">
body, td {
font-size: 14px;
}
code.r{
font-size: 20px;
}
pre {
font-size: 20px
}
</style>
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
```{r cars}
summary(cars)
```
Получаемый html отображается как:
![снимок экрана с 20-кратным R-кодом и выходом 20pt R]()
Ответ 3
Вы можете определить свой собственный формат документа, экспортировав что-то на основе следующей функции из вашего пакета my_package
:
my_report <- function(...) {
fmt <- rmarkdown::pdf_document(...)
fmt$knitr$knit_hooks$size = function(before, options, envir) {
if (before) return(paste0("\n \\", options$size, "\n\n"))
else return("\n\n \\normalsize \n")
}
return(fmt)
}
Это определит крючок куска на крючок size
, который поместит соответствующую команду латекса перед куском и \normalsize
после фрагмента.
Во всяком случае, со следующей меткой R вы можете проверить, работает ли она:
---
output: my_package::my_report
---
Test text for comparison
```{r}
print(1)
```
The next code chunk has `size = 'tiny'` in the chunk options.
```{r, size = 'tiny'}
print(1)
```
Я получаю следующий результат от `markdown:: render():
![введите описание изображения здесь]()
См. также проблему, которую я открыл на github:
https://github.com/yihui/knitr/issues/1296
Ответ 4
\tiny
'''{r}
summary(mtcars)
'''
\normalsize
Доступные варианты размера в порядке убывания:
Huge
, huge
, LARGE
, Large
, large
, normalsize
, small
, scriptsize
footnotesize
, scriptsize
, tiny