【问题标题】:tikzDevice does not use LaTeX preamble when used in RMarkdown documenttikzDevice 在 RMarkdown 文档中使用时不使用 LaTeX 前导码
【发布时间】:2019-06-16 14:21:51
【问题描述】:

我想在 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}

【问题讨论】:

    标签: r r-markdown tikzdevice


    【解决方案1】:

    我不确定你是否真的想要你想要的。该图将作为一个单独的文档生成,该文档只包含该图,该图将呈现为 PDF。 scrartclarticle 之间的差异对数字无关紧要,它们对整个文档很重要。

    但如果您确实需要该文档类,您可以通过在文档早期的 R 块中指定 options(tikzDocumentDeclaration = "\\documentclass[12pt]{scrartcl}") 来获得它。当我这样做时,我可以在源代码中看到它有效,但输出看起来与默认类几乎相同。也可以使用块选项指定这一点,但这样做不太可能有任何优势。

    【讨论】:

    • 感谢您的回复。我知道我可以手动设置 tikzDocumentDeclaration,但据我了解,这应该自动发生(使用 knitr,它确实如此)。我想要 tikz 文件中的文档设置的原因是具有与主文档中相同的设置(字体和字体大小,语言设置,...)
    • 我想你想使用块选项external=FALSE,相当于tikz(standAlone=FALSE)dev = "tikz" 的默认值为standAlone=TRUE,这通常会导致更快的处理(但不会响应字体更改等)
    【解决方案2】:

    我想我明白了:

    我的问题是,在使用 RMarkdown 时,选项 tikzDocumentDeclarationtikzLatexPackages ...(几乎所有 tikzDevice 选项)都没有自动设置。当您使用 knitr 时,tikzDevice 的选项会在从源文件中拆分标记和代码块的过程中设置。使用 RMarkdown,没有 LaTeX 代码可以提取并与 tikz 一起使用,因为 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}
    

    【讨论】:

    • 您能否发布一个示例来说明“使用 knitr”的含义? R Markdown 主要由knitr 处理。您是在谈论使用 Sweave 样式的 Rnw 文件吗?
    • 是的,我指的是那个。我添加了一个示例。
    猜你喜欢
    • 2014-02-27
    • 2018-03-20
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多