Хук Knitr для добавления кода перед строкой \ documentclass в текстовом файле, чтобы избежать столкновения опций с xcolor - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать PDF-документ, используя rmarkdown и knitr.Мне нужно использовать пакет xcolor tex с некоторыми параметрами (например: [table] или [svgnames]).

Всякий раз, когда я пытаюсь это сделать, используя - \usepackage[table]{xcolor} в заголовке YAML или в преамбулеВ текстовом файле, указанном под pdf_document includes in_header:, я получаю следующую ошибку:

! LaTeX Error: Option clash for package xcolor

Опция clash вызвана тем, что knitr engine pdf_document также загружает xcolor пакет прямо или косвенно через другой пакет.Я подозреваю последнее, потому что проблема возникла недавно после того, как я обновил несколько текстовых пакетов.

Возможное решение - добавить \PassOptionsToPackage{table}{xcolor} в начале файла tex, до\documentclass[]{article} строка.Когда я выполняю это вручную, проблема устраняется.

Добавление его в текстовый файл преамбулы или в заголовок YAML добавляет его только после строки \documentclass[] в текстовом файле.

Как исправитьthis?

Существует ли какая-либо функция 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 голосов
/ 20 ноября 2018

Я смог воспроизвести это после обновления пакета LaTeX fancyvrb до версии 3.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 Iполучить файл журнала, содержащий:

(/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.В обычном рабочем процессе эти последние шаги не нужны.

...