RMarkdown 中的 Tikz

RMarkdown 中的 Tikz

我有一个使用 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

knitrtikz引擎将图形渲染成 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.pdfn用实际值替换)并且将驻留在与上面提到的同一目录中。

如果您的路径documentclassbeamer或者您 output: bookdown::beamer_presentation2在您的路径中指定了_output.yml_bookdown_files/_main_files/figure_beamer/foo-1.pdf

因此,您可以以类似的方式在后续代码中重复使用该图形。

相关内容