如何在RMarkdown的tikz代码块中调用已定义的R变量
RMarkdown tikz代码块调用R变量的实现方案
你原来的写法不生效是因为默认的独立tikz代码块不会解析块内的内联R标记,R变量值无法直接注入,可使用以下两种常用方案实现需求:
方案1:直接在R代码块中拼接tikz代码(最简单通用)
开启R代码块的results='asis'参数,用cat()直接输出tikz代码,R变量可直接在输出语句中拼接:
--- output: pdf_document header-includes: - \usepackage{tikz} ---
```{r, echo=FALSE, results='asis'} # 提前定义的R变量 TEXT <- 1 # 拼接tikz代码直接输出为LaTeX内容 cat(' \\begin{tikzpicture} \\node (x) at (0,0) {$x$}; \\node (y) at (3,0) {$y$}; \\draw[->] (x) to node [anchor = north] {', TEXT, '} (y); \\end{tikzpicture} ', sep = "")
## 方案2:使用`knit_expand`动态生成tikz代码块 如果需要保留tikz代码块的原生特性(如缓存、专门的tikz引擎参数配置),可以用knitr的模板渲染功能动态生成可执行的tikz块: ```r --- output: pdf_document --- ```{r, echo=FALSE} TEXT <- 1 library(knitr)
# 渲染tikz模板,替换变量占位符 tikz_template <- knit_expand(text = ' ```{tikz, echo=FALSE} \\begin{tikzpicture} \\node (x) at (0,0) {$x$}; \\node (y) at (3,0) {$y$}; \\draw[->] (x) to node [anchor = north] {{{TEXT}}}; \\end{tikzpicture}
')
执行渲染后的代码块并输出结果
cat(knit_child(text = tikz_template, quiet = TRUE))
内容的提问来源于stack exchange,提问作者POC
相关产品推荐
相关产品推荐

