在RStudio中将.rmd文件编织为.pdf时,如何区分输出与代码块样式?
解决方案
一、给代码块和输出块设置不同背景色
步骤1:配置knitr选项
在setup代码块里,同时指定代码块和输出块的自定义类:
```{r setup, include=FALSE} knitr::opts_chunk$set( echo = TRUE, class.source = "code-box", # 代码块专属类 class.output = "output-box" # 输出块专属类 )
### 步骤2:添加LaTeX样式定义 在Rmarkdown文档YAML配置之后,插入以下LaTeX代码,定义两种不同的背景色及对应阴影框环境: ```latex \usepackage{framed} % 定义代码块背景色(偏深浅灰) \definecolor{code-bg}{RGB}{230, 230, 230} % 定义输出块背景色(更浅的灰) \definecolor{output-bg}{RGB}{245, 245, 245} % 自定义代码块阴影框 \newenvironment{code-box} {\def\FrameCommand{\fboxsep=5pt \colorbox{code-bg}} \MakeFramed {\advance\hsize-\width \FrameRestore}} {\endMakeFramed} % 自定义输出块阴影框 \newenvironment{output-box} {\def\FrameCommand{\fboxsep=5pt \colorbox{output-bg}} \MakeFramed {\advance\hsize-\width \FrameRestore}} {\endMakeFramed}
这样代码块和输出块会呈现明显区分的背景色,可读性更强。
二、给代码块和输出块添加纯黑色边框
如果想用边框替代背景色区分(也可同时保留背景色),推荐用tcolorbox包实现:
步骤1:配置knitr选项
同样指定自定义类:
```{r setup, include=FALSE} knitr::opts_chunk$set( echo = TRUE, class.source = "code-border", class.output = "output-border" )
### 步骤2:添加LaTeX样式定义 ```latex \usepackage{tcolorbox} % 代码块边框样式:纯黑边框,可自定义背景色 \newtcolorbox{code-border}{ colframe=black, colback=white, % 不需要背景色就保留白色,需要的话替换为RGB值 boxrule=1pt, % 边框粗细(1pt为标准细边框) left=5pt, right=5pt, top=5pt, bottom=5pt } % 输出块边框样式:纯黑边框,可设置不同背景色 \newtcolorbox{output-border}{ colframe=black, colback=white, % 比如换成RGB(245,245,245)实现浅灰背景+黑边框 boxrule=1pt, left=5pt, right=5pt, top=5pt, bottom=5pt }
额外:给警告/消息类输出设置背景色
如果要给R的警告、提示消息也加专属背景色,扩展knitr选项并添加对应样式即可:
```{r setup, include=FALSE} knitr::opts_chunk$set( echo = TRUE, class.source = "code-box", class.output = "output-box", class.message = "message-box", class.warning = "warning-box" )
对应的LaTeX样式: ```latex % 消息框背景色(浅蓝色) \definecolor{message-bg}{RGB}{220, 240, 255} \newenvironment{message-box} {\def\FrameCommand{\fboxsep=5pt \colorbox{message-bg}} \MakeFramed {\advance\hsize-\width \FrameRestore}} {\endMakeFramed} % 警告框背景色(浅橙色) \definecolor{warning-bg}{RGB}{255, 240, 220} \newenvironment{warning-box} {\def\FrameCommand{\fboxsep=5pt \colorbox{warning-bg}} \MakeFramed {\advance\hsize-\width \FrameRestore}} {\endMakeFramed}
内容的提问来源于stack exchange,提问作者cejr9565
相关产品推荐
相关产品推荐

