You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bookdown中使用knitr::include_graphics并排图片时如何添加间距?

Bookdown并排图片间距优化方案

问题背景

在bookdown中插入现有图片的推荐方式是使用knitr::include_graphics。例如,实现两张图片并排显示的代码如下:

fig1_path <- paste0(fig_path,"image1.png")
fig2_path <- paste0(fig_path,"image2.png")

knitr::include_graphics(c(fig1_path, fig2_path))

但此方式生成的HTML和LaTeX输出中,图片间距过近,需添加间距以提升显示效果。HTML输出可通过外部CSS轻松调整,但LaTeX输出暂无合适解决方案。目前考虑的临时方案为插入空白图片或给图片添加侧边间距,希望获取更优建议。

优化方案建议

针对LaTeX输出的专属调整

  • 自定义knitr钩子插入间距:通过修改plot钩子,在LaTeX输出时自动给并排图片添加水平间距,避免手动修改每个代码块:
knitr::knit_hooks$set(plot = function(x, options) {
  # 判断是否是并排图片场景(out.width为50%且输出为LaTeX)
  if (grepl("50%", options$out.width) && knitr::is_latex_output()) {
    paste0("\\includegraphics[width=48%]{", x, "} \\hspace{0.6cm}")
  } else {
    # 其他场景使用默认钩子
    knitr::hook_plot_tex(x, options)
  }
})

调整width和hspace的数值可以灵活控制图片占比和间距大小。

  • 用gridExtra组合图片:将两张图片合并为一个网格对象,统一控制间距,这种方式对HTML和LaTeX输出都适用:
library(gridExtra)
library(png)

# 读取图片
fig1 <- rasterGrob(readPNG(fig1_path))
fig2 <- rasterGrob(readPNG(fig2_path))

# 组合图片并设置间距
grid.arrange(fig1, fig2, ncol = 2, 
             padding = unit(0.5, "cm"), # 图片间的内边距
             widths = c(0.48, 0.48)) # 每张图片的宽度占比
  • 修改LaTeX模板定义专用环境:如果是长期维护的项目,可以修改bookdown使用的LaTeX模板,添加一个带间距的并排图片环境:
% 在LaTeX模板中添加
\newcommand{\sidebysidefig}[2]{
  \begin{figure}[htbp]
    \centering
    \includegraphics[width=48\%]{#1} \hspace{4\%} \includegraphics[width=48\%]{#2}
    \caption{}
  \end{figure}
}

然后在R代码中直接调用这个命令:

knitr::asis_output(paste0("\\sidebysidefig{", fig1_path, "}{", fig2_path, "}"))

兼顾HTML和LaTeX的通用方案

通过条件判断分别适配两种输出格式,实现统一的显示效果:

if (knitr::is_html_output()) {
  # HTML输出给图片添加自定义类,用CSS控制间距
  knitr::include_graphics(c(fig1_path, fig2_path), class = "side-by-side-img")
} else {
  # LaTeX输出直接插入带间距的命令
  knitr::asis_output(paste0(
    "\\includegraphics[width=48%]{", fig1_path, "} \\hspace{4%} ",
    "\\includegraphics[width=48%]{", fig2_path, "}"
  ))
}

对应的CSS代码(放在bookdown的样式文件中):

.side-by-side-img {
  margin-right: 12px;
  margin-bottom: 8px;
}

内容的提问来源于stack exchange,提问作者fulem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:40:41