Как сделать так, чтобы заголовки таблиц 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).

Таблица 1

Чтобы разместить подпись вверху, \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}

Таблица 2

Вы можете использовать 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')
```

таблица 3

Предостережение ко всему этому заключается в том, что весь необработанный LaTeX, который подается в pandoc, будет удален, если вы решите скомпилировать в html... bummer.

Другие вопросы по тегам