在RMarkdown文档

时间:2019-06-16 14:21:51

标签: r r-markdown tikzdevice

我想在RMarkdown中将tikz用作图形设备,并希望它包含生成的LaTeX前导。

过去,我已经在knitr文档中使用了tikzDevice。 tikzDevice生成的tex文件通常包括我的knitr / LaTeX文档中的整个前言。当我将其与RMarkdown结合使用时,我会得到标准的前同步码(见下文)。

RMarkdown文件:

---
title: "Title"
author: "Me"
fontsize: 12pt
documentclass: scrartcl
output:
  bookdown::pdf_document2:
    toc: true
    fig_caption: true
    keep_tex: true
---

# Introduction

```{r plot, dev="tikz"}
plot(rnorm(50))
``

开始生成的tex文件(plot-1.tex):

% Created by tikzDevice version 0.12.3 on 2019-06-16 16:09:40
% !TEX encoding = UTF-8 Unicode
\documentclass[10pt]{article}

plot-1.tex的所需/预期起点:

% Created by tikzDevice version 0.12.3 on 2019-06-16 16:09:40
% !TEX encoding = UTF-8 Unicode
\documentclass[12pt]{scrartcl}

2 个答案:

答案 0 :(得分:0)

我不确定您是否真的想要您要的东西。该图将作为单独的文档生成,除该图外将不包含任何其他内容,该图将呈现为PDF。 scrartclarticle之间的差异对于数字而言并不重要,对于整个文档而言至关重要。

但是,如果确实需要该文档类,则可以通过在文档的早期R块中指定options(tikzDocumentDeclaration = "\\documentclass[12pt]{scrartcl}")来获得它。当我这样做时,我可以在源代码中看到它的工作原理,但是输出看起来与默认类几乎相同。也可以使用块选项进行指定,但是这样做没有任何好处。

答案 1 :(得分:0)

我想我明白了:

我的问题是,在使用RMarkdown时,选项tikzDocumentDeclarationtikzLatexPackages ...(tikzDevice的几乎所有选项)没有自动设置。使用knitr时,将在从源文件中拆分标记和代码块的过程中设置tikzDevice的选项。使用RMarkdown时,没有提取和使用tikz的LaTeX代码,因为pandoc在渲染图形后生成它。因此,可以手动定义tikz ...选项,也可以像建议的user2554330一样使用块选项external=FALSE

示例minimal_knitr.Rnw:

\documentclass[fontsize=12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\begin{document}

<<r plot, dev='tikz', echo=FALSE>>=
plot(rnorm(50))
@

\end{document}