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

如何为R Markdown代码块及输出块添加自定义标题

解决R Markdown中同时显示代码和输出时的块标题问题

我明白你的问题了——当代码块和输出块同时显示时,原来的hook只会给整个包裹容器加一个标题,没法分别给代码和输出各自带上对应的标题对吧?其实我们可以利用knitr的source和output钩子来分别处理这两部分,这样不管是单独显示代码、单独显示输出,还是两者同时显示,每个块都能拥有自己的专属标题。

以下是修改后的完整实现代码:

title: Block title
output:
  html_document:
    highlight: tango
# 定义代码块(source)的钩子
knitr::knit_hooks$set(source = function(x, options) {
  # 如果需要显示代码(echo=TRUE)且启用了block.title
  if (options$echo && !is.null(options$block.title) && options$block.title) {
    # 标题用引擎名或自定义class.output,默认是引擎名
    title <- if (!is.null(options$class.output)) options$class.output else options$engine
    paste0('<div><div class="block-title">', title, '</div>', x, '</div>')
  } else {
    x
  }
})

# 定义输出块(output)的钩子
knitr::knit_hooks$set(output = function(x, options) {
  # 如果需要显示输出(results != "hide")且启用了block.title
  if (options$results != "hide" && !is.null(options$block.title) && options$block.title) {
    # 标题默认是"Output",也可以用自定义class.output
    title <- if (!is.null(options$class.output)) options$class.output else "Output"
    paste0('<div><div class="block-title">', title, '</div>', x, '</div>')
  } else {
    x
  }
})
.block-title {
  font-weight: bold;
  display: block;
  background-color: lightgrey;
  padding: 5px 10px;
  border-radius: 3px;
  margin-bottom: 0;
}
/* 给代码块和输出块添加上边距,和标题区分开 */
pre, .knitr-output {
  margin-top: 0;
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

示例测试

仅显示代码块

str(iris)

仅显示输出块

str(iris)

同时显示代码和输出块

str(iris)

效果说明

  • 仅代码块:会显示带r标题的代码块
  • 仅输出块:会显示带Output标题的输出内容
  • 代码+输出:代码块带r标题,输出块带Output标题,两者各自独立包裹,完美解决你遇到的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:56:20