ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

1 {section .foo .unnumbered key=“val“}

2026/9/20 13:00:15 拓冰建站 浏览量
1 {section .foo .unnumbered key=“val“} 文档开发工具CLI【免费下载链接】pandocUniversal markup converter项目地址https://gitcode.com/gh_mirrors/pa/pandoc点击查看免费下载pandoc 的 Markdown 读者会将其解析为完全相同的 Attr解析逻辑位于 [src/Text/Pandoc/Readers/Markdown.hs](https://link.gitcode.com/i/108f370d091799d57a5ebf4e1a06b1b5) 的 attribute 解析器族见下文第六节。 ## 四、输出侧剖析HTML5 中 Attr 的映射规则 ### 4.1 期望输出 html h1 classfoo unnumbered>attrsToHtml opts (id,classes,keyvals) do attrs - toAttrs keyvals let classes nubOrd $ filter (not . T.null) classes return $ [prefixedId opts id | not (T.null id)] [A.class_ (toValue $ T.unwords classes) | not (null classes)] attrsprefixedId opts id负责生成id支持--id-prefix等选项注入前缀T.unwords classes把类列表拼成空格分隔的class字符串nubOrd与filter保证去重、去空键值对由toAttrs处理。toAttrssrc/Text/Pandoc/Writers/HTML.hs是data-前缀规则的核心当输出为 HTML5 时若键属于html5Attributes/rdfaAttributes白名单、包含:命名空间如epub:、以data-或aria-开头则原样输出否则自动改写为data-key。key不在白名单中因此keyval最终呈现为data-keyval与本测试的期望输出完全一致。4.3 非 HTML5 输出的差异推断从toAttrs的代码分支可以推断在非 HTML5 模式如 HTML4下属性映射策略不同——未知键不会自动添加data-前缀而是按白名单过滤若同时面向 EPUB2 输出不符合白名单的属性甚至会被直接丢弃。因此本测试的结果严格依赖-t html默认的 HTML5 输出模式。五、unnumbered类的特殊语义抑制节编号[foo,unnumbered]中的unnumbered并非普通样式类它是 pandoc 内部识别的保留类作用是标记该标题不参与节编号section numbering。5.1 编号生成阶段的抑制在 src/Text/Pandoc/Shared.hs 的makeSections开启--number-sections时用于计算各级编号并包装section结构中unless (null newnum || unnumbered elem classes) $ S.put newnum ... case lookup number kvs of Nothing | numbering , unnumbered notElem classes - (number, T.intercalate . (map tshow newnum)) : kvs _ - kvs即标题类列表中若存在unnumbered则既不推进当前节编号计数器也不注入number键值对。5.2 HTML 写出的编号抑制在 src/Text/Pandoc/Writers/HTML.hs 的Header分支中let secnum fromMaybe mempty $ lookup number kvs let contents if writerNumberSections opts not (T.null secnum) unnumbered notElem classes then (H.span ! A.class_ header-section-number $ toHtml secnum) toHtml contents else contents即使开启了--number-sections只要标题带unnumbered类就不会渲染span classheader-section-number…/span编号前缀。本例未开启编号选项因此直接输出纯文本1测试结果不受编号逻辑影响但unnumbered类的存在恰好覆盖了编号场景下须被忽略的关键路径。六、从 Markdown 语法到unnumbered属性的来源unnumbered类最常见的来源是 Markdown 标题的属性语法。在 src/Text/Pandoc/Readers/Markdown.hs 中specialAttr解析器专门处理以-开头的特殊属性specialAttr do char - return $ \(id,cs,kvs) - (id,cs [unnumbered],kvs)因此以下写法是等价的# 前言 {.unnumbered} # 前言 {-#}{-#}是{.unnumbered}的简写二者都会被解析为在类列表尾部追加unnumbered。用户可在 MANUAL.txt 的扩展说明中找到更多上下文如需查看其与原生 AST 的对应关系可运行pandoc -f markdown -t native随后输入# 前言 {-#}并按^D观察输出中 Header 的类列表是否出现unnumbered。这正是 6062 测试所用的手工构造 native 输入思路的交互式版本。七、如何运行与扩展该测试7.1 本地复现在源码根目录构建后可直接手动执行测试中的命令以观察实际输出printf [Header 1 (section,[foo,unnumbered],[(key,val)]) [Str 1]]\n | pandoc -f native -t html输出应与测试期望完全一致h1 classfoo unnumbered>cabal test pandoc --test-options-p command赞分享文档开发工具CLI【免费下载链接】pandocUniversal markup converter项目地址https://gitcode.com/gh_mirrors/pa/pandoc点击查看免费下载相关推荐Section 1: [Topic]Section 1: Topic Section 2: Topic Section 3: Topic optional 主体采用 1 个主论点 1 个支撑人工智能AI 技能提示工程AI 评测invalid(1): const value () foo( bar, );invalid 1 : const value foo bar, ; Input ␊ 1 | const value foo ␊ 2 | barLint代码质量Section 1: [组件 A 名称]Section 1: 组件 A 名称 Key Concept : 该组件在整体中的职责一句话概括 Content : 来自源数据的组件描述逐字保留 VisuaAI 技能AI 插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考