使用Sweave / R / Latex每隔一行合并一列

时间:2017-05-01 05:11:38

标签: r latex sweave xtable

我正在使用R / Sweave撰写会议摘要小册子。我已经制作了包含id,作者和标题的打印程序小册子。

现在我想修改它以包含摘要(不用于打印)。但摘要冗长。我的想法是使用抽象信息获取单元格,并使用作者信息显示在行下方 - 在页面的整个宽度上展开。

ID - 作者--------标题-------------------------------- <无线电通信/> 抽象-----------------------------------------------

所以每隔一行只有一列跨越整个表的宽度。 有没有办法将multicolmn{x}添加到其他每一行?

如果无法找到解决方案,那么欢迎以良好方式打印完整摘要的建议。 (&#34以外的东西;只使用横向&#34;或&#34;调整列宽&#34;)

此外,它不一定是PDF。我可以切换到markdown / html - 让它看起来更接近真实的会议节目时间表,这些时间表上有完整的摘要。再一次,我弄清楚如何打印一个表,其中每隔一行只有一列是整个表的宽度。

如果您想尝试 - 这是我现在工作的完整MWE。请注意,它使用必须通过devtools / github安装的R包lipsum

\documentclass{article}

\usepackage{booktabs, multicol, array}
\usepackage[margin=0.75in]{geometry}

%%%%%%%%%%% Let tables to span entire page
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

<<echo=FALSE, warning=FALSE, message=FALSE>>=
# devtools::install_github("coolbutuseless/lipsum")
library(lipsum)
library(xtable)
knitr::opts_chunk$set(echo = FALSE, warning=FALSE, message=FALSE)
options(xtable.comment = FALSE)

tblalign <- "lL{0.5cm}|L{4cm}L{6cm}L{8cm}"

# fake data setup
dat <- data.frame(ID = c(1:3), author = substr(lipsum[1:3], 1, 40), 
                  title = substr(lipsum[4:6], 1, 100), 
                  abstract = lipsum[7:9])

names(dat)=c("\\multicolumn{1}{c}{\\textbf{\\large{ID}}}",
             "\\multicolumn{1}{c}{\\textbf{\\large{Author List}}}",
             "\\multicolumn{1}{c}{\\textbf{\\large{Title}}}",
             "\\multicolumn{1}{c}{\\textbf{\\large{Abstract}}}")

@


\begin{document}

<<results='asis'>>=
print(
  xtable(x = dat
         , align = tblalign)

  , table.placement = "H"
  , sanitize.colnames.function=function(x){x}
  , include.rownames = FALSE
  , include.colnames = TRUE
  , size = "small"
  , floating = FALSE
  , hline.after = c(0,1:nrow(dat))
)
@


\end{document}

2 个答案:

答案 0 :(得分:1)

手动从摘要中分割数据

out <- dat[,-4]
ab.list <- dat$abstract

然后添加.to.row

  , add.to.row = list(pos = as.list(1:nrow(out)),
                      command = paste0("\\multicolumn{3}{L{15cm}}{\\textbf{Abstract: }", ab.list, "} \\\\"))

答案 1 :(得分:0)

使用我的包pdf_document的一种方法。我出于某种原因无法安装嘴唇,所以只是砍掉它。这是一个带有输出```{r, results = 'asis'} lipsum <- rep(do.call(paste, list(rep('blah ', 100), collapse = '')), 10) dat <- data.frame(ID = c(1:3), author = substr(lipsum[1:3], 1, 40), title = substr(lipsum[4:6], 1, 100), abstract = lipsum[7:9], stringsAsFactors = FALSE) library(huxtable) # shape data datmat <- matrix(NA_character_, nrow(dat) * 2, 3) datmat[seq(1, nrow(datmat), 2), ] <- as.matrix(dat[, c('ID', 'author', 'title')]) datmat[seq(2, nrow(datmat), 2), 1] <- dat$abstract # print as PDF ht <- as_huxtable(datmat) colspan(ht)[seq(2, nrow(ht), 2), 1] <- 3 wrap(ht) <- TRUE col_width(ht) <- c(.2, .2, .6) number_format(ht) <- 0 ht ``` 的.Rmd文件。

Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);

PDF output