如果Markdown是HTML的超集,那为什么它不能做HTML所能做到的一切?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果Markdown是HTML的超集,那为什么它不能做HTML所能做到的一切?相关的知识,希望对你有一定的参考价值。

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

我的理解是Markdown is a superset of HTML

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

我假设这是一个strict or proper superset。从What does it mean when one language is a parallel superset of another?中得到一个平行线,我将其解释为每个有效的HTML程序也是一个有效的Markdown程序(例如,在Jupyter Notebook Markdown单元中可以理解HTML),但反之则不然。

对我来说似乎有些矛盾的是,如果Markdown是HTML的超集,那么为什么Markdown can't do everything HTML can(我认为从一个超集extends the language without removing or changing any of the existing features开始就是相反的。另外,我希望HTML自从HTML is more expressive and more difficult to read by most humans成为Markdown的超集。

下面是试图模仿What does “Objective-C is a superset of C more strictly than C++” mean exactly? enter image description here中的图表

答案

该文件具有误导性。 Markdown本身不是HTML的超集。原始Markdown项目is pretty clear的文档:

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文档的意思。

以上是关于如果Markdown是HTML的超集,那为什么它不能做HTML所能做到的一切?的主要内容,如果未能解决你的问题,请参考以下文章

什么是超集?

什么是超集?

Markdown语法入门

如何将 github 风格的 Markdown 转换为 HTML?

python--集合增删改 交集 差集 并集 反交集 子集和超集

齐柏林飞艇超越超集