将 kable latex table 重新包装到不同的表格环境

rewrapping kable latex table to different tabular environment

我只想保留 kable 创建的乳胶 table 的“内部”线条。我只知道这样做的麻烦和丑陋的方法......尝试更干净的版本失败了。这是一个完全不及格的人:

kable.rewrap <- function( df, newname= "mytable" ) {
    kt <- kable( df, "latex", booktabs=T )
    notop <- strsplit(kt, "\midrule")[[1]][2]
    nosur <- strsplit(notop, "\bottomrule" )[[1]][1]  ## fails: doesn't like "\"!
    newkt <- paste0("\begin{", newname, "}", nosur, "\n\end{",newname,"}\n")
    ## attr(newkt, "format") <-  chr "latex"  # wrong
    newkt
}

print(kable.rewrap( data.frame( x=1:3, y=1:3 ), "mytable" ))

应该生产

\begin{mytable}
\toprule
x & y\
\midrule
1 & 1\
2 & 2\
3 & 3\
\bottomrule
\end{mytable}

显然,我的乳胶代码现在应该定义一个环境 mytable。我也对 nosur 行中的“bottomrule”感到困惑,但“\\bottomrule”失败了。

(另一种选择是完全放弃 kable,只使用数据框,每行用 \ 分隔,每列用 & 分隔。)

感谢您的建议。

1) kable.envir 参数将添加 mytable 部分,但这仍然会导致生成我们使用 gsub 删除的表格:

kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  gsub(".(begin|end){tabular.*}", "", ., perl = TRUE)

给予:

\begin{mytable}


\toprule
x & y\
\midrule
1 & 1\
2 & 2\
3 & 3\
\bottomrule

\end{mytable}

2)另一种可能是定义你自己的mytabular环境然后使用:

kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  kable_styling(latex_table_env = "mytabular")

给出:

\begin{mytable}

\begin{mytabular}{rr}
\toprule
x & y\
\midrule
1 & 1\
2 & 2\
3 & 3\
\bottomrule
\end{mytabular}
\end{mytable}

已添加

在 (2) 中而不是定义 do-nothing 环境来替换表格 tex/latex 实际上已经提供了一个可用的环境,即 @empty.

kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  kable_styling(latex_table_env = "@empty")

备注

我们将问题中显示的数据框命名如下:

test_data <- data.frame(x = 1:3, y = 1:3)