在Rmarkdown的PDF输出中使用Fira Code启用连字

时间:2018-04-28 08:25:20

标签: r latex yaml pandoc ligature

以下代码使我能够将Fira Code用作单色字体。

---
monofont: "Fira Code"
output: 
  pdf_document:
    latex_engine: xelatex
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r}
x <- 1:5
x != 2
```

这会为!=生成所需的连字,但不会为<-生成。

enter image description here

this post中接受的答案中详述的解决方案在LaTeX中完成时可以使用,例如,

\documentclass{article}

\usepackage{mathspec}
\setmonofont[Contextuals={Alternate}, Scale=0.75, Ligatures=TeX]{Fira Code}
\makeatletter
\def\verbatim@nolig@list{}
\makeatother

\begin{document}

\begin{verbatim}
x <- 1:5
x != 2
\end{verbatim}

\end{document}

enter image description here

以下YAML不起作用。

---
monofont: "Fira Code"
output: 
  pdf_document:
    latex_engine: xelatex
header-includes: |
  \makeatletter
  \def\verbatim@nolig@list{}
  \makeatother
---

可以直接在YAML中启用连字吗?

1 个答案:

答案 0 :(得分:1)

如果查看生成的LaTeX输出,您会看到引用了大括号:\def\verbatim@nolig@list\{\}。这个引用问题已在github上的几个问题中讨论过,似乎有一个可用的修复程序(c.f。this issue),但我没有测试它,因为我的Debian测试机仍然使用pandoc 1.19.2.4。作为一种解决方法,您可以将必要的命令放入单独的文件中,例如preamble.tex

\makeatletter
\def\verbatim@nolig@list{}
\makeatother

然后使用

---
monofont: "Fira Code"
output: 
  pdf_document:
    latex_engine: xelatex
    include:
      in_header: preamble.tex
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r}
x <- 1:5
x != 2
```