编织钩在tex文件中的\ documentclass行之前添加代码,以避免选项与xcolor冲突

时间:2018-11-20 09:19:07

标签: r latex r-markdown knitr

我正在尝试使用rmarkdownknitr创建pdf文档。我需要使用带有某些选项的xcolor tex软件包(例如:[table][svgnames])。

每当我尝试在YAML标头中使用- \usepackage[table]{xcolor}或在pdf_document includes in_header:下提到的前导tex文件中尝试这样做时,都会得到以下结果错误:

! LaTeX Error: Option clash for package xcolor

选项冲突是因为knitr引擎pdf_document还在直接或通过另一个包间接加载xcolor包。我怀疑是后者,因为在我更新了一些tex软件包后,这个问题最近才出现。

一个可能的解决方案是在tex文件的开头\documentclass[]{article}之前的add \PassOptionsToPackage{table}{xcolor}。手动执行此操作后,问题已解决。

将其添加到前导tex文件或YAML标头中,仅将其添加到tex文件中的\documentclass[]行之后。

该如何解决?

在tex文件中,是否有任何knitr hook函数将\PassOptionsToPackage{}{}行添加到\documentclass[]行之前??

---
title: "xcolor options clash"
author: "xcolor, options clash"
header-includes:
- \usepackage[table]{xcolor}
output:
  pdf_document:
    dev: cairo_pdf
    fig_caption: no
---

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

## Passage

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

```{r cars}
summary(cars)
```

## Plots

```{r pressure, echo=FALSE}
plot(pressure)
```

1 个答案:

答案 0 :(得分:3)

将LaTeX软件包fancyvrb更新到v3.0之后,我能够重现此内容。一种解决方案是利用LaTeX文档类还将其参数也传递给所有已加载的软件包的事实:

---
title: "xcolor options clash"
author: "xcolor, options clash"
classoption: table
output:
  pdf_document:
    dev: cairo_pdf
    fig_caption: no
    keep_tex: yes
---

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

## Passage

Lorem ipsum dolor sit amet, consectetur adipiscing elit ...

```{r cars}
summary(cars)
```

## Plots

```{r pressure, echo=FALSE}
plot(pressure)
```

这将产生一个以

开头的LaTeX文件。
\documentclass[table]{article}
\usepackage{lmodern}
...

编译此LaTeX文件时,我得到一个包含以下内容的日志文件:

(/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
Package: fancyvrb 2018/11/01

Style option: `fancyvrb' v3.0 <2018/11/01> (tvz)
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)

(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 225.

(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
Package: colortbl 2018/05/02 v1.0c Color table columns (DPC)

我认为加载colortbl.sty的事实是table选项确实传递给了xcolor包。在正常的工作流程中,不需要最后这些步骤。