RMarkdown:将代码包装成块,但在管道之后保留中断

Mor*_*arz 7 r r-markdown dplyr magrittr

我正在尝试实现两件可能不兼容的事情:当我创建 PDF 时,我希望将 RMarkdown 块中的代码包裹在每一行中(换句话说,下面的行在页面上运行)边缘)。

在此输入图像描述

在阅读了一些内容之后(包括这里并简要尝试了该styler,我发现使用tidy=TRUEtidy.opts = list(width.cutoff=60)工作(见下文)

knitr::opts_chunk$set(tidy.opts=list(width.cutoff=60),tidy=TRUE)
Run Code Online (Sandbox Code Playgroud)

注意:您可能需要formatR安装。

在此输入图像描述

但遗憾的是,这破坏了代码的格式,管道%>%保留了管道的格式并让代码在页面外运行。

有没有办法正确地做到这一点?这样文本就可以保留在页面上,结构也可以保持一定的位置吗?

感谢您的帮助!

返工:

两者的标题:

---
title: "R Notebook"
output: pdf_document
---
Run Code Online (Sandbox Code Playgroud)

选择第二个图像的块

knitr::opts_chunk$set(tidy.opts=list(width.cutoff=60),tidy=TRUE)
Run Code Online (Sandbox Code Playgroud)

两者的示例代码:

data(mtcars)
library(tidyverse)
variable_1 <- 10
variable_2 <- 50
variable_3 <- 30
variable_4 <- 5
variable_5 <- 100
variable_6 <- 25
variable_7 <- 600
mtcars %>% 
  mutate(mpg = ifelse(mpg>18,
                   yes = (variable_1*variable_2)*variable_3 + variable_4 + variable_5 + variable_6 + variable_7,
                   no = mpg)) %>% 
  select(mpg,disp) %>% 
  group_by(mpg) %>% 
  summarise(mean(mpg)) %>% 
  ungroup -> df
Run Code Online (Sandbox Code Playgroud)

我还添加了SessionInfo()软件包版本等。

R version 4.0.0 (2020-04-24)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] forcats_0.5.0   stringr_1.4.0   dplyr_1.0.0     purrr_0.3.4     readr_1.3.1     tidyr_1.0.2     tibble_3.0.0   
[8] ggplot2_3.3.0   tidyverse_1.3.0

loaded via a namespace (and not attached):
 [1] tidyselect_1.1.0 xfun_0.15        haven_2.2.0      lattice_0.20-41  colorspace_1.4-1 vctrs_0.3.0     
 [7] generics_0.0.2   htmltools_0.4.0  yaml_2.2.1       rlang_0.4.6      pillar_1.4.3     glue_1.4.1      
[13] withr_2.2.0      DBI_1.1.0        dbplyr_1.4.3     modelr_0.1.6     readxl_1.3.1     lifecycle_0.2.0 
[19] munsell_0.5.0    gtable_0.3.0     cellranger_1.1.0 rvest_0.3.5      evaluate_0.14    knitr_1.28      
[25] fansi_0.4.1      broom_0.5.6      Rcpp_1.0.4.6     backports_1.1.6  scales_1.1.0     jsonlite_1.6.1  
[31] fs_1.4.1         hms_0.5.3        packrat_0.5.0    digest_0.6.25    stringi_1.4.6    grid_4.0.0      
[37] cli_2.0.2        tools_4.0.0      magrittr_1.5     crayon_1.3.4     pkgconfig_2.0.3  ellipsis_0.3.0  
[43] xml2_1.3.1       reprex_0.3.0     lubridate_1.7.8  assertthat_0.2.1 rmarkdown_2.3    httr_1.4.1      
[49] rstudioapi_0.11  R6_2.4.1         nlme_3.1-147     compiler_4.0.0  
Run Code Online (Sandbox Code Playgroud)

Car*_*era 2

虽然我不确定下图是否反映了您想要的内容,但您可以按如下方式换行:

在此输入图像描述

您可以通过 LaTeX 的fvextra包控制 PDF 文件中代码的外观。您可以通过以下方式调用它并配置它的设置header-includes

header-includes:
  - |
    ```{=latex}
    \usepackage{fvextra}
    \DefineVerbatimEnvironment{Highlighting}{Verbatim}{
      showspaces = false,
      showtabs = false,
      breaklines,
      commandchars=\\\{\}
    }
    ```
Run Code Online (Sandbox Code Playgroud)

breaksymbolleft={}如果要删除换行中的箭头符号,请添加(另请参阅手册breaksymbolleft中的描述):

header-includes:
  - |
    ```{=latex}
    \usepackage{fvextra}
    \DefineVerbatimEnvironment{Highlighting}{Verbatim}{
      breaksymbolleft={},
      showspaces = false,
      showtabs = false,
      breaklines,
      commandchars=\\\{\}
    }
    ```
Run Code Online (Sandbox Code Playgroud)

这一切都可以与具有两种功能的选项相结合tidy = "stlyer"(断线和使用整洁的样式)。

微量元素

---
title: "R Notebook"
output: pdf_document
header-includes:
  - |
    ```{=latex}
    \usepackage{fvextra}
    \DefineVerbatimEnvironment{Highlighting}{Verbatim}{
      breaksymbolleft={}, 
      showspaces = false,
      showtabs = false,
      breaklines,
      commandchars=\\\{\}
    }
    ```
---

```{r}
knitr::opts_chunk$set(tidy="styler")
```

```{r}
data(mtcars)
library(tidyverse)
variable_1 <- 10
variable_2 <- 50
variable_3 <- 30
variable_4 <- 5
variable_5 <- 100
variable_6 <- 25
variable_7 <- 600
mtcars %>% 
  mutate(mpg = ifelse(mpg>18,
                   yes = (variable_1*variable_2)*variable_3 + variable_4 + variable_5 + variable_6 + variable_7,
                   no = mpg)) %>% 
  select(mpg,disp) %>% 
  group_by(mpg) %>% 
  summarise(mean(mpg)) %>% 
  ungroup -> df
```
Run Code Online (Sandbox Code Playgroud)