one1
1
紧跟在 div 标签行后面的文本无法正确渲染。在包含 div 的行后添加一个空行即可解决此问题。
<div>divved text</div>
[a link]( `/admin/email/templates`.) **italic**
divved text
[a link]( `/admin/email/templates`.) **italic**
截图:
其他 HTML 标签不会导致此问题:
<small>small text</small>
[a link]( `/admin/email/templates`.) **italic**
small text
a link italic
<span>spanned text</span>
[a link]( `/admin/email/templates`.) **italic**
spanned text
a link italic
我猜测,一旦检测到 HTML,后续行既会被吸入处理器,又不会随后被解析为 Markdown。你可以通过在 div 之后的行以及下一行的开头放置一些文本来测试这一点:
<div>divved text</div> end of div
beginning of markdown [a link]( `/admin/email/templates`.) **italic**
divved text
end of div
beginning of markdown [a link]( `/admin/email/templates`.) **italic**
截图:
它完全符合由 CommonMark 规范 § 4.6 — HTML 块 定义的、符合标准的行为。
关键规则是 HTML 块类型 6。CommonMark 规范明确将 div(以及 p、blockquote、table、h1–h6、ul、ol、li、hr 等)列为块级标签。当解析器遇到以这些标签之一开头的行时,它会打开一个 HTML 块,其结束条件如下:
结束条件:该行后紧跟一个空行。
你的其他示例是行内元素,其行为有所不同。
one1
3
谢谢!这正是我担心的。
为了让报告简洁,我忘记提到这个问题是在用户插入 <div data-theme-toc="true"> </div> 代码以添加目录时出现的。看来这似乎是该功能开发者的问题(如果有的话)。
好的,这很有趣。那么如果不使用目录(我是说其他 div),这个问题就完全不会出现吗?
one1
5
关键在于 <div data-theme-toc="true"> </div> 的精确位置。在这种情况下,它位于帖子的开头,文本从下一行开始。如果第一行不包含 Markdown 语法,我们甚至不会注意到这个问题。我不确定这是否说得通。
如果你在该代码后添加一个空行,一切都能正常工作。因此参见 https://meta.discourse.org/t/data-theme-toc-true-should-be-placed-at-the-top-of-a-post-in-its-own-paragraph/407863。