文章摘要
文章指出Markdown虽然简单易用,但在处理大型技术文档项目时存在局限性。其缺乏结构化语义标签,不利于机器解析(如搜索引擎索引、LLM处理和IDE集成),可能影响内容的多场景应用。作者建议探索更适合技术文档的替代格式。
文章总结
标题:第45期 - Markdown正在限制你的发展
文章来源与发布时间
- 原文标题:Issue 45 - Markdown is Holding You Back
- 发布时间:2025年10月1日
核心内容概述
作者长期使用多种内容格式,虽然喜爱Markdown的简洁性,但在大型文档项目中频繁遇到其局限性。本文探讨了Markdown在技术文档中的不足,并推荐了更具结构化的替代方案。
一、Markdown的结构性缺陷
优点:
- 人类可读、语法简单,适合GitHub或静态站点展示。
- 成为开发者文档的默认选择。
缺点:
1. 缺乏语义描述:
- 仅支持有限的HTML语义标签,无法为搜索引擎、LLM或IDE提供足够的上下文。
- 内容复用或跨系统发布时,因Markdown方言差异导致兼容性问题。
“隐式类型”问题:
- 类似编程语言中的隐式类型,缺乏强制约束。例如,标题在不同文件中可能代表“概念”或“步骤”,但机器无法区分。
- 不同Markdown变体(如CommonMark、GitHub-Flavored Markdown)语法不统一,加剧了不一致性。
扩展方案的局限性:
- MDX通过React组件增强Markdown,但自定义标签(如
<Command>)依赖特定工具链,无法跨平台复用。
- MDX通过React组件增强Markdown,但自定义标签(如
二、语义标记的重要性
核心价值:
- 描述内容本质(如“步骤”而非“列表项”),而非仅控制外观。
- 支持多格式输出:可转换为HTML、PDF等,而Markdown难以逆向添加语义。
- 提升机器处理效率:结构化标签(如<step>)明确含义,减少AI或工具的猜测成本。
三、四种结构化替代方案
reStructuredText
- 特点:Python生态常用,支持指令(如
.. code-block::)、注解和交叉引用。 - 示例:
rst .. note:: This library requires Node.JS ≥ 22.
- 特点:Python生态常用,支持指令(如
AsciiDoc
- 特点:兼顾可读性与语义表达,支持属性(如
:platform:)、条件内容和多格式输出。 - 示例:
asciidoc NOTE: This library requires Node.JS ≥ 22.
- 特点:兼顾可读性与语义表达,支持属性(如
DocBook(XML)
- 特点:工业级技术文档标准,标签(如
<command>、<note>)语义明确,支持复杂转换。 - 示例:
xml <note>This library requires Node.JS >= 22</note>
- 特点:工业级技术文档标准,标签(如
DITA(XML)
- 特点:企业级内容管理架构,支持内容复用(如
<task>和<step>标签)和版本过滤。 - 示例:
xml <step><cmd>npm install my-library</cmd></step>
- 特点:企业级内容管理架构,支持内容复用(如
四、适用场景建议
- 简单文档:Markdown仍适合README等轻量需求。
- 结构化需求:优先选择AsciiDoc或reStructuredText。
- 大规模出版:DocBook或DITA提供标准化工具链,但需权衡XML的复杂性。
行动建议
- 从AsciiDoc入手,利用工具链迁移Markdown内容,再尝试导出为DocBook。
附:推荐资源
- 作者新书《Write Better with Vale》指导内容规范化。
- Tidewave.ai(全栈编程助手)和Google关于无障碍轮播的文章。
互动邀请:欢迎通过BlueSky、Mastodon等平台与作者交流。支持方式包括订阅或购买其著作(如《tmux 3》《Small, Sharp Software Tools》)。
(注:原文中的推广链接和具体工具链细节已简化,保留核心技术讨论。)
评论总结
以下是评论内容的总结:
支持Markdown的观点
简单易用:Markdown因其简单性和易读性成为事实上的文档标准。
- "Markdown won. Simplicity always wins." (khaledh)
- "Markdown is the minimum viable product. It’s easy to learn and still readable if not rendered." (jimmar)
灵活扩展:Markdown可以通过HTML标签扩展功能,满足复杂需求。
- "You can include arbitrary HTML tags in Markdown... It is perfectly capable." (dschuessler)
- "Markdown is just an extension of html. If markdown doesn't provide something, you just write it in html." (prmoustache)
对Markdown的批评
缺乏结构化支持:Markdown在复杂文档或需要语义结构时表现不足。
- "If you're building a developer documentation site, reStructuredText or AsciiDoc are better choices." (philipwhiuk引用部分)
- "Markdown Lacks the Structure You Need... all projects that try to add structures are missing the point." (somat)
扩展混乱:Markdown的扩展导致兼容性问题。
- "People keep extending Markdown, badly and incompatibly." (Animats)
替代方案讨论
Typst:作为Markdown的补充,适合需要更多控制的场景。
- "Typst solves all of AsciiDoc’s problems for me." (jimmar)
- "Typst ought to be the first port of call if Markdown isn't sufficient." (nicoburns)
reStructuredText/AsciiDoc:适合技术写作和复杂文档。
- "For a team of technical writers, .adoc or .rst would be my preference." (johnathandos)
- "Asciidork provides AST representation of asciidoc... very nice package." (autogn0me)
Org-mode:Emacs用户推崇的高效工具。
- "Org-mode is a lot more expressive and natural to write than Markdown." (amitav1)
中立/实用主义观点
工具选择取决于场景:不同任务适用不同工具。
- "The right tool for the job depends on your circumstances." (johnathandos)
- "If you need something else, use something else." (jppope)
内容重于格式:工具不应成为写作质量的限制。
- "No markup language will make you write better... like saying ballpoint pens limit your writing." (jimmar)
其他观点
- 对LLM的争议:不应为适应LLM而改变写作格式。
- "If the LLM needs context humans don't need, the LLM needs fixing, not the content." (philipwhiuk)
- DITA的反对:认为DITA完全不适用于Markdown的典型场景。
- "DITA isn’t appropriate for any task where Markdown is used today." (starkparker)
总结显示,评论者普遍认可Markdown的简单性和普及度,但对复杂场景的支持和扩展问题存在分歧,同时提出了多种替代方案和实用主义的选择建议。