使用 R 的规范自动化 LaTeX 表格

使用 R 的规范自动化 LaTeX 表格

我有一些由 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有关控制其他选项的信息。

相关内容