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

Ruby Kramdown调用to_kramdown后代码块分隔符变更的修复咨询

问题:Kramdown的to_kramdown方法将代码块分隔符从```转为`,如何恢复?

复现代码

require 'kramdown'

code = <<END
```rb
num = 0
while num < 2 do
   print("num = ", num)
end
print("End")

END

puts code #1

doc = Kramdown::Document.new(code)

puts doc.to_kramdown #2

### 执行输出
```text
```rb
num = 0
while num < 2 do
   print("num = ", num)
end
print("End")

rb num = 0 while num < 2 do print("num = ", num) end print("End")

### 用户疑问
- 如何恢复使用```作为代码块的分隔符?
- 查看Kramdown::Document对象时发现包含`:codespan_delimiter=>"```"`属性,是否可以利用该属性实现恢复?
- 尝试了Kramdown GFM Parser,但它将代码块转换为以下格式,不符合需求:
  ```text
      num = 0
      while num < 2 do
         print("num = ", num)
      end
      print("End")
  {: .language-rb}

解决方案

1. 调用to_kramdown时指定code_block_fence参数

Kramdown的to_kramdown方法支持传入配置选项,其中code_block_fence可以指定代码块的分隔符。只需在输出时设置该参数为"```",就能恢复围栏代码块格式:

require 'kramdown'

code = <<END
```rb
num = 0
while num < 2 do
   print("num = ", num)
end
print("End")

END

doc = Kramdown::Document.new(code)

指定代码块分隔符为```

puts doc.to_kramdown(code_block_fence: "```")

执行后输出会保持原始的```代码块格式。

### 2. 关于`:codespan_delimiter`属性的说明
这个属性是用来控制**行内代码片段**(比如`print("hello")`这种行内代码)的分隔符,和多行代码块的分隔符无关,因此无法用它来恢复围栏代码块的格式,不要混淆两者的作用。

### 3. GFM Parser的替代方案
GFM Parser默认会将围栏代码块转换为缩进式代码块加属性标注,这是GFM规范的另一种写法,但如果需要保留```格式,就不适合使用该解析器,还是使用默认解析器加上述配置更直接。

---

内容的提问来源于stack exchange,提问作者masaino
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:40:37