Как я могу контролировать размер шрифта и линейный отрезок фрагментов кода независимо от основного текста в bookdown? - PullRequest
0 голосов
/ 21 декабря 2018

Используя bookdown для вывода PDF-документа, YAML в пределах index.Rmd выглядит следующим образом:

--- 
title: "My title"
author:
  - 'me'

output:
  bookdown::pdf_document2:
    includes:
      in_header: latex/preamble.tex
    keep_tex: yes

site: bookdown::bookdown_site
documentclass: book
geometry: "left=3.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm"
fontsize: 12pt
linestretch: 1.5
bibliography: [packages.bib, referencias.bib]
linkcolor: NavyBlue
biblio-style: apalike
link-citations: yes
toc-depth: 2
lof: True
lot: True
---

Как я могу управлять fontsize и linestretch кусками кода независимо отосновной текст? Этот ответ предоставляет решение для управления размером шрифта, но не межстрочным интервалом.

1 Ответ

0 голосов
/ 21 декабря 2018

Это та же идея, что и здесь , но теперь мы просто изменим хук источника:

```{r setup, include=FALSE}
def.source.hook  <- knitr::knit_hooks$get("source")
knitr::knit_hooks$set(source = function(x, options) {
  x <- def.source.hook(x, options)  # apply default source hook
  ifelse(!is.null(options$linestretch),  # if linestretch is not NULL, apply linestretch
         paste0("\\linespread{", options$linestretch,"}\n", x, "\n\n\\linespread{1}"),  # reset linestretch after the chunk!
         x)
})
```

Теперь вы можете скопировать и вставить оператор ifelse из другого ответа вэтот крюк также, и вы можете контролировать оба.

Полный пример:

---
title: "Linestretch"
date: "20 December 2018"
header-includes:
  - \usepackage{lipsum}
output: 
  bookdown::pdf_document2:
    keep_tex: true
linestretch: "`r (lstr <- 1.5)`" 
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(eval = F)
def.source.hook  <- knitr::knit_hooks$get("source")
knitr::knit_hooks$set(source = function(x, options) {
  x <- def.source.hook(x, options)
  x <- ifelse(!is.null(options$linestretch), 
              paste0("\\linespread{", options$linestretch,"}\n", x, "\n\n\\linespread{", lstr,"}"), 
              x)
  ifelse(!is.null(options$size), 
         paste0("\\", options$size,"\n\n", x, "\n\n \\normalsize"), 
         x)
})
```

## R Markdown

\lipsum[30]


```{r, linestretch = 1, size="Large"}
head(mtcars)
head(mtcars)
```


\lipsum[30]

enter image description here

...