0

我正在使用HmiscR 中的包来生成可重现的 LaTex 表,并希望抑制\midrule在 booktabs 模式下默认生成的一些水平线 ( )。我已经在这里和 tex.stackexchange 上筛选了 Hmisc 文档以及许多 Hmisc 解决方案,但我不相信这样的事情已经得到解答(但如果我错了,请纠正我)。

这是一个应该可重现的最小示例:

library(Hmisc)    
myDF <- data.frame("foo" = c(1:10),
                       "bar" = rep(c("a","b"),5),
                       "baz" = c(21:30))

latex(myDF,
      file="",
      rowname = "",
      rowlabel = "",
      rgroup = c("Group A", "Group B", "Group C"),
      n.rgroup = c(3, 4, 3),
      booktabs = TRUE
      )

生成以下输出:

 %latex.default(myDF, file = "", rowname = "", rowlabel = "", rgroup = c("Group A",     "Group B", "Group C"), n.rgroup = c(3, 4, 3), booktabs = TRUE,     )%
\begin{table}[!tbp]
\begin{center}
\begin{tabular}{lrlr}
\toprule
\multicolumn{1}{l}{}&\multicolumn{1}{c}{foo}&\multicolumn{1}{c}{bar}&\multicolumn{1}{c}{baz}\tabularnewline
\midrule
{\bfseries Group A}&&&\tabularnewline
~~&$ 1$&a&$21$\tabularnewline
~~&$ 2$&b&$22$\tabularnewline
~~&$ 3$&a&$23$\tabularnewline
\midrule
{\bfseries Group B}&&&\tabularnewline
~~&$ 4$&b&$24$\tabularnewline
~~&$ 5$&a&$25$\tabularnewline
~~&$ 6$&b&$26$\tabularnewline
~~&$ 7$&a&$27$\tabularnewline
\midrule
{\bfseries Group C}&&&\tabularnewline
~~&$ 8$&b&$28$\tabularnewline
~~&$ 9$&a&$29$\tabularnewline
~~&$10$&b&$30$\tabularnewline
\bottomrule
\end{tabular}\end{center}
\end{table}

如何抑制输出中出现的部分或全部 '\midrule'?

请注意,虽然我不喜欢用 解决这个问题Hmisc,但我有一些限制,该rgroup标志以非常有效的方式解决。虽然我不相信xtablestargazer(例如)提供可用的替代方案,但我当然愿意接受其他包,只要我可以保留我的示例中提供的具有行分组的布局。

4

1 回答 1

2

我采取的处理方法Hmisc::latex是尽可能接近它,捕获结果,用正则表达式修复它,然后打印。在这里使用正则表达式让我感到有点内疚,因为我怀疑有一种专门的方式来做这些事情,但经过几个小时的搜索,我不再关心了。

在 RMarkdown 中,

---
title: "Table without midrules"
author: "Edward Visel"
date: "12/3/2016"
header-includes:
   - \usepackage{booktabs}
output: pdf_document
---


```{r table, message=FALSE, results='asis'}
library(Hmisc)    
myDF <- data.frame("foo" = c(1:10),
                       "bar" = rep(c("a","b"),5),
                       "baz" = c(21:30))

tb <- capture.output(latex(myDF,
      file="",
      rowname = "",
      rowlabel = "",
      rgroup = c("Group A", "Group B", "Group C"),
      n.rgroup = c(3, 4, 3),
      booktabs = TRUE, 
      where = '!htbp'    # so table prints in correct location
      ))[-1]    # so LaTeX comment at beginning doesn't print

cat(grep('\\midrule', tb, value = TRUE, invert = TRUE))    # use gsub if you prefer
```

没有中线的桌子

于 2016-12-03T23:31:00.857 回答