有没有办法在R kable的'column_spec'函数中添加乳胶规范?

时间:2019-04-29 10:20:42

标签: r r-markdown kable

我正在尝试使用R Markdown编织到PDF输出中的kable和kableExtra包来修改表格的外观。

特别是,我想从表格中删除所有边框,并仅在标题下添加一条水平线,并在行名旁边添加一条垂直线。

此刻,我有以下代码:

---
header-includes:  \setmainfont[Path = C:/Windows/Fonts/]{Arial}
                  \usepackage{colortbl}
                  \arrayrulecolor{white}
output:
  pdf_document:
    latex_engine: xelatex
  word_document: default
---


```{r echo=FALSE, message=FALSE, warning=F, paged.print=TRUE}

library(kableExtra)
library(magrittr)

DATA<- data.frame(jen=c(1,2,3,4,5), feb=c(2,3,4,5,3), mar=c(0,2,4,1,2))
rownames(DATA)<-c("first","second","third","fourth","fifth")


kable(DATA, "latex") 
```

哪个生成此表:

Table

要删除所有边框,我将默认边框设置为白色,以回答this问题。

现在,我想在标题下方添加一条水平的蓝线,并在行名称的右侧添加一条垂直的蓝线。

我可以使用以下方法获取水平线:

---
header-includes:  \setmainfont[Path = C:/Windows/Fonts/]{Arial}
                  \usepackage{colortbl}
                  \arrayrulecolor{white}
output:
  pdf_document:
    latex_engine: xelatex
---


```{r echo=FALSE, message=FALSE, warning=F, paged.print=TRUE}

library(kableExtra)
library(magrittr)

DATA<- data.frame(jen=c(1,2,3,4,5), feb=c(2,3,4,5,3), mar=c(0,2,4,1,2))
rownames(DATA)<-c("first","second","third","fourth","fifth")



kable(DATA, "latex")  %>%
    row_spec(0, extra_latex_after = "\\arrayrulecolor[rgb]{0,.275,.725}") %>%
    row_spec(1:nrow(DATA), extra_latex_after = "\\arrayrulecolor{white}")

```

获得this

我想对垂直线做同样的事情,但是函数“ column_spec”中没有诸如“ extra_latex_after”这样的命令。它仅接受“ extra_css”命令,这些命令显然不适用于PDF输出。

我的目标是得到类似this的东西。 我知道我可以使用其他表包获得相同的结果,但是我想知道是否可以使用kable来获得类似的结果。

有人知道是否有解决方案吗?

1 个答案:

答案 0 :(得分:0)

到目前为止,确实不支持此功能。您可以在github上提出功能请求。

您可以使用正则表达式修改此内容,以替换表格中的对齐选项:

---
title: "Test"
date: 2019-02-13
output: pdf_document
---

```{r header, echo= FALSE, include = T, warning=F}
library(knitr)

tbl <- kable(mtcars[1:4, 1:3], format = "latex")

# here we search for the begin command and its options and replace them
gsub(pattern = "(begin\\{tabular\\})(\\{.*?\\})", 
     repl    = "\\1{l|r !{\\\\color{red}\\\\vrule width 1pt} r|r|}", 
     x       = tbl)
```

enter image description here