我想将TikZ图形添加到bookdown文档中,以便包含一些精美的图形。
我的主要输出格式是LaTeX,这意味着我基本上可以将TikZ图形逐字地包含在Rmarkdown文件中,并且它会呈现得很好。然而,有两个问题困扰着我:
现在,我有以下块,它很好地生成了相关的图形作为一个图形,当我呈现为pdf。
```{r, echo=FALSE, engine='tikz', out.width='90%', fig.ext='pdf', fig.cap='Some caption.'}开始{tikzpicture}scale=.7
绘制fill=gray!30,very thick矩形(5,1);
绘制very thick - (13,0);
\节点在(2,-1) {\大Hello}处;
节点下方,align=center在(0,-1) {\大二线};
结束{tikzpicture}
但是,代码有两个问题:
knitr和bookdown)时,我不会得到任何输出。但是,我确实得到了图形标题,如果我呈现给html_document,那么它也能工作,我可以看到图。如果有其他方法将TikZ代码作为图形环境的一部分,那么我很乐意知道。
更新:--我想第二点可以通过设置engine.opts = list(template = "latex/tikz2pdf.tex")来修复,其中LaTeX的必要设置包含在tikz2pdf.tex文件中。该文件是使用LaTeX读取的,但我希望使用xelatex来解析该文件,因为我使用的是fontspec LaTex包。可以改变一下吗?
发布于 2017-11-21 09:35:08
我想我找到了我两个问题的答案。正如一辉指出的那样,这确实需要相当长的时间。我在这里给出了答案,以防其他人需要这个(或者我自己在稍后的时候)。
Re 1)将TikZ代码呈现给pdf和gitbook
这比我预期的要容易得多。将参数fig.ext=if (knitr:::is_latex_output()) 'pdf' else 'png'设置为块参数的一部分有助于实现这一点。如果我没有编织到PDF,那么imagemagick或其他软件会自动将其转换为PNG。
re2)修改字体
正如我更新的问题中所列出的,这可以通过调整tikz2pdf.tex文件来设置,该文件是编织机的一部分。它的副本包含在下面,所以你不必自己搜索它。设置块参数engine.opts = list(template = "latex/tikz2pdf.tex")使您能够在呈现TikZ代码之前将任何想要的字体、LaTeX包等放在序言中。
通过查看knitr代码,您可以看到texi2dvi用于解析插入了TikZ代码的tikz2pdf.tex文件。texi2dvi调用pdflatex,如果您需要使用XeLaTeX或LuaLaTeX来包含使用fontspec的TrueType字体,这会使事情变得一团糟。
我确信在texi2dvi代码中可以以某种方式解决这个问题,但是一个更简单的解决方案(至少对我来说)是改变环境。如果我在启动R和呈现书籍之前设置了两个环境变量,那么xelatex将自动用于编译所有代码。在我的bash终端中,这是使用
export LATEX="xelatex"
export PDFLATEX="xelatex"瞧!
块变成
```{r, echo=FALSE, engine='tikz', out.width='90%', fig.ext=if (knitr:::is_latex_output()) 'pdf' else 'png', fig.cap='Some caption.', engine.opts = list(template = "latex/tikz2pdf.tex")}
开始{tikzpicture}scale=.7
绘制fill=gray!30,very thick矩形(5,1);
绘制very thick - (13,0);
\节点在(2,-1) {\大Hello}处;
节点下方,align=center在(0,-1) {\大二线};
结束{tikzpicture}
而tikz2pdf.tex是
\documentclass{article}
\include{preview}
\usepackage[pdftex,active,tightpage]{preview}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}
%% INSERT YOUR OWN CODE HERE
\begin{document}
\begin{preview}
%% TIKZ_CODE %%
\end{preview}
\end{document}我仍然对knitr和相关软件包的整个灵活性感到惊讶。干得好,一辉!
发布于 2022-10-13 20:42:44
我在用pgfplots和bookdown编写绘图时遇到了问题。使用engine='tikz',给出错误消息:“axis环境不存在”。我通过将\usepackage{tikz}更改为tikz2pdf.tex文件中的\usepackage{pgfplots}并按照建议使用engine.opts = list(template ="Tikz2pdf.tex")来修复它。
https://stackoverflow.com/questions/47358934
复制相似问题