如何在Markdown中编写注释,即HTML输出中未呈现的文本?我在Markdown项目中没有发现任何东西。


当前回答

kramdown基于Ruby的markdown引擎,这是Jekyll的默认引擎,因此GitHubPages通过其扩展语法内置了注释支持:

{::comment}
This text is completely ignored by kramdown - a comment in the text.
{:/comment}

Do you see {::comment}this text{:/comment}?
{::comment}some other comment{:/}

这样做的好处是允许在线评论,但缺点是不能移植到其他Markdown引擎。

其他回答

我相信,所有先前提出的解决方案(除了那些需要特定实现的解决方案)都会导致注释包含在输出HTML中,即使它们没有显示出来。

如果你想要一个完全属于你自己的评论(转换文档的读者应该看不到它,即使使用“查看源代码”),你可以(ab)使用核心Markdown规范中提供的链接标签(用于参考样式链接):

http://daringfireball.net/projects/markdown/syntax#link

即:

[comment]: <> (This is a comment, it will not be included)
[comment]: <> (in  the output file unless you use it in)
[comment]: <> (a reference style link.)

或者您可以进一步:

[//]: <> (This is also a comment.)

为了提高平台兼容性(并节省一次按键),也可以使用#(这是合法的超链接目标)而不是<>:

[//]: # (This may be the most platform independent comment)

为了实现最大的可移植性,在这种类型的注释前后插入一个空行是很重要的,因为某些Markdown解析器在定义碰到常规文本时无法正常工作。Babelmark的最新研究表明,前后空白行都很重要。如果前面没有空行,一些解析器将输出注释,如果后面没有空行则一些解析器将排除以下行。

通常,这种方法应该适用于大多数Markdown解析器,因为它是核心规范的一部分。(即使定义了多个链接时的行为,或定义了链接但从未使用时的行为也未严格指定)。

以下方法非常有效

<empty line>
[whatever comment text]::

该方法利用语法通过引用创建链接由于使用[1]创建了链接引用:http://example.org不会呈现,同样,以下任何内容也不会呈现

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever
[whatever]: # whatever with spaces

这项小型研究证明并完善了马格努斯的答案

最独立于平台的语法是

(empty line)
[comment]: # (This actually is the most platform independent comment)

这两个条件都很重要:

使用#(而不是<>)注释前有空行。注释后的空行对结果没有影响。

严格的Markdown规范CommonMark仅适用于此语法(而不适用于<>和/或空行)

为了证明这一点,我们将使用Alexandre Mutel的Babelmark I。该工具检查大量Markdown实现上特定源代码的呈现。

(+-通过了测试,--没有通过,?-留下一些垃圾,这些垃圾在呈现的HTML中没有显示)。

无空行,使用<>13+15-注释前空行,使用<>20+,8-注释周围的空行,使用<>20+,8-没有空行,使用#13+1?14-注释前空行,使用#23+1?4-注释周围的空行,使用#23+1?4-带有3个连字符1+2的HTML注释?25-来自chl的答案(注意这是不同的语法)

这证明了上述陈述。

这些实现未通过所有7项测试。没有机会对它们使用excluded on render注释。

cebe/markdown 1.1.0cebe/markdown markdown额外1.1.0cebe/markdown GFM 1.1.0s9e\TextFormatter(Fatdown/PHP)

披露:我写了这个插件。

由于问题没有指定特定的markdown实现,我想提到python markdown的Comments插件,它实现了上述相同的pandoc注释样式。

kramdown基于Ruby的markdown引擎,这是Jekyll的默认引擎,因此GitHubPages通过其扩展语法内置了注释支持:

{::comment}
This text is completely ignored by kramdown - a comment in the text.
{:/comment}

Do you see {::comment}this text{:/comment}?
{::comment}some other comment{:/}

这样做的好处是允许在线评论,但缺点是不能移植到其他Markdown引擎。