Как сделать так, чтобы заголовки таблиц RMarkdown (.Rmd) шли вверху
Обычно таблицы имеют заголовки вверху.
Тем не менее, RMarkdown всегда размещает заголовок внизу для вывода pdf_document:
Это странно, потому что в HTML-документах заголовок автоматически помещается вверху:
Как сделать так, чтобы подписи к таблицам шли вверху в документах pdf?
Воспроизводимый пример (замените pdf_document на html_document, чтобы увидеть оба) - содержимое моих файловых таблиц.Rmd:
---
title: "tables"
author: "Robin Lovelace"
date: "09/16/2014"
output: pdf_document
---
text...
Table: This is a table
| id| age|sex | zone|
|--:|---:|:---|----:|
| 1| 59|m | 2|
| 2| 54|m | 2|
| 4| 73|f | 2|
text...
| id| age|sex | zone|
|--:|---:|:---|----:|
| 1| 59|m | 2|
| 2| 54|m | 2|
| 4| 73|f | 2|
Table: This is a table
texts...
1 ответ
Эта тема может пролить свет на проблему, с которой вы столкнулись. Обратите внимание, что последняя версия pandoc (1.13.2) теперь помещает заголовки таблиц в вывод pdf.
Следующие примеры с pandoc-1.12.3
К сожалению \usepackage{floatrow}
предложение не работает для longtable
(табличная среда, сгенерированная писателем LaTeX для pandoc), потому что это не float
среда.
---
header-includes:
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{floatrow}
- \floatsetup[table]{capposition=top}
output: pdf_document
---
| id| age|sex | zone|
|--:|---:|:---|----:|
| 1| 59|m | 2|
| 2| 54|m | 2|
| 4| 73|f | 2|
Table: This is a table
Эта таблица производит следующий латекс:
\begin{longtable}[c]{@{}rrlr@{}}
\toprule\addlinespace
id & age & sex & zone
\\\addlinespace
\midrule\endhead
1 & 59 & m & 2
\\\addlinespace
2 & 54 & m & 2
\\\addlinespace
4 & 73 & f & 2
\\\addlinespace
\bottomrule
\addlinespace
\caption{This is a table}
\end{longtable}
Что делает таблицу, которую вы описали - заголовок не отвечает на \floatsetup
в заголовке yaml).
Чтобы разместить подпись вверху, \caption{}
может быть перемещен. Я лично не знаю простой способ заставить longtable
Подпись к началу (но я не эксперт по LaTeX).
\begin{longtable}[c]{@{}rrlr@{}}
\caption{This is a table} \\
\toprule\addlinespace
id & age & sex & zone
\\\addlinespace
\midrule\endhead
1 & 59 & m & 2
\\\addlinespace
2 & 54 & m & 2
\\\addlinespace
4 & 73 & f & 2
\\\addlinespace
\bottomrule
\end{longtable}
Вы можете использовать xtable
пакет для генерации таблиц, которые находятся в table
среда, которая реагирует на \floatsetup
в преамбуле (хотя пакет также дает вам возможность разместить заголовок вверху).
```{r results = 'asis'}
library(xtable)
# Preset some options for printing your xtables
options(xtable.caption.placement = 'bottom', # notice \floatsetup overrides
xtable.include.rownames = FALSE,
xtable.comment = FALSE,
xtable.booktabs = TRUE)
xtable(
data.frame(
id = c(1L, 2L, 4L),
age = c(59L, 54L, 73L),
sex = c('m', 'm', 'f'),
zone = rep(2L, 3)),
caption = 'This is a table')
```
Предостережение ко всему этому заключается в том, что весь необработанный LaTeX, который подается в pandoc, будет удален, если вы решите скомпилировать в html... bummer.