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

Enable ligatures with Fira Code in PDF output of Rmarkdown

以下代码使我能够使用 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
```

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

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}

以下 YAML 不起作用。

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

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

如果您查看生成的 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
```