2

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?

  • In markdown you need a YAML header, not \documentclass{article}. Use something like - header-includes: -\usepackage{unicode-math} -\setmainfont{TeX Gyre Schola} -\setmathfont{TeX Gyre Schola Math}. See, for example, How to include LaTeX package in R Markdown? – Werner Dec 12 '18 at 6:18
  • @Werner - ah ya .. I have other docs doing that and will go copy and paste from them. Pls make this an answer – javadba Dec 12 '18 at 6:19
3

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?

  • ya i forgot to add that yaml header. – javadba Dec 12 '18 at 6:30
  • 1
    In newer versions of pandoc you can set the fonts directly: mainfont: 'TeX Gyre Schola' and mathfont: 'TeX Gyre Schola Math', cf. pandoc.org/MANUAL.html#variables-for-latex – DG' Dec 12 '18 at 7:05
2

It seems you have two problems.

The first is that you need to escape the # symbols (i.e. like \#).

The second is your pandoc command. You need to add --from latex to it, like this:

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

I'm not entirely sure why you are using LaTeX code in a Markdown file, however. When I change your command to:

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

And the file from .md to .tex, it also fixes the problem. It seems more natural to just keep it as a .tex file, because it is a .tex file. Not sure if I misunderstood something?

  • "escape the #" huh ? this absolutely is markdown. I have truncated a couple hundred line markdown file to show just the tex related portion of it. – javadba Dec 12 '18 at 6:03
  • @javadba it was difficult to tell. Looked like TeX, but you were saying Markdown, so I was a little confused what you were aiming for. I decided to go the route of the document provided, whereas Werner went the route that you said in your post :) Anyhow, glad it worked out with his answer. – whatisit Dec 12 '18 at 6:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.