如何在bookdown表格单元格中插入LaTeX公式与tikz绘图
解决方案
要同时兼容HTML和PDF两种输出格式,最稳定的方案是用knitr::kable生成表格,直接嵌入tikz绘图和LaTeX公式,具体实现如下:
实现步骤
- 调整tikz代码块参数,设置合适的输出宽度和垂直对齐规则,避免图幅过大撑爆单元格,同时保证和同行内容对齐
- 公式直接用行内LaTeX语法编写,注意R字符串中反斜杠需要双重转义
- 调用
kable生成表格时设置escape=FALSE,避免单元格内的LaTeX和HTML代码被转义
示例代码
library(knitr) # 预生成uniform分布的tikz图 uniform_plot <- knit_child(text = " ```{tikz, echo=FALSE, cache=TRUE, out.width='2cm', out.extra='style=\"vertical-align: middle;\"'} \\begin{tikzpicture}[baseline={([yshift=-.5ex]current bounding box.center)}] \\draw[->] (-1.7,0) -- (1.9,0) node[below]{$x$}; \\draw[->] (0,-.2) -- (0,1.4) node[right]{$K(x)$}; \\draw (-1,0.1) -- (-1,-0.1) node[below] {$-1$}; \\draw (1,0.1) -- (1,-0.1) node[below] {$1$}; \\draw[thick] (-1.6,0) -- (-1,0); \\draw[thick] (-1,.5) -- (1,.5); \\draw[thick] (1,0) -- (1.6,0); \\end{tikzpicture}
")
构造表格数据
tab_data <- data.frame(
Name = c("Uniform", "Another"),
Plot = c(uniform_plot, "..."),$K(x) = \\cdots$ = c("$\begin{cases}1/2 & \mbox{if } -1 \leq x \leq 1 \\ 0 & \mbox{otherwise}\end{cases}$", "..."),
check.names = FALSE
)
输出表格
kable(tab_data, align = "ccc", escape = FALSE)
## 注意事项 - `out.width`参数可以根据实际需要调整图的大小,`out.extra`的垂直对齐规则在HTML和PDF输出中都会自动适配 - 如果你的tikz图已经提前渲染为本地图片,也可以用`include_graphics("图片路径")`替代内嵌的tikz代码块,效果一致 - 不推荐直接用原生Markdown表格插入内容,对齐和跨格式渲染的兼容性会差很多 内容的提问来源于stack exchange,提问作者jochen
相关产品推荐
相关产品推荐

