【问题标题】:Knit rmarkdown files containing tikz chunks while using fontspec package在使用 fontspec 包时编织包含 tikz 块的 rmarkdown 文件
【发布时间】:2019-06-21 21:22:48
【问题描述】:

这是this 然后this 的后续问题。我正在尝试将一些TikZ 代码包含到rmarkdown 文件中。 first question 解决了在节点标签中使用项目符号的问题,而 second question 添加了使用 varwidth 而不是 minipage 环境。

添加fontspec 包引发了另一个我似乎无法解决的问题。每当我在列表中添加包时,都会引发以下错误:

! Fatal Package fontspec Error: The fontspec package requires either XeTeX or (fontspec) LuaTeX. (fontspec)
(fontspec) You must change your typesetting engine to, (fontspec) e.g., "xelatex" or "lualatex"instead of (fontspec) "latex" or "pdflatex".

按照前面的答案,代码由以下2个文件组成:

  • Title.Rmd:
---
title: "Title"
author: "Me"
output:
  bookdown::pdf_document2:
    keep_tex: yes
    latex_engine: xelatex
---


```{tikz tikz-ex, echo=FALSE, fig.cap = "Funky tikz", fig.ext = 'pdf', cache=FALSE, eval=TRUE, engine.opts = list(template = "tikz2pdf.tex")}
\usetikzlibrary{
shapes,
arrows
}
\begin{tikzpicture}

\node[stile] (a){
\begin{minipage}{2.5cm}
p
\begin{myBullets}
\item first item
\item second item
\end{myBullets}
\end{minipage}
};

\end{tikzpicture}
```
  • tikz2pdf.tex:
\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\usepackage[utf8]{inputenc}
\usepackage[skins]{tcolorbox}
\usepackage{
tikz,
enumitem,
xcolor
}

\usepackage{fontspec} % new adding to previous answers
\setromanfont{Times New Roman}

\begin{document}

\definecolor{BulletsColor}{rgb}{0, 0, 0.9}
\definecolor{myColor}{rgb}{0.98, 0.94, 0.9}
\newlist{myBullets}{itemize}{1}

\setlist[myBullets]{
  label=\textcolor{BulletsColor}{\textbullet},
  leftmargin=*,
  topsep=0ex,
  partopsep=0ex,
  parsep=0ex,
  itemsep=0ex,
  before={\color{BulletsColor}\itshape}
}

\tikzstyle {stile} = [
ellipse,
draw=BulletsColor,
fill=myColor,
thick,
inner sep=0pt,
text centered, 
align=center
]

\begin{preview}
%% TIKZ_CODE %%
\end{preview}

\end{document}

根据上面的错误消息,我知道我处于pdflatex 模式,而fontspec 要求我处于xelatex 或lualatex 模式。鉴于我的标题中有latex_engine: xelatex,这让我感到以下问题:

  • 为什么这里在头部设置latex_engine: xelatex不够用?
  • knitr 块不关心标题中的latex_engine: xelatex 吗?如果是这样,我该如何解决?
  • 我错过了什么?

我一直在四处寻找,一个建议(对我来说并不过分复杂)是确保将全局/项目设置设置为weave rnw files using: knitr、Typeset LateX into pdf using: XeLaTex。但是,这并没有真正帮助解决我的问题。

【问题讨论】:

    标签: latex r-markdown knitr tikz fontspec


    【解决方案1】:

    正如https://stackoverflow.com/a/51143900/8416610 中所述,您必须通过在设置块中使用options(tinytex.engine = 'xelatex') 来告诉tinytex::latexmk 使用xelatex 而不是pdflatex。

    此外,您应该更新您的 tikz2pdf.tex 以与 XeTeX 兼容:

    • 从包preview 中删除选项pdftex
    • 删除包inputenc。

    通过这些更改,您的文档对我有用。

    【讨论】:

    • 抱歉反应迟了!我在别处被关押。否则,这解决了我的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多