中文 Markdown 里的 ** 为什么会失效

原文:AI 输出中的 ** 是怎么来的:谈中文 Markdown 强调标记的渲染问题 作者:PlatyHsu 发布时间:2026-04-17 18:01(UTC+8) 说明:这里不做全文转载,只做摘要整理和少量引用;完整内容请回原站阅读。 最近看少数派这篇文章,刚好把一个平时经常见到、但很少认真追根溯源的问题讲透了: 为什么 AI 明明吐出了 Markdown 的 **,结果中文里的加粗却没有生效? 比如下面这种内容,我们大概都见过: 1 2 **重要:**请注意。 这是**「重要」**的内容。 看起来像是标准 Markdown,但不少渲染器最后会把 ** 原样显示出来,而不是变成粗体。 这篇文章讲了什么 原文的核心观点很简单: 早年的原版 Markdown 规则其实比较“松”,很多中文场景下反而能正常加粗。 现在更主流的实现,大多跟随 CommonMark 规范。 CommonMark 为了避免误判数学式、变量名等内容,引入了更严格的“贴合”规则。 这套规则主要按英文的分词和标点习惯设计,对中文这种不依赖空格分词的文本并不友好。 所以问题不在 AI,也不在你写错了 **,而在于很多现代 Markdown 渲染器对“强调”这件事判断得更严格了。 为什么中文里更容易出问题 原文提到,CommonMark 在处理强调标记时,会判断一串 * 或 _ 是否满足“左侧贴合”和“右侧贴合”。 说人话就是: 开始的强调标记,后面最好直接跟文字,或者某些“起始型”标点。 结束的强调标记,前面最好直接跟文字,或者某些“结束型”标点。 这套思路放在英文里比较自然,因为英文大量依赖空格来分隔词语和标点位置;但到了中文里,文字之间本来就没有空格,于是像中文冒号、书名号、引号这样的场景,就很容易让强调判断失败。 也就是说,下面这两种写法在不少 CommonMark 系实现里都可能失效: 1 2 **重要:**请注意。 这是**「重要」**的内容。 前者的问题在 :,后者的问题在 「」 这种中文标点环境。 原文给出的几种解决办法 1. 直接改用 HTML 标签 这是最直接、也最稳的办法: ...

April 23, 2026 · 1 min · 143 words · Ray