2014-09-16 3 views
4

Обычно таблицы имеют подписи вверху.Как сделать таблицы подписи RMarkdown (.Rmd) вверху

Однако RMarkdown всегда помещает заголовок в нижней части для pdf_document выходов:

enter image description here

Это странно, потому что в HTML-документы заголовок автоматически помещается в верхней:

enter image description here

Как сделать подписи к заголовкам в верхней части документа PDF?

Возпроизводимо пример (заменить pdf_document с html_document, чтобы увидеть и другое) - содержимое моего файла tables.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... 
+0

Для * pdf * вы можете использовать пакет 'floatrow' (LaTeX) с' \ floatsetup [table] {capposition = top} ' – daroczig

+0

Спасибо за этот комментарий @daroczig. Я вижу, как это будет работать после опции 'keep_tex: true' в латексе, но не уверены в том, как реализовать это решение в RMarkdown.Например, размещение '\ usepackage {floatrow}' в преамбуле yaml не работает ... – RobinLovelace

+1

Вы должны добавить эту строку (и директиву 'usepackage') в преамбулу LaTeX, а не в YAML. См. http://tex.stackexchange.com/a/194569/2878 – daroczig

ответ

4

This thread can shed some light on the problem you're having. Обратите внимание, что последняя версия pandoc (1.13.2) теперь помещает заголовки таблиц сверху в pdf-выход.

Следующие примеры с pandoc-1.12.3

К сожалению \usepackage{floatrow} предложения не работает для longtable (таблиц среды, созданной в LaTeX writer for 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]{@{}[email protected]{}} 
\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).

table 1

разместить заголовок в верхней части, \caption{} могут быть перемещены. Я лично не знаю простого способа заставить заголовок longtable сверху (но я не эксперт LaTeX).

\begin{longtable}[c]{@{}[email protected]{}} 
\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} 

table 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') 
``` 

table 3

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