rlatexrstudiotextinytex

Booktabs table does not show in pdf or doc


I get an error when trying to create a pdf that has a booktabs table in it. If I delete the table code, the pdf is created without a problem.

RStudio: Latest version

R: latest version

tinytex: latest version

Below is my Rmd file:

---
title: "table"
author: "Author"
date: "2/13/2021"
output:
  pdf_document:
    latex_engine: xelatex
  html_document:
    df_print: paged
includes:
  in_header: preamble.tex
---

Something here

\begin{table}[h]
    \centering
    \caption{Descriptive Statistics}
    \label{tab:descriptiveStatistics}
    {
        \begin{tabular}{lr}
            \toprule
             & Weight  \\
            \cmidrule[0.4pt]{1-2}
            Valid & 13  \\
            Missing & 0  \\
            Mean & 170.769  \\
            Std. Deviation & 29.255  \\
            Minimum & 140.000  \\
            Maximum & 235.000  \\
            \bottomrule
        \end{tabular}
    }
\end{table}

Below is my preamble.tex file:

\usepackage{booktabs}
\usepackage{makecell}

The error that I get is as follows:

output file: test.knit.md

! Undefined control sequence.
l.81             \toprule

Error: LaTeX failed to compile test.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See test.log for more info.
In addition: Warning message:
In has_crop_tools() : 
Tool(s) not installed or not in PATH: pdfcrop, ghostcript
-> As a result, figure cropping will be disabled.
Execution halted

Solution

  • Your preamble.tex isn't included because your yaml header is wrong. Should be:

    ---
    title: "table"
    author: "Author"
    date: "2/13/2021"
    output:
      pdf_document:
        latex_engine: xelatex
        includes:
          in_header: preamble.tex
      html_document:
        df_print: paged
    ---
    

    Then it works.

    I would also recommend using kableExtra. It basically produces LaTeX code and saves you a lot of time making tables in my experience. You can set keep_tex: yes (also under pdf_document:) to double-check what is being produced.