如果 Markdown 是 HTML 的超集,那为什么它不能做 HTML 能做的所有事情呢?

Ira*_*mbi 2 html markdown jupyter-notebook

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

我的理解是Markdown 是 HTML 的超集

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

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

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

下图试图模仿“Objective-C 是比 C++ 更严格的 C 超集”究竟是什么意思? 在此处输入图片说明

Chr*_*ris 5

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

Markdown 不是 HTML 的替代品,甚至不是 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
Run Code Online (Sandbox Code Playgroud)

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

  • @Iracambi,这实际上取决于“Markdown”是否指的是它自己的语法(“#”表示标题,“*”和“-”表示无序列表,“1.”表示有序列表,“*”和“_”表示强调,“**”和“__”表示强等),或者如果您包含“仅使用 HTML 本身”部分。在第一种情况下,Markdown 映射到 HTML 的_子集_。在第二种情况下,Markdown 在语法上可以被视为 HTML 的超集,但由于它没有添加任何额外的语义,因此可以被视为相等的集合。就我个人而言,我会说“Markdown 映射到 HTML 的子集”。它没有添加任何语义,也不能添加任何 HTML 可以添加的内容。 (2认同)