有一张长桌子,我想做一个自定义列宽,带有脚注,
R 代码如下所示,align() 到特定列宽不起作用?非常感谢,
x <- matrix(rnorm(1000), ncol = 2)
x.big <- xtable(x, caption = "A \\code{longtable} spanning several pages")
add.to.row <- list(pos = list(0), command = NULL)
command <- paste0("\\hline\n\\endhead\n",
"\\hline\n",
"\\multicolumn{", dim(x)[2] + 1, "}{l}",
"{\\footnotesize Continued on next page}\n",
"\\endfoot\n",
"\\endlastfoot\n")
add.to.row$command <- command
print(x.big,
align=c(
"p{0.1cm}|","p{0.1cm}|",
"p{20cm}|"),
hline.after=c(-1), add.to.row = add.to.row, file="x.big.tex",
tabular.environment = "longtable")
答案1
有这么多的线索(“不起作用”加上不完整
R 代码和没有什么关于 LaTeX 部分应该如何工作),我们不可能知道到底出了什么问题。
顺便说一句,这种对齐方式没有任何问题(除了这些数据的荒谬宽度)。相反,一个明显的问题是标题将位于几页的底部!另一个可能的错误是:
\code{}
对于标准文档来说,其用途尚不清楚。- 不加载 xtable (
library(xtable)
) - 当问题的代码是 R 块的一部分时,将表格导出
x.big.tex
到 Sweave/knitr 文档中以直接显示,或者不要在主 LaTeX 文档(即\input{x.big.tex}
)中导入表格。 - 使用
longtable
时xtable.floating = TRUE
(不会造成致命后果,但会产生令人讨厌的警告)
考虑到所有这些,显示不同宽度的列的工作代码可能是:
示例.Rnw:
\documentclass{article}
\usepackage{longtable,array}
\begin{document}
<<results='asis',echo=F>>=
library(xtable)
options(xtable.floating = FALSE)
x <- matrix(rnorm(100), ncol = 2)
x.big <- xtable(x,
align=c("|c","|>{\\centering}p{6em}","|>{\\centering\\arraybackslash}p{12em}|"),
caption = "A \\texttt{longtable} spanning several pages")
add.to.row <- list(pos = list(0), command = NULL)
command <- paste0("\\hline\n\\endhead\n",
"\\hline\n",
"\\multicolumn{", dim(x)[2] + 1, "}{l}",
"{\\footnotesize Continued on next page}\n",
"\\endfoot\n",
"\\endlastfoot\n")
add.to.row$command <- command
print(x.big,
hline.after=c(-1),
add.to.row = add.to.row,
tabular.environment = "longtable",
caption.placement ="top"
)
@
\end{document}
注意:本例中垂直线仅用于查看列宽。在实际表格中,请避免使用垂直线,而使用booktabs
水平线。