如何创建带自动计数功能的Jekyll Liquid tab标签插件?
Jekyll Tab标签实现文档内自动计数
要实现每个文档内独立的Tab序号计数,核心是利用Jekyll的**当前文档上下文(page变量)**存储计数器——每个页面在构建时独立处理,page变量可保存该页面专属的计数状态,无需额外维护实例数组。
完整插件代码(_plugins/tab_tag.rb)
# 预定义的caption哈希表 CAPTIONS = { diagram: "图表展示说明", config: "系统配置说明" }.freeze module Jekyll class TabTag < Liquid::Tag def initialize(tag_name, caption_key, tokens) super # 清理输入的键(去除空格并转为符号) @caption_key = caption_key.strip.to_sym end def render(context) # 获取当前页面的上下文对象 page = context.registers[:page] # 初始化页面内的tab计数器,不存在则设为0 page["tab_counter"] ||= 0 # 计数器自增 page["tab_counter"] += 1 # 从哈希表获取对应caption文本,键不存在时用键名兜底 caption_text = CAPTIONS.fetch(@caption_key, @caption_key.to_s) # 生成目标HTML结构 "<p><b>Tab. #{page["tab_counter"]}.</b> #{caption_text}</p>" end end end # 注册Liquid标签 Liquid::Template.register_tag("tab", Jekyll::TabTag)
关键逻辑说明
- 文档专属计数:通过
context.registers[:page]获取当前文档的page对象,在page上绑定tab_counter变量,确保每个文档的计数从1开始独立递增。 - 计数自增逻辑:每次渲染标签时,先检查计数器是否存在,不存在则初始化为0,随后自增1,保证序号严格按标签出现顺序生成。
- 哈希表取值处理:用
fetch方法安全获取预定义的caption文本,同时提供默认值避免键不存在时抛出错误。
使用示例
在Markdown文件中写入:
{% tab diagram %} {% tab config %}
构建后生成的HTML:
<p><b>Tab. 1.</b> 图表展示说明</p> <p><b>Tab. 2.</b> 系统配置说明</p>
内容的提问来源于stack exchange,提问作者Рауль Каримов
相关产品推荐
相关产品推荐

