【发布时间】:2017-11-17 20:41:05
【问题描述】:
我想在bookdown 文档中添加一个 TikZ 图形,以便包含一些精美的图形。
我的主要输出格式是 LaTeX,这意味着我基本上可以将 TikZ 图形逐字包含在 Rmarkdown 文件中,它会渲染得很好。但是,有两个问题困扰着我:
- 我希望 TikZ 图形成为图形环境的一部分(用于编号、标题等)。
- 我希望能够将相同的代码呈现为 PDF (LaTeX) 和 Gitbook (HTML)。
现在我有以下块,当我渲染为 pdf 时,它可以很好地生成相关图表。
```{r, echo=FALSE, engine='tikz', out.width='90%', fig.ext='pdf', fig.cap='Some caption.'}
\begin{tikzpicture}[scale=.7]
\draw [fill=gray!30,very thick] (0,-1) rectangle (5,1);
\draw [very thick] (5, 0) -- (13,0);
\node [below] at (2,-1) {\large Hello};
\node [below, align=center] at (0,-1) {\large Two\\ lines};
\end{tikzpicture}
```
但是,代码有两个问题:
- 渲染到 gitbook 时我没有得到任何输出(使用
knitr和bookdown)。但是,我确实得到了图形标题,如果我渲染到html_document,那么它也可以工作,我可以看到图形。 - 对于 PDF,文本使用计算机现代字体呈现。我真的很想更改它,并且 LaTeX 文档中的主要字体已经设置为其他字体。但是,由于代码是由 TikZ 引擎在本地渲染然后插入的,因此它不是完整 LaTeX 文档的一部分。我可以在渲染代码之前添加一些 TikZ 引擎包含的 LaTeX 选项、包等吗?
如果有其他方法可以将 TikZ 代码包含在图形环境中,那么我很乐意知道。
更新:我猜第二点可以通过设置engine.opts = list(template = "latex/tikz2pdf.tex") 来解决,其中LaTeX 的必要设置包含在tikz2pdf.tex 文件中。该文件是使用 LaTeX 读取的,但我想使用 xelatex 来解析文件,因为我使用的是 fontspec LaTex 包。还能改吗?
【问题讨论】:
-
我只能说这是可能的,但我没有时间调查它。您必须非常非常深入地查看 knitr 的源代码才能弄清楚(可能需要对 knitr 进行一些更改)。
-
pandoc 过滤器可能会有所帮助 pandoc.org/lua-filters.html#building-images-with-tikz
标签: r knitr r-markdown bookdown tikzdevice