我有一些由 R 代码生成的乳胶表,示例乳胶表代码如下
\begin{table}[ht]
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c}
\hline
& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 \\
\hline
1 & 186.30 & 101.52 & 128.33 & 148.02 & 132.08 & 138.63 & 107.98 & 133.09 & 134.12 & 119.23 & 133.21 & 165.73 \\
2 & 104.03 & 184.67 & 184.07 & 169.27 & 117.85 & 107.67 & 169.89 & 111.93 & 185.41 & 134.30 & 198.12 & 120.83 \\
3 & 170.20 & 189.47 & 142.98 & 106.06 & 116.85 & 120.74 & 100.51 & 195.18 & 196.31 & 189.16 & 180.00 & 191.78 \\
4 & 176.23 & 187.77 & 127.99 & 194.66 & 135.87 & 152.42 & 137.35 & 109.88 & 162.07 & 171.81 & 136.07 & 122.29 \\
\hline
\end{tabular}
\end{center}
\end{table}
我将生成大约 50 或 60 个这样的表格。我想在表格中的每一行后输入'\hdashline',并希望用'\vspace{2em}'分隔表格 我如何才能从 R 代码中自动为每个表执行此操作,因为我有很多表,我找不到在 x-table 中写入这些表的函数。如能提供任何帮助我将不胜感激。
答案1
@Alex:关于表格之间的间距 - 我认为表格上方、之间或下方没有文字,对吗? - 以下命令(放在序言中)将完成这项工作:
\setlength\floatsep{2em}
您还应该将所有\begin{center}
...\end{center}
对替换为单个\centering
指令(在 之前立即发生\begin{tabular}...
),以消除该对指令插入的额外间距。接下来,考虑将[ht]
放置指令更改为[h]
。
关于自动插入命令\hdashline
(我必须承认我不熟悉它):我会说这是(i)您应该在中编写的程序R
,将其与每个表的其余内容一起打印出来,或者(ii)进行全局搜索\\
并将其替换为\\ \hdashline
,然后进行相关的搜索和替换以查找\hline
和之间冲突的实例hdashline
。
不过,从纯粹的美学角度来说,我建议你不是根本不要添加所有这些额外的(虚线?)水平线,因为在我看来,它们不太可能增强表格的可读性。此外,您甚至可能还想考虑消除所有垂直线。下面的代码对比了这两种方法:第一个表格有很多垂直和水平规则,第二个表格的垂直和水平规则很少。(我所做的是重现您的示例表格的缩短版本。)第二个表格还使用包的规则绘制命令booktabs
,而不是 LaTeX 的\hline
命令,以在规则和文本/数字行之间实现更多的“呼吸空间”。
\documentclass[letterpaper]{article}
\usepackage[margin=1in]{geometry}
\usepackage{booktabs,lscape}
\setlength{\floatsep}{2em}
\begin{document}
\begin{landscape}
\begin{table}[t]
\caption{Table with lots of ``rules''} \label{tab:manyrules}
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 \\
\hline
1 & 186.30 & 101.52 & 128.33 & 148.02 & 132.08 & 138.63 & 107.98 & 133.09 & 134.12 & 119.23 & 133.21 & 165.73 \\ \hline
2 & 104.03 & 184.67 & 184.07 & 169.27 & 117.85 & 107.67 & 169.89 & 111.93 & 185.41 & 134.30 & 198.12 & 120.83 \\
\hline
\end{tabular}
\end{center}
\end{table}
\begin{table}[h]
\caption{A table with very few ``rules''}
\label{tab:fewrules}
\centering
\begin{tabular}{*{14}{c}}
\midrule[\heavyrulewidth]
& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 \\
\midrule
1 & 186.30 & 101.52 & 128.33 & 148.02 & 132.08 & 138.63 & 107.98 & 133.09 & 134.12 & 119.23 & 133.21 & 165.73 \\
2 & 104.03 & 184.67 & 184.07 & 169.27 & 117.85 & 107.67 & 169.89 & 111.93 & 185.41 & 134.30 & 198.12 & 120.83 \\
\bottomrule
\end{tabular}
\end{table}
\end{landscape}
\end{document}
答案2
最简单的建议是使用表R 包和add.to.row
参数:
dat <- data.frame(A = 1:10, B = runif(10))
xdat <- xtable(dat)
addtorow <- list(pos = list(seq_len(nrow(dat)-1)),
command = "\\hdashline \n")
print(xdat, add.to.row = addtorow)
这里addtorow$pos
是一个包含索引的列表1, 2, ..., 9
,这意味着在第 1、2、...、9 行之后,包括字符串中列出的 latex 函数/命令addtorow$command
。
上述代码产生:
> print(xdat, add.to.row = addtorow)
% latex table generated in R 2.13.1 by xtable 1.5-6 package
% Fri Aug 19 21:51:21 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
\hline
& A & B \\
\hline
1 & 1 & 0.94 \\
\hdashline
2 & 2 & 0.50 \\
\hdashline
3 & 3 & 0.86 \\
\hdashline
4 & 4 & 0.43 \\
\hdashline
5 & 5 & 0.34 \\
\hdashline
6 & 6 & 0.41 \\
\hdashline
7 & 7 & 0.30 \\
\hdashline
8 & 8 & 0.38 \\
\hdashline
9 & 9 & 0.74 \\
\hdashline
10 & 10 & 0.98 \\
\hline
\end{tabular}
\end{center}
\end{table}
查看帮助?xtable
和?print.xtable
有关控制其他选项的信息。