首页 > 解决方案 > 如果 Markdown 是 HTML 的超集,那为什么它不能做 HTML 能做的所有事情呢?

问题描述

我试图了解 Markdown 与 HTML 的关系。如果我理解正确,两者都是标记语言(描述将格式化元素添加到纯文本文档的语言的总称)。Markdown将纯文本转换为 HTML。

我的理解是Markdown 是 HTML 的超集

Markdown 是一种流行的标记语言,是 HTML 的超集。

我假设它是一个严格或适当的 superset。当一种语言是另一种语言的平行超集时,这意味着什么?,我将其解释为每个有效的 HTML 程序也是有效的 Markdown 程序(例如,在 Jupyter Notebook Markdown 单元格中理解 HTML),但反之则不成立。

对我来说似乎很矛盾的是,如果 Markdown 是 HTML 的超集,那么为什么Markdown 不能做 HTML 可以做的所有事情(我认为情况正好相反,因为超集扩展了语言而不删除或更改任何现有功能。此外,我希望 HTML 成为 Markdown 的超集,因为HTML 更具表现力,并且更难被大多数人阅读

下图试图模仿“Objective-C is a superset of C more strict than C++”究竟是什么意思? 在此处输入图像描述

标签: htmljupyter-notebookmarkdown

解决方案


该文件具有误导性。Markdown本身不是 HTML 的超集。原始 Markdown 项目的文档非常清楚

Markdown 不是 HTML 的替代品,甚至不能接近它。它的语法非常小,只对应非常小的 HTML 标记子集。我们的想法不是创建一种更容易插入 HTML 标记的语法。在我看来,HTML 标签已经很容易插入了。Markdown 的想法是让阅读、编写和编辑散文变得容易。HTML 是一种发布格式;Markdown 是一种写作格式。因此,Markdown 的格式化语法只解决了可以用纯文本表达的问题。

今天有几种 Markdown 风格,其中许多都添加了原始版本中不存在的功能,例如表格和语法高亮代码块。这不会改变 Markdown 涵盖 HTML 子集的基本事实。

(从技术上讲,Markdown 也不是 HTML 的子集。*例如,在 HTML 中没有特殊含义。未转换的 Markdown 文档可能是格式良好的 HTML,但语义非常不同。但 Markdown 语法映射到 HTML 的子集标签。)

但是,原始文档中的下一段说:

对于 Markdown 语法未涵盖的任何标记,您只需使用 HTML 本身。无需为它加上前缀或定界以表明您正在从 Markdown 切换到 HTML;您只需使用标签。

由于您可以在 Markdown 中直接使用 HTML,因此可以将其视为 HTML 的超集。例如,这是有效的 Markdown:

# My awesome title

I <em>really</em> like coffee

如果你通过一个符合标准的 Markdown 处理器传递一个 HTML 文档,它的另一面应该是原封不动的。能够在 Markdown 中直接使用 HTML 与在 C++ 中直接使用 C 非常相似。这可能是 Jupyter 文档的意思。


推荐阅读