假设我们在 R 中有一个表,并使用 R 包 Hmisc 中的函数 latex() 将该表包含在 Sweave(或 knitr)文档中。我的问题是:
有没有办法添加水平线之内桌子?
谢谢!
编辑:我的意思是一些选项,例如 \cmidrule 或某些东西被添加到 latex() 的 latex 输出中
你好,迈克尔
答案1
您可以使用n.rgroup
对行进行分组;默认是添加水平线。\cmidrule
虽然我还没有尝试过将行和列组合在一起,但我认为没有简单的添加方法。此外,n.rgroup
在水平线后会产生一条空白行。我也不确定如何消除它。
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{siunitx,booktabs}
\sisetup{group-separator={,},group-minimum-digits={3},
output-decimal-marker={.}}
\usepackage[noae]{Sweave}
\begin{document}
<<>>=
library("Hmisc")
dat <- matrix(c(100, 200, 300, 400,3.145,2.718,
20, 100, 10000, 10000,400,1700.42), 4)
@
<<echo=false,results=tex>>=
latex(dat,table=F,center='centering',file='',
booktabs=T,numeric.dollar=F,colheads=c("Col A","Col B","Col C"),
colnamesTexCmd="bfseries", col.just=c("S","S","S"),n.rgroup=c(2,2))
@
\end{document}
答案2
我刚刚找到了一种解决方法,可以摆脱由引入的额外空白行n.rgroup
。下面我从Alan Munn 的回答并将latex(...)
部分内容附如下(正如 BondedDust 所建议的这个答案另一个问题):
out <- sub("&&\\\\tabularnewline", "", capture.output(
latex(...)
))
然后添加writeLines(out)
后打印的表格没有多余的空白行。
基于 Alan Munn 和 BondedDust 答案的最小工作示例(我使用 knitr 并删除了 Alan Munn 的一些 sweave 包/规范。您可能需要重新插入它们,并且可能还需要更改块选项):
\documentclass{report}
\usepackage{siunitx,booktabs}
\begin{document}
<<echo=FALSE,results='asis', message=FALSE>>=
library("Hmisc")
dat <- matrix(c(100, 200, 300, 400,3.145,2.718,
20, 100, 10000, 10000,400,1700.42), 4)
out <- sub("&&\\\\tabularnewline", "", capture.output(
latex(dat,table=FALSE,center='centering',file='',
booktabs=T,numeric.dollar=FALSE,colheads=c("Col A","Col B","Col C"),
colnamesTexCmd="bfseries", col.just=c("S","S","S"),n.rgroup=c(2,2))
))
writeLines(out)
@
\end{document}
进一步阐述:为了找出应该输入什么来代替问号,sub("???", "", capture.output(...
我在 R(不是 knitr)中运行了以下代码:
library("Hmisc")
dat <- matrix(c(100, 200, 300, 400,3.145,2.718,
20, 100, 10000, 10000,400,1700.42), 4)
capture.output(
latex(dat,table=FALSE,center='centering',file='',
booktabs=T,numeric.dollar=FALSE,colheads=c("Col A","Col B","Col C"),
colnamesTexCmd="bfseries", col.just=c("S","S","S"),n.rgroup=c(2,2))
)
控制台输出中的其中一行:
[11] "&&\\tabularnewline"
这就是导致出现多条白线的原因。再添加 2 个反斜杠来转义每个反斜杠会导致出现"&&\\\\tabularnewline"
,这就是我需要输入的内容,而不是问号。