вертикальные таблицы по центру гробов в rmarkdown pdf - PullRequest
0 голосов
/ 12 марта 2020

Я хочу, чтобы мои таблицы были выровнены по верху друг друга, но центрированы вертикально по отношению к странице относительно самой длинной таблицы. Мне нужно, чтобы это был автомат c с таблицами разной длины. Это то, что я должен вертикально выровнять их друг с другом, как показано @baptiste здесь .

---
output: pdf_document
geometry: 
  - paperwidth=13.333in
  - paperheight=7.5in
  - margin=.5in
---

```{r, echo=F, fig.align='center'}
library(magrittr)
library(gridExtra)
library(gtable)
library(grid)


# from https://stackoverflow.com/a/32111143/
justify <- function(x, hjust="center", vjust="center", draw=TRUE){
  w <- sum(x$widths)
  h <- sum(x$heights)
  xj <- switch(hjust,
               center = 0.5,
               left = 0.5*w,
               right=unit(1,"npc") - 0.5*w)
  yj <- switch(vjust,
               center = 0.5,
               bottom = 0.5*h,
               top=unit(1,"npc") - 0.5*h)
  x$vp <- viewport(x=xj, y=yj)
  if(draw) grid.draw(x)
  return(x)
}

t1 <- cars %>%
  head() %>% 
  tableGrob()

t2 <- cars %>% 
  head(15) %>% 
  tableGrob()


tables <- list(t1, t2) %>% 
  lapply(justify, vjust="top", hjust ="left",  draw = F) %>% 
  arrangeGrob(grobs = ., nrow = 1)

grid.newpage()
grid.draw(tables)
```

enter image description here

I Я подумал, что если бы я просто поместил мой вертикально выровненный tables в таблицу с одной ячейкой, высоту которой равнялся бы странице, то он бы автоматически центрировал их по вертикали.


```{r, echo=F, fig.align='center'}
grid.newpage()
gtable(widths = unit(10, "in"),
       # 6.5 inches is the page height minus the margins
       heights =  unit(6.5, "in")) %>%
  gtable_add_grob(tables, t = 1, l = 1, clip = "off") %>%
  grid.draw()
showViewport()
```

enter image description here

Хуже! Плюс, стол, который я сделал, чтобы положить tables, не такой высоты, как должен.

...