“LaTeX 错误:只能在序言中使用”,即使所有指令都在 begin 指令之前

“LaTeX 错误:只能在序言中使用”,即使所有指令都在 begin 指令之前

markdown在以下用于pandoc/latex 生成 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}

请注意,所有preamble指令都发生在 begin{document}

pdf通过以下方式生成pandoc

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

产生以下错误:

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

引入数学字体这里有什么不正确?

答案1

Markdown 文档的转换将内容放在 YAML 标头的序言中。但是,由于没有指定 YAML 标头,因此假定内容构成常规文档主体的一部分。因此,\documentclass(和其余部分)最终位于序言之后\begin{document},而不是在序言中。因此,错误“只能在序言中使用”并指向\documentclass...

你需要这样的东西:

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

...

另请参阅如何在 R Markdown 中包含 LaTeX 包?

答案2

看来你有两个问题。

首先,您需要转义#符号(即像\#)。

第二个是你的 pandoc 命令。你需要添加--from latex它,如下所示:

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

不过,我不太清楚你为什么在 Markdown 文件中使用 LaTeX 代码。当我将你的命令更改为:

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

而文件从.md.tex,也解决了这个问题。把它保留为.tex文件似乎更自然,因为它一个.tex文件。不知道我是否误解了什么?

相关内容