[Tex/LaTex] “LaTeX Error: Can be used only in preamble” even though all directives before begin directive

markdownpandocpreamble

In the following simplified version of a markdown doc intended for pandoc/latex generation to `pdf:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Schola}
\setmathfont{TeX Gyre Schola Math}
\begin{document}

## Custom F1 Score For Scoring of Graph Matching

### Overview

The `F1 Score` is intended to compare two sets:

- Truth Set
- Actuals Set

Its calculation is:

$$F_{\beta} = (1 + \beta^2) \cdot \frac{\mathrm{precision_k} \cdot \mathrm{recall_k^2}}{(\beta^2 \cdot \mathrm{precision_k}) + \mathrm{recall_k}}$$


\end{document}

Notice that all of the preamble directives happen before the
begin{document}

The pdf is generated via pandoc:

    $pandoc  -V fontsize=9pt --pdf-engine xelatex -V 
geometry:"left=2cm,right=2cm,top=2cm,bottom=2cm" -o myDoc.pdf myDoc.md

The following error is produced:

Error producing PDF.
! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.60 \documentclass

What is incorrect here for bringing in a mathsy font?

Best Answer

The conversion of a markdown document places content within a YAML header within the preamble. However, since there is no YAML header specified, the contents is assumed to form part of the regular document body. As such, \documentclass (and the rest) ends up after \begin{document} and not in the preamble. Hence, the error "Can be used only in preamble" and pointing to \documentclass...

You'll need something like this:

---
title: "Some title"
author: "Some author"
header-includes:
  - \usepackage{unicode-math}
  - \setmainfont{TeX Gyre Schola}
  - \setmathfont{TeX Gyre Schola Math}
output:
    pdf_document
---

## Custom F1 Score For Scoring of Graph Matching

### Overview

...

Also see How to include LaTeX package in R Markdown?