R Markdown 文件的 YAML Header - 添加带选项的 LaTeX 包会抛出错误(有时)

YAML Header for R Markdown file - Adding LaTeX packages with options throws errors (sometimes)

R Markdown Cookbook 之后(以及此处的一些帖子),我正在尝试在 YAML header 中为我的 R Markdown 插入一个 collection 的 LaTeX 包文件。

当我 copy/paste 来自该网站的 header 进入我的文件时:

output: 
  pdf_document:
    extra_dependencies:
      caption: ["labelfont={bf}"]
      hyperref: ["unicode=true", "breaklinks=true"]
      lmodern: null

我收到错误:! LaTeX Error: Option clash for package hyperref.只有当我在方括号中包含选项时才会发生这种情况 - 如果我删除它们,一切都会按预期进行。

在类似的情况下,我尝试以相同的方式添加 babel 包。当我这样包含它时:

    extra_dependencies:
      babel: ["hebrew", "english"]

我得到错误:! You can't use end-group 字符 }' 在 \the.`

之后

我更困惑了(如果可能的话),因为当我包含 threeparttable 包的选项时,一切运行都没有问题。

这是一个要测试的文件:

---
title: "R Notebook"
author: 
   - Me
date: "Last compiled on `r format(Sys.time(), '%d %B %Y')`"
output: 
  pdf_document: 
    highlight: tango
    keep_tex: yes
    number_sections: yes
    toc: yes
    fig_caption: yes
    extra_dependencies:
      cjhebrew: null
      babel: ["hebrew", "english"]
---


# Section 1

Test

当我将其编织成 PDF 时,出现错误:

!你不能在 \the 之后使用 `end-group 字符 }'。 \everypar #1->\o@everypar {\rl@everypar #1}

日志文件位于 this repo

rmarkdown 自动加载 hyperref 包。您无法使用冲突的选项再次加载它。

您可以使用 \hypersetup{...} 更改其设置:

---
output: 
  pdf_document:
    keep_tex: true
header-includes:
  - \hypersetup{breaklinks=true}
---

test

但是你确定你需要所有的选项和包吗?

  • rmakdown已经使用了unicode选项,所以不需要再添加

  • rmarkdown也会自动加载lmodern包,无需再次加载


另一个问题是babel和microtype包的交互,rmarkdown默认加载。使用真正的乳胶,您可以简单地避免加载除厨房水槽之外的每个包裹,并且您永远不会遇到这个问题,或者至少您可以将 nopatch 选项直接添加到 microtype (如果您真的需要它)...但是 rmarkdown 使这变得不必要地复杂化。

这是一个肮脏的 hack,希望没有其他包也使用这个名称作为选项:

---
title: "R Notebook"
author: 
   - Me
date: "Last compiled on `r format(Sys.time(), '%d %B %Y')`"
output: 
  pdf_document: 
    highlight: tango
    keep_tex: yes
    number_sections: yes
    toc: yes
    fig_caption: yes
    extra_dependencies:
      cjhebrew: null
      babel: ["hebrew", "english"]
classoption: "nopatch"
---


# Section 1

Test