【问题标题】:rewrapping kable latex table to different tabular environment将 kable 乳胶表重新包装到不同的表格环境
【发布时间】:2020-08-29 10:02:38
【问题描述】:

我想只保留 kable 创建的乳胶表的“内部”行。我只知道这样做的繁琐和丑陋的方法......尝试更清洁的版本失败了。这是一个干净的失败:

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,只使用数据框,每行用 \ 分隔,每列用 & 分隔。)

建议表示赞赏。

【问题讨论】:

    标签: r latex kable


    【解决方案1】:

    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) 中,实际上并没有定义一个无操作环境来替换表格 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)
    

    【讨论】:

    • 已在已添加部分中添加了对 (2) 的改进。
    猜你喜欢
    • 2021-09-03
    • 2022-01-17
    • 2015-01-14
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2017-07-18
    相关资源
    最近更新 更多