如何强制 RMarkdown 文档中的 Tikz 显示西里尔文本?

N0r*_*ert 5 tikz knitr r-markdown

下面是我的实验 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}
```
Run Code Online (Sandbox Code Playgroud)

它基于pgfmanual.pdf 的 17.11 中的示例

Gummi 使用TeXLive 和 XeTeX以及简单的前导码

\usepackage[main=russian,english]{babel}
\usepackage{fontspec}
\setmainfont[Ligatures={TeX,Historic}]{Times New Roman}
Run Code Online (Sandbox Code Playgroud)

给我以下输出:

软糖产量

你可以在 OverLeaf 中测试它。

但是在 RStudio 中,我不明白我应该在哪里输入 TikZ 设备的前导码,所以我有错误的输出(以 HTML 为例):

RStudio HTML 输出

我应该在 RMarkdown 文档中更改什么才能在 TikZ 图中获得正确的输出?

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

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

Ral*_*ner 5

可以配置knitr引擎,请参阅/sf/answers/3580073031/以获取参考。您的情况有所不同,因为您需要 PDF 和 SVG 输出。由于SVG输出使用DVI,我们不能用于xelatex处理tikz图形。相反,我们必须设置标准latex来输出西里尔文:

\n\n
---\ntitle: "TikZ cyrillic test"\noutput:\n  pdf_document:\n    keep_tex: yes\n    latex_engine: xelatex\n  html_document: default\nmainfont: Liberation Serif\nmonofont: Liberation Mono\n---\n\n```{r,engine=\'tikz\', fig.ext = if (knitr:::is_latex_output()) \'pdf\' else \'svg\', engine.opts = list(template = "tikz2pdf-cyr.tex")}\n\\begin{tikzpicture}\n\\path (0,0) node\n(x) {Hello World!}\n(3,1) node[circle,draw](y) {$\\int_1^2 x \\mathrm d x$};\n\\draw[->,blue]\n(x) -- (y);\n\\draw[->,red]\n(x) -| node[near start,below] {\xd0\xbc\xd0\xb8\xd1\x80!} (y);\n\\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82} (y);\n\\end{tikzpicture}\n```\n
Run Code Online (Sandbox Code Playgroud)\n\n

tikz2pdf-cyr.tex

\n\n
\\documentclass{article}\n\\usepackage{libertine}\n\\usepackage[T2A]{fontenc}\n\\usepackage[utf8]{inputenc}\n\\usepackage[active,tightpage]{preview}\n\\usepackage{amsmath}\n\\usepackage{tikz}\n\\usetikzlibrary{matrix}\n\\begin{document}\n\\begin{preview}\n%% TIKZ_CODE %%\n\\end{preview}\n\\end{document}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n