Использование библиотеки рисования графиков 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
приведенный выше пример перестал работать.