Markdown中的评论


1398

在markdown文件中存储注释的语法是什么,例如,文件顶部的CVS $ Id $注释?我在减价项目上一无所获。


10
在两行之间阅读时,您似乎想将元数据附加到Markdown上。出于这个原因,我建议您使用可以添加标头的预处理器。有关示例,请参阅Jekyll的《前沿问题》。再举一个例子,请参见Basho如何使用Middleman作为他们的文档。(注意:这不是问题的直接答案,这就是为什么我将其分享为评论。)
David J.

2
另请参见MultiMarkdown如何支持元数据
David J.

这是Babelmark上具有不同解析器的不同注释类型的基准。
Ulysse BN

Answers:


1451

我认为,所有先前提出的解决方案(除了那些需要特定实现的解决方案)都会导致注释被包含在输出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解析器,因为它是核心规范的一部分。(即使严格定义了多个链接时的行为,或者定义了一个链接但从未使用过的行为)。


145
[//]: # "Comment"并且[//]: # (Comment)似乎工作在更广泛的实施方式中,因为#是一个有效的相对URI。例如,GitHub拒绝<>,整行可见。还值得注意的是,链接标签通常需要用空白行与其他内容分开。
Zenexer 2014年

6
要实现与平台的最独立性,还需要在注释之前添加一个空行。查看测试:stackoverflow.com/a/32190021/2790048
Nick Volynkin

6
可以用于多行注释吗?
crypdick

4
@RovingRichard是的,至少在Pandoc中,如果注释的块中没有空行(单行换行是可以的),则适用于多行注释。我将Magnus的方法用于块注释,将chl的HTML方法用于内联注释(尽管通常只有2个破折号)。这样,我可以将已经包含嵌入式HTML注释的段落屏蔽掉。
joelostblom

4
仅供参考,但是如果您使用Pandoc创建目录,这将生成有关重复链接引用的警告。(这些只是警告,仍将创建TOC。)
Karl Giesing

995

我使用标准的HTML标签,例如

<!---
your comment goes here
and here
-->

注意三横线。优点是在生成TeX或HTML输出时,它可与pandoc一起使用。有关详细信息,请访问pandoc-discuss组。


73
如果我理解正确,则三重破折号会使pandoc在解析markdown文件时忽略该注释。但是,如果您使用其他markdown引擎,则注释将显示在生成的HTML中(因此在“查看源代码”中可见)。因此,您必须注意发表评论的内容;)
cberzan 2012年

5
您能解释一下Pandoc如何将双破折号与双破折号区别对待吗?当我尝试使用它们时,它们似乎以相同的方式处理。另外,《 Pandoc用户指南》只说“原始HTML会以不变的格式通过HTML,S5,Slidy,Slideous,DZSlides,EPUB,Markdown和Textile输出,并以其他格式隐藏。” 三连字符似乎没有比双连字符更高的特权。
dkim

1
@dkim带三点破折号的注释将被忽略,并从HTML输出中丢弃。插入HTML文件中的双点划线注释不是这种情况。最新版本的Pandoc(1.10)仍然是这种情况。
chl 2012年

32
如果三重破折号有意义,则这些不是“标准HTML”注释。
Tripleee

17
Google员工注意:不幸的是,这在GitHub Markdown中不起作用,我最终使用了Magnus的解决方案。
Daniel Buckmaster 2014年

197

这项小型研究证明并完善 了Magnus的答案

最不依赖平台的语法是

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

这两个条件都很重要:

  1. 使用#(而不是<>
  2. 在评论前用空行。注释后的空白行对结果没有影响。

严格的Markdown规范CommonMark仅在使用此语法时才有效(而不是<>和/或空行)

为了证明这一点,我们将使用John MacFarlane编写的Babelmark2。该工具检查28种Markdown实现中特定源代码的呈现。

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

这证明了以上陈述。

这些实现未通过所有7个测试。没有机会与它们一起使用排除渲染的注释。

  • cebe / markdown 1.1.0
  • cebe / markdown MarkdownExtra 1.1.0
  • cebe / markdown GFM 1.1.0
  • s9e \ TextFormatter(Fatdown / PHP)

3
优秀,全面的测试工具!它看起来像你说得对,# 为所有,但GFM作品<> 作品GFM但不是一对夫妇他人。糟糕的GFM既是特殊情况,也是非常受欢迎的味道。
滚刀

1
看起来s9e \ TextFormatter可以从# 2016年1月21日开始使用。Cebe仍然不处理它。
Troy Daniels

1
奇怪的是,如果注释(...)本身包含它,则会将其破坏。至少在Visual Studio Code 1.19上。
罗伊

1
因此对于想要立即注释所有文件的vim用户:%s/^\(.*\)$/[comment]: # (\1)/g
Simon C.

对于Bablemark2存在的降价,它怎么说?
TC Proctor

53

如果您使用的是Jekyll或octopress,则也可以使用以下方法。

{% comment %} 
    These commments will not include inside the source.
{% endcomment %}

首先对Liquid标签{% comment %}进行解析,然后在MarkDown处理器到达之前将其删除。访问者尝试从浏览器查看源时将看不到。


2
Jinja2 = {#多行评论#}
约翰·米

29

一种替代方法是将注释放入样式化的HTML标签中。这样,您可以根据需要切换其可见性。例如,在CSS样式表中定义注释类。

.comment { display: none; }

然后,以下增强了MARKDOWN

We do <span class="comment">NOT</span> support comments

在浏览器中显示如下

We do support comments


5
复制/粘贴可能会最终复制“注释”文本以及常规文本,因此在使用时要小心。如果有人复制一段文本,它很容易产生意外的结果。
艾隆2014年

4
@Eilon对此的可访问性也很糟糕
Ethan

可访问性支持引擎将正确跳过显示:无文本。
阿雷德里德尔

28

这适用于GitHub:

[](Comment text goes here)

生成的HTML看起来像:

<a href="Comment%20text%20goes%20here"></a>

这基本上是一个空链接。显然,您可以在渲染文本的源代码中阅读它,但是无论如何都可以在GitHub上进行阅读。


6
绝对是,但是实际上这是迄今为止始终可以在GitHub上运行的唯一答案,例如在列表中。
jomo 2015年

我得出了相同的解决方案。这是我可以进行在线注释的唯一方法,例如some text [](hidden text) blah blah
c24w

3
自2019[](Comment text goes here)
dogmatic69

19

Vim Instant-Markdown用户需要使用

<!---
First comment line...
//
_NO_BLANK_LINES_ARE_ALLOWED_
//
_and_try_to_avoid_double_minuses_like_this_: --
//
last comment line.
-->

18

另请参阅由越来越多的Markdown工具支持的Critic Markup。

http://criticmarkup.com/

Comment {>> <<}

Lorem ipsum dolor sit amet.{>>This is a comment<<}

Highlight+Comment {== ==}{>> <<}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. {==Vestibulum at orci magna. Phasellus augue justo, sodales eu pulvinar ac, vulputate eget nulla.==}{>>confusing<<} Mauris massa sem, tempor sed cursus et, semper tincidunt lacus.

5
我认为此类“伪”标准的问题之一是它们不可移植。在某些网站上,这些网站可以完美运行,而在其他网站上则无法。
Willem Van Onsem 2014年

14

如何将注释放在非评估,非回应R块中?即

```{r echo=FALSE, eval=FALSE}
All the comments!
```

似乎对我来说很好。


2
另外,您也可以cat("# Some Header")在“ commented-out”代码块中进行某些操作并使用results = "asis",并且您可以在代码中添加整个注释掉的部分,这些部分可以通过切换来打开/关闭eval = FALSE,因为R评估是在pandoc编译。谢谢你的主意!
MichaelChirico


11
<!--- ... --> 

在Pandoc Markdown(Pandoc 1.12.2.1)中不起作用。注释仍出现在html中。以下工作:

Blank line
[^Comment]:  Text that will not appear in html source
Blank line

然后使用+脚注扩展名。从本质上讲,这是一个永远不会被引用的脚注。


我最喜欢它,因为它根本不产生任何输出。对于Bitbucket而言,此前缀就足够了:[#]:

7

以下效果很好

<empty line>
[whatever comment text]::

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

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever

这个(经过测试的第一个变体)适用于GitlabGitHub的pandoc当前在线实例。
doak

5

对于pandoc,阻止注释的一种好方法是使用yaml metablock如pandoc作者所建议。我注意到,这使评论的更适当的语法高亮相对于很多其他提出的解决方案,至少在我的环境(vimvim-pandoc,和vim-pandoc-syntax)。

我将yaml块注释与html-inline注释结合使用,因为html-comments不能嵌套。不幸的是,在yaml metablock中没有块注释的方法,因此每一行都必须单独注释。幸运的是,在软包装的段落中应该只有一行。

在我的中~/.vimrc,我为块注释设置了自定义快捷方式:

nmap <Leader>b }o<Esc>O...<Esc>{ji#<Esc>O---<Esc>2<down>
nmap <Leader>v {jddx}kdd

我用,我的<Leader>-键,所以,b,v分别评论并取消一个段落。如果我需要注释多个段落,我会映射j,b到一个宏(通常是Q)并运行<number-of-paragraphs><name-of-macro>(例如(3Q)。


5

kramdown —一种基于Ruby的markdown引擎,是Jekyll以及GitHub Pages的默认引擎—通过其扩展语法内置了注释支持

{::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引擎中。


4

你可以试试

[](
Your comments go here however you cannot leave
// a blank line so fill blank lines with
//
Something
)

4

您可以执行以下操作(YAML块):

~~~
# This is a
# multiline
# comment
...

我仅尝试使用乳胶输出,请为其他人确认。


它也适用于HTML输出。
petzi

我不确定Daniel对html输出的确认是否正确。我使用html输出文件来执行此操作,并运行了“ pandoc --bibliography paper.bib -o paper.html paper.md”,HTML显示了注释行。
markgalassi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.