【问题标题】:If Markdown is a superset of HTML, then why can't it do everything HTML can?如果 Markdown 是 HTML 的超集,那为什么它不能做 HTML 能做的一切呢?
【发布时间】:2019-04-07 03:43:32
【问题描述】:

我试图了解 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?中模仿的图表

【问题讨论】:

    标签: html jupyter-notebook markdown


    【解决方案1】:

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

    Markdown 不是 HTML 的替代品,甚至更接近它。它的语法非常小,只对应非常小的 HTML 标记子集。这个想法是 not 创建一种更容易插入 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 文档的意思。

    【讨论】:

    • 谢谢克里斯。所以,如果我理解正确的话,HTML 并不是 Markdown 的严格子集,我可以认为 Markdown 是 HTML 标签的一个非常小的子集的超集。
    • @Iracambi,这真的取决于“Markdown”是否意味着它自己的语法(# 用于标题,*- 用于无序列表,1. 用于有序列表,@ 987654328@ 和 _ 表示强调,**__ 表示强等)或者如果您包含“仅使用 HTML 本身”部分。在第一种情况下,Markdown 映射到 HTML 的 子集。在第二种情况下,Markdown 在语法上可以被认为是 HTML 的超集,但由于它没有添加任何额外的语义,因此可以被认为是一个相等的集合。就个人而言,我会说“Markdown 映射到 HTML 的子集”。它没有添加任何语义,也不能添加 HTML 可以添加的所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2016-04-27
    • 2011-04-29
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多