【问题标题】:Using tikz graphdrawing library within RMarkdown ... Need to use lualatex engine, but can't get it to work在 RMarkdown 中使用 tikz graphdrawing 库...需要使用 lualatex 引擎,但无法使其工作
【发布时间】:2018-03-10 18:00:46
【问题描述】:

我在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 Error: You 需要运行 LuaTeX 才能使用图形绘制库。

使用 RStudio 中的 knit 按钮或使用 render("testNonTufteLua.Rmd", output_format = pdf_document(keep_tex = TRUE, latex_engine = "lualatex") 时会出现此错误。我还尝试过设置options(tikzDefaultEngine = "luatex") 来让tikzDevice 正确处理它,但它仍然无法正常工作。即使可以加载tikz-shapes 库并且文档的其余部分似乎是用lualatex 编译的,我似乎也无法让graphdrawing 库工作。感谢您的帮助!

【问题讨论】:

    标签: knitr r-markdown tikz tikzdevice


    【解决方案1】:

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


    这相当棘手,因为您使用的不是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 } }
    };
    ```
    

    结果:

    参考资料:

    【讨论】:

      【解决方案2】:

      上面示例的一个小的运行变体如下使用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 更新后,上面的示例停止运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        • 2017-01-20
        相关资源
        最近更新 更多