在渲染为 PDF 和 HTML 的 R markdown 报告中,我想使用不同的透明度为文本着色。
例如,我想使用 相同的橙色 和 3 个不同的 alpha 值(0.3、0.6、1.0)。
Nicholas Hamilton 提供了一种为文本着色的功能,无论输出格式如何(PDF/latex 或 HTML)。 fct 的更新 MWE。由Mark Neal提供。
要使用透明颜色,据我所知,
colFmt()
函数需要进行某种调整。
gplots::col2hex(color)
允许将颜色名称转换为十六进制 RGB 字符串,然后可以在 colFmt()
中使用。
不幸的是,该功能不允许透明。
palr::col2hex(color)
允许使用透明胶片进行转换。对于 PDF 输出,这些会被 colFmt()
“忽略”(透明度值只是作为文本添加)。对于 HTML 输出,它们与所提供颜色的透明版本不同(见下图)
MWE的PDF输出
MWE 的 HTML 输出
---
title: "Colored text with transparency"
author: "Test"
output: html_document
#output: pdf_document
header-includes:
\usepackage[usenames,dvipsnames]{xcolor}
---
```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(echo = TRUE)
```
## Define colorizing function
```{r colFmt}
colFmt = function(x,color){
outputFormat = opts_knit$get("rmarkdown.pandoc.to")
if(outputFormat == 'latex')
paste("\\textcolor[HTML]{",color,"}{",x,"}",sep="")
else if(outputFormat == 'html')
paste("<font color='",color,"'>",x,"</font>",sep="")
else
x
}
```
## Apply colorizing function
### gplots
```{r include=FALSE}
library(gplots) # to be able to use col2hex() to convert color names to hex RGB strings
hex_color <- str_remove(gplots::col2hex(color),"#") # convert color names to hex RGB strings
```
Some `r colFmt("orange text",hex_color)`
### palr
```{r include=FALSE}
library(palr) # for col2hex()
hex_color <- str_remove(palr::col2hex(color),"#")
hex_color_light <- str_remove(palr::col2hex(color, alpha = 0.3),"#")
```
Some `r colFmt("orange text",hex_color)` and some `r colFmt("light orange text", hex_color_light)`
\transparent{}
包向文档引入部分透明的颜色(请参阅此 StackExchange 答案中的用法)。
请注意,理想情况下,乳胶输出应类似于
{\transparent{0.3} this}
,其中整个受影响的文本段包含在大括号中。然而,RMarkdown 想要转义第一个和最后一个花括号,所以我不得不选择 \transparent{0.3} that instead\transparent{1}
。
---
title: 'Transparencies'
output: pdf_document
#output: pdf_document
header-includes:
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{transparent}
---
```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(echo = TRUE)
colFmt <- function(x, color, alpha=1){
outputFormat <- opts_knit$get('rmarkdown.pandoc.to')
if(!startsWith(color, '#')) {
color <- gplots::col2hex(color) |> substring(2)
}
if(outputFormat == 'latex')
sprintf('\\transparent{%f}\\textcolor[HTML]{%s}{%s}\\transparent{1}', alpha, color, x)
else if(outputFormat == 'html')
sprintf('<span style="color: #%s; opacity: %f">%s</span>', color, alpha, x)
else
x
}
```
Careful, this is an `r colFmt("orange text", "orange")`!
Let's make it a little `r colFmt("less orange", "orange", 0.7)`.
Or maybe `r colFmt("even less orange", "orange", 0.3)`.