1

我在一个利用图表的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) 错误:在 '.\tikz36747a021b22.tex' 上运行 'texi2dvi' 失败

LaTeX 错误:rarygraphdrawing.code.tex:22: Package pgf 错误:您需要运行 LuaTeX 才能使用图形绘图库。

使用knitRStudio 中的按钮或使用render("testNonTufteLua.Rmd", output_format = pdf_document(keep_tex = TRUE, latex_engine = "lualatex"). 我也尝试过设置options(tikzDefaultEngine = "luatex")tikzDevice正确处理它,但它仍然不起作用。graphdrawing即使可以tikz-shapes加载库并且文档的其余部分似乎是用lualatex. 谢谢你的帮助!!

4

2 回答 2

2

更新:同时knitr不再使用tools::texi2dvibut tinytex::latexmk。因此,必须options(tinytex.engine = 'lualatex')在设置块中使用。


这相当棘手,因为您使用的不是用于转换为 PDFtikzDevicetikz引擎。tools::texi2dvi您可以使用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 } }
};
```

结果:

在此处输入图像描述

参考:

于 2018-07-02T21:23:33.647 回答
0

上面示例的一个小的运行变化是以下使用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停止运行后。

于 2020-05-10T02:08:29.527 回答