如何在RMarkdown文档中强制Tikz显示西里尔文字?

时间:2018-08-04 21:08:57

标签: r-markdown knitr tikz

下面是我的实验性RMarkdown文档(名为 tikz-cyrillic.Rmd ):

---
title: "TikZ cyrillic test"
output:
  pdf_document:
    keep_tex: yes
    latex_engine: xelatex
    dev: tikz
  html_document: default
  word_document: default
---

```{r,engine='tikz', fig.ext = if (knitr:::is_latex_output()) 'pdf' else 'svg'}
\begin{tikzpicture}
\path (0,0) node
(x) {Hello World!}
(3,1) node[circle,draw](y) {$\int_1^2 x \mathrm d x$};
\draw[->,blue]
(x) -- (y);
\draw[->,red]
(x) -| node[near start,below] {мир!} (y);
\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {Привет} (y);
\end{tikzpicture}
```

它基于示例from 17.11 of pgfmanual.pdf

Gummi将 TeXLive与XeTeX 一起使用,并带有简单的序言

\usepackage[main=russian,english]{babel}
\usepackage{fontspec}
\setmainfont[Ligatures={TeX,Historic}]{Times New Roman}

提供以下输出:

Gummi output

您可以in OverLeaf对其进行测试。

但是在RStudio中,我无法理解应该在哪里输入TikZ设备的序言,因此输出错误(例如HTML):

RStudio HTML-output

我应该在RMarkdown文档中进行哪些更改才能在TikZ图中获得正确的输出?

对于HTML,PDF和Word文档(docx),我需要具有相同的图像外观。

注意:如果需要的话,我将在带有TeXLive 2015的Ubuntu 16.04 LTS上使用Gummi和RStudio 1.1.456。

1 个答案:

答案 0 :(得分:3)

可以配置Knitr引擎,请参见例如https://stackoverflow.com/a/51143900/8416610供参考。您的情况有所不同,因为同时需要PDF和SVG输出。由于SVG输出使用DVI,因此我们无法使用xelatex来处理tikz图形。相反,我们必须设置标准latex才能输出西里尔字母:

---
title: "TikZ cyrillic test"
output:
  pdf_document:
    keep_tex: yes
    latex_engine: xelatex
  html_document: default
mainfont: Liberation Serif
monofont: Liberation Mono
---

```{r,engine='tikz', fig.ext = if (knitr:::is_latex_output()) 'pdf' else 'svg', engine.opts = list(template = "tikz2pdf-cyr.tex")}
\begin{tikzpicture}
\path (0,0) node
(x) {Hello World!}
(3,1) node[circle,draw](y) {$\int_1^2 x \mathrm d x$};
\draw[->,blue]
(x) -- (y);
\draw[->,red]
(x) -| node[near start,below] {мир!} (y);
\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {Привет} (y);
\end{tikzpicture}
```

使用tikz2pdf-cyr.tex

\documentclass{article}
\usepackage{libertine}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[active,tightpage]{preview}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{preview}
%% TIKZ_CODE %%
\end{preview}
\end{document}

请注意,此处图像和主要文本使用不同的字体。目前,我无法上传任何屏幕截图...