当将kable表编织为html时,当使用print显示kable时,无法显示unicode符号。注意-我需要在print语句中使用kable以便遍历多个站点(如果不使用print,kable似乎无法在循环中工作)。
直接在Rstudio控制台中查看kable表时,以及在未使用knit进行编织时,unicode符号都能正确显示。
与打印一起显示时,它在控制台中正确显示,但在编织时却不能正确显示。出现(在html检查器中,编织时Unicode字符转换为<..>。
我有:
在我的表中使用了与U + 2190等效的html(例如“↑”)
#----
title: "Example of Unicode symbols with kable and print"
output: html_document
#----
#```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
#```
#```{r dataset, , include=FALSE}
library(tidyr)
library(kableExtra)
library(purrr)
dat <- tibble(Symbol=c("up arrow", "down arrow", "side arrows"),
htmlCode = c("↑", "↓", "↔"))
#```
#```{r kable-tbl, results='asis'}
tbl_fun <- function(df){
tbl <- df %>% kable(escape = F) %>%
kable_styling(bootstrap_options = c("hover", "condensed"),
full_width = F, position = "left", fixed_thead = T)
tbl
}
#this works when knit and when run in Rstudio console directly
tbl_fun(dat)
#when wrapped in a print function it works when run in Rstudio console directly
#but not when knit to html
print_kable <- function(df) {
tbl_fun(dat) %>%
print(format = 'html')
}
print_kable(dat)
#The above was a simplification - in my code I eventually want to iterate over
#many parameters, which is why I need to wrap in a print statement....
#walk(.x = unique(dat$Site), print_kable)
#```
答案 0 :(得分:0)
是的,似乎kable_styling()
正在转义html实体。
我发现规避此行为的方法是将html实体编码为其他实体,然后在完成所有格式设置后,将其替换为有效的代码。
例如,我可以将↓
编码为@darr@
。
然后在管道的末端执行以下操作:
kable(...) %>%
kable_styling(...) %>%
gsub("@darr@", "↓", .) %>%
cat()
对我有用。
我还考虑了一个更通用的解决方案,可以将任何html实体编码为&<code>.
,然后替换为:
kable(...) %>%
kable_styling(...) %>%
gsub("&([^.]+).", "&\\1;", .) %>%
cat()
但是,这不起作用。从字面上看,它将打印↓
(或任何其他由于替换而导致的html实体)。似乎在第一种情况下,由于在代码中明确提到了“ ↓
”,因此可以这样理解。在后一种尝试中,由于它是动态生成的,因此在我们开始之前已经运行过的markdown解析器无法识别它。
据我所知。也许需要更多的研究,才能找到更通用的解决方案。