How to make RMarkdown (.Rmd) table captions go at the top

前端 未结 1 1164
陌清茗
陌清茗 2021-01-13 15:34

Usually tables have captions at the top.

However, RMarkdown always places the caption at the bottom for pdf_document outputs:

相关标签:
1条回答
  • 2021-01-13 16:29

    This thread can shed some light on the problem you're having. Note that the latest version of pandoc (1.13.2) now places table captions on top in pdf output.

    The following examples are with pandoc-1.12.3

    Unfortunately the \usepackage{floatrow} suggestion doesn't work for longtable (the table environment generated by the LaTeX writer for pandoc), because it is not a float environment.

    ---
    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
    

    This table produces the following latex:

    \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}
    

    Which makes the table you described -- the caption does not respond to the \floatsetup in the yaml header).

    table 1

    To place the caption at the top, \caption{} can be moved. I don't personally know an easy way to force a longtable caption to the top (but I'm not a LaTeX expert).

    \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}
    

    table 2

    You can use the xtable package to generate tables that are in a table environment that responds to the \floatsetup in the preamble (though the package also gives you the option to place the caption at the top).

    ```{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

    The caveat to all of this is that all of the raw LaTeX that is fed to pandoc will be removed if you decide to compile to html... bummer.

    0 讨论(0)
提交回复
热议问题