我有一个使用 tikz 渲染的图表,想将其包含到文档中的多个位置。我尝试定义一个命令将其插入到环境中tikz
,但我不太熟悉LaTeX
,而且似乎不起作用。
\newcommand\ThreeStateDiagram{}
\def\ThreeStateDiagram{
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\begin{tikzpicture}[
sharp corners=2pt,
inner sep=7pt,
node distance=3cm,
>=latex]
\tikzstyle{my node}=[draw,minimum height=1cm,minimum width=2cm]
\node[my node] (A){A};
\node[my node,right of=A](C){C};
\node[my node] at ($(A)!0.5!(C)-(0pt,1.5cm)$) (B) {B};
\draw[->] (A) -- (B);
\draw[->] (A) -- (C);
\draw[->] (B) -- (C);
\end{tikzpicture}
}
另一个困难是,我正在用 RMarkdown 编写文档并使用内置tikz
引擎来呈现它。以下是代码RMarkdown
:
```{tikz, ThreeStateDiagram, fig.cap="Layout Diagram", fig.align="center"}
\ThreeStateDiagram;
`` `
然后我可以用它\@ref(tab:ThreeStateDiagram)
来交叉引用它(因为我正在使用{bookdown}
)。
为了清楚起见,下面的方法可以正常工作(以 LaTeX、HTML 和 Word 格式),但是我不想重复插入它(带有不同的标题):
```{tikz, ThreeStateDiagram, fig.cap="Layout of the MSM used in the motivating model", fig.align="center"}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\begin{tikzpicture}[
sharp corners=2pt,
inner sep=7pt,
node distance=3cm,
>=latex]
\tikzstyle{my node}=[draw,minimum height=1cm,minimum width=2cm]
\node[my node] (A){A};
\node[my node,right of=A](C){C};
\node[my node] at ($(A)!0.5!(C)-(0pt,1.5cm)$) (B) {B};
\draw[->] (A) -- (B);
\draw[->] (A) -- (C);
\draw[->] (B) -- (C);
\end{tikzpicture}
`` `
答案1
knitr
的tikz
引擎将图形渲染成 pdf 文件,然后通过
\begin{figure}
...
\includegraphics{[path-to-pdf-figure]}
...
\end{figure}
您可以自己检查是否在 YAML 标头输出部分中指定keep_tex: true
并检查生成的 *.tex 文件(_book/_main.tex
默认)。
如果你已经命名了相应的块,例如,ThreeStateDiagram
那么该图被命名为 ThreeStateDiagram-1.pdf
如果您使用该bookdown
包来管理和呈现文档,那么该图将存储在_bookdown_files/_main_files/figure_latex/ThreeStateDiagram-1.pdf
如果相应的块是第 n 个未命名的块,则图形的文件名是unnamed-chunk-[n]-1.pdf
(n
用实际值替换)并且将驻留在与上面提到的同一目录中。
如果您的路径documentclass
是beamer
或者您 output: bookdown::beamer_presentation2
在您的路径中指定了_output.yml
_bookdown_files/_main_files/figure_beamer/foo-1.pdf
因此,您可以以类似的方式在后续代码中重复使用该图形。