4

我正在创建一个使用 xtable 创建表格并放入 pdf 文件的 sweave 文档。它可以工作,但表格不适合文档,并且缺少一些文本。有没有办法在 xtable 中进行文本对齐/完全适合 xtable 到 pdf 文件?

这是我的数据:

dput(x)
structure(list(App = structure(c(3L, 2L, 1L), .Label = c("AppServer", 
"Db", "Web"), class = "factor"), Group = structure(c(2L, 1L, 
1L), .Label = c("Back", "Front"), class = "factor"), Owner = structure(c(1L, 
1L, 1L), .Label = "Infrasructure", class = "factor"), Server = structure(1:3, .Label = c("ServerA", 
"ServerB", "ServerC"), class = "factor"), NumberCPU = c(64L, 
120L, 120L), Description = structure(c(1L, 3L, 2L), .Label = c("Front End server to server web traffic", 
"Hold Web templates to generate dynamic content", "Keeps customer data and login information"
), class = "factor"), Cost = structure(1:3, .Label = c("$200,000 ", 
"$400,000 ", "$500,000 "), class = "factor")), .Names = c("App", 
"Group", "Owner", "Server", "NumberCPU", "Description", "Cost"
), class = "data.frame", row.names = c(NA, -3L))

这是将表格放入pdf的代码:

print(xtable(x, caption=paste("Summary of applications"),table.placement="!h",caption.placement="top", align=c('l', 'p{1.5in}', rep('c',6) )))
4

2 回答 2

5

我建议查看xtable 库,有很多有用的示例。基本上,如果您不想通过缩短字符串来调整表格,我看到两个选项:

  1. 使用较小的字体。
  2. 使用横向模式。

在这里,我使用了两者的组合:

\documentclass{article}
\usepackage{rotating}

\begin{document}

<<Data,echo=FALSE>>=
library(xtable)
x <- structure(list(App = structure(c(3L, 2L, 1L), .Label = c("AppServer", 
"Db", "Web"), class = "factor"), Group = structure(c(2L, 1L, 
1L), .Label = c("Back", "Front"), class = "factor"), Owner = structure(c(1L, 
1L, 1L), .Label = "Infrasructure", class = "factor"), Server = structure(1:3, .Label = c("ServerA", 
"ServerB", "ServerC"), class = "factor"), NumberCPU = c(64L, 
120L, 120L), Description = structure(c(1L, 3L, 2L), .Label = c("Front End server to server web traffic", 
"Hold Web templates to generate dynamic content", "Keeps customer data and login information"
), class = "factor"), Cost = structure(1:3, .Label = c("$200,000 ", 
"$400,000 ", "$500,000 "), class = "factor")), .Names = c("App", 
"Group", "Owner", "Server", "NumberCPU", "Description", "Cost"
), class = "data.frame", row.names = c(NA, -3L))
@

<<tab,echo=FALSE,results='asis'>>=
print(xtable(x, caption=paste("Summary of applications"),
             caption.placement="top",
             align=c('l', 'p{1.5in}', rep('c',6))),
             size="footnotesize",
             floating.environment="sidewaystable")
@


\end{document}

请注意,您必须使用 LaTex 包rotating。这应该给你这样的东西:

输出

于 2013-03-26T19:35:03.570 回答
1

另一种解决方案是使用一些降价后端(knitrmarkdownpander)并将表格自动拆分为 80 个字符(或其他用户指定的宽度)pander。例如:

> library(pander)
> res <- structure(list(App = structure(c(3L, 2L, 1L), .Label = c("AppServer", "Db", "Web"), class = "factor"), Group = structure(c(2L, 1L, 1L), .Label = c("Back", "Front"), class = "factor"), Owner = structure(c(1L, 1L, 1L), .Label = "Infrasructure", class = "factor"), Server = structure(1:3, .Label = c("ServerA", "ServerB", "ServerC"), class = "factor"), NumberCPU = c(64L, 120L, 120L), Description = structure(c(1L, 3L, 2L), .Label = c("Front End server to server web traffic", "Hold Web templates to generate dynamic content", "Keeps customer data and login information"), class = "factor"), Cost = structure(1:3, .Label = c("$200,000 ", "$400,000 ", "$500,000 "), class = "factor")), .Names = c("App", "Group", "Owner", "Server", "NumberCPU", "Description", "Cost"), class = "data.frame", row.names = c(NA, -3L))
> pander(res)

----------------------------------------------------
   App     Group      Owner      Server   NumberCPU 
--------- ------- ------------- -------- -----------
   Web     Front  Infrasructure ServerA      64     

   Db      Back   Infrasructure ServerB      120    

AppServer  Back   Infrasructure ServerC      120    
----------------------------------------------------

Table: Table continues below


---------------------------------------
     Description             Cost  
------------------------------ --------
Front End server to server web $200,000
    traffic                        

Keeps customer data and login  $400,000
       information                     

Hold Web templates to generate $500,000
       dynamic content                 
---------------------------------------

pandoc然后可以使用或pander直接从 R轻松地将结果转换为 pdf 或 LaTeX 。

于 2013-03-26T20:51:03.920 回答