Использование библиотеки рисования графиков tikz в RMarkdown ... Нужно использовать движок lualatex, но не могу заставить его работать

У меня есть следующий код в rmd файл, который использует tikz для диаграмм:

---
title: "TestNonTufteLua"
author: "Me"
output:
  pdf_document :
    latex_engine: lualatex
---

Prove tikz works:
```{r tikTest1, engine = "tikz"}
\usetikzlibrary{shapes}
\begin{tikzpicture}
    \node[ellipse, draw=black, align = center] (Data) {Data $y_{n}$};
\end{tikzpicture}
```

Then, when you set `eval = TRUE` in the below code, it will not work. 
```{r tikTest2, eval = FALSE, engine = "tikz"}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\tikz [gr/.style={gray!50}, font=\bfseries]
\graph [layered layout] {
    % A and F are horizontally aligned if you also set weight=0.5 for A -- C.
    A -- [minimum layers=2] C -- F,
    { [nodes=gr, edges=gr] A -- B -- { E, D -- F } }
};
```

При переходе на eval=TRUE во второй части я получаю следующую ошибку:

Выход из строки 24-29 (testNonTufteLua.Rmd) Ошибка: не удалось запустить texi2dvi в.\ Tikz36747a021b22.tex'

Ошибки LaTeX: rarygraphdrawing.code.tex:22: Ошибка пакета pgf: Вам необходимо запустить LuaTeX, чтобы использовать библиотеку рисования графиков.

Эта ошибка возникает при использовании knit кнопка от RStudio или использование render("testNonTufteLua.Rmd", output_format = pdf_document(keep_tex = TRUE, latex_engine = "lualatex"), Я также экспериментировал с установкой options(tikzDefaultEngine = "luatex") получить tikzDevice обращаться с ним должным образом, но он все еще не работает. Я просто не могу получить graphdrawing библиотека для работы, хотя tikz-shapes библиотека может быть загружена, а также, что остальная часть документа, кажется, скомпилирована с lualatex, Спасибо за любую помощь!

1 ответ

Это довольно сложно, так как вы не используете tikzDevice но tikz двигатель, который использует tools::texi2dvi конвертировать в PDF. Вы можете изменить это, используя options(texi2dvi = "lualatex"), Тем не менее, шаблон по умолчанию не работает с LuaLaTeX. Поэтому я создал модифицированный шаблон:

\RequirePackage{luatex85}
\documentclass{article}
\usepackage[luatex,active,tightpage]{preview}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{preview}
%% TIKZ_CODE %%
\end{preview}
\end{document}

И укажите этот файл с engine.opts = list(template = "tikz2pdf.tex"), Собираем все это здесь мой рабочий файл:

---
title: "TestNonTufteLua"
author: "Me"
output:
  pdf_document :
    latex_engine: lualatex
---

```{r}
options(texi2dvi = "lualatex")
```

```{r tikTest2, eval = TRUE, engine = "tikz", engine.opts = list(template = "tikz2pdf.tex")}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\tikz [gr/.style={gray!50}, font=\bfseries]
\graph [layered layout] {
    % A and F are horizontally aligned if you also set weight=0.5 for A -- C.
    A -- [minimum layers=2] C -- F,
    { [nodes=gr, edges=gr] A -- B -- { E, D -- F } }
};
```

Результат:

Рекомендации:

Небольшая вариация приведенного выше примера заключается в следующем: tinytex.

    ---
    title: "lualatex. Using `tinytex.engine`"
    output:
      html_document:
        df_print: paged
      pdf_document:
        latex_engine: lualatex
    ---

   ## Latex engines
   By default, PDF documents are rendered using `pdflatex`. You can specify an
   alternate engine using the `latex_engine` option. Available engines 
   are `pdflatex`, `xelatex`, and `lualatex.` 

    ```{r setup}
    options(tinytex.engine = "lualatex")
    ```

    ```{r tikzLua, eval = TRUE, engine = "tikz", engine.opts = list(template =  "tikz2pdf.tex")}
    \usetikzlibrary{graphs, graphdrawing}
    \usegdlibrary{layered}

   \tikz [gr/.style={gray!50}, font=\bfseries]
   \graph [layered layout] {
    % A and F are horizontally aligned if you also set weight=0.5 for A -- C.
    A -- [minimum layers=2] C -- F,
    { [nodes=gr, edges=gr] A -- B -- { E, D -- F } }
    };
    ```

После обновления в knitr приведенный выше пример перестал работать.

Другие вопросы по тегам