微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

修改或检索 kableExtra 的乳胶输出

如何解决修改或检索 kableExtra 的乳胶输出

有没有办法修改或子集kableExtra的乳胶代码输出的一部分?

例如,给定以下代码输出

kable(head(mtcars)[1:3],format = "latex",booktabs = TRUE)

是否可以:

a) 直接编辑其中一行(例如将“Model”放在 & mpg & cyl & disp 之前)

b) 或者,只是将 \midrule 和 \bottomrule 之间的所有内容子集化,但删除其他所有内容

我希望上面的选项 b) 是围绕表格的主要内容的预格式化行编写我自己的乳胶代码,例如:

cat(c("\\begin{table}[!htb]
       \\begin{tabular}{lrrr}
       \\toprule
       Model & MPG & CYL & disP\\",t1,# these are the rows between midrule and bottomrule 
      "\\end{tabular}
       \\end{table}"),file = "my_own.tex") 

解决方法

也许这就是您要找的。由于 kable 输出是一个字符串,您可以通过字符串工具对其进行操作。使用例如stringr 包,您可以编写一个函数来提取 \midrule\bottomrule 之间的部分,如下所示:

library(kableExtra)
library(stringr)

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

get_tbl_body <- function(x) {
  start <- str_locate(tbl,"\\\\midrule")[1]
  end <- str_locate(tbl,"\\\\bottomrule")[2]
  str_sub(x,start,end) 
}
t1 <- get_tbl_body(tbl)

cat(c("\\begin{table}[!htb]","\\begin{tabular}{lrrr}","\\toprule","Model & MPG & CYL & DISP\\\\",t1,# these are the rows between midrule and bottomrule 
      "\\end{tabular}","\\end{table}"),sep = "\n") 
#> \begin{table}[!htb]
#> \begin{tabular}{lrrr}
#> \toprule
#> Model & MPG & CYL & DISP\\
#> \midrule
#> Mazda RX4 & 21.0 & 6 & 160\\
#> Mazda RX4 Wag & 21.0 & 6 & 160\\
#> Datsun 710 & 22.8 & 4 & 108\\
#> Hornet 4 Drive & 21.4 & 6 & 258\\
#> Hornet Sportabout & 18.7 & 8 & 360\\
#> \addlinespace
#> Valiant & 18.1 & 6 & 225\\
#> \bottomrule
#> \end{tabular}
#> \end{table}

reprex package (v0.3.0) 于 2021 年 1 月 3 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。