Markdown中的评论

时间:2011-01-28 00:18:12

标签: syntax comments markdown

将评论存储在降价文件中的语法是什么,例如文件顶部的CVS $ Id $评论?我在markdown project上找不到任何内容。

21 个答案:

答案 0 :(得分:1214)

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

答案 1 :(得分:886)

我使用标准HTML标记,例如

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

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

答案 2 :(得分:160)

这项小型研究证明并完善了the answer by Magnus

与平台无关的语法最为

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

这两个条件都很重要:

  1. 使用#(而不是<>
  2. 在评论前添加空行。评论后的空行对结果没有影响。
  3. 严格的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 :(得分:50)

如果您正在使用Jekyll或octopress,也可以使用。

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

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

答案 4 :(得分:33)

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

.comment { display: none; }

然后,以下增强的MARKDOWN

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

在BROWSER中显示如下

We do support comments

答案 5 :(得分:30)

这适用于GitHub:

[](Comment text goes here)

生成的HTML如下所示:

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

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

答案 6 :(得分:17)

另见Critic Markup,由越来越多的Markdown工具提供支持。

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.

答案 7 :(得分:15)

Vim Instant-Markdown用户需要使用

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

答案 8 :(得分:13)

如何将注释放在非eval,非echo R块中?即,

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

似乎对我有用。

答案 9 :(得分:11)

披露:我写了插件。

由于问题未指定特定的降价实现,我想提及Comments Pluginpython-markdown,它实现了与上述相同的pandoc评论风格。

答案 10 :(得分:9)

<!--- ... --> 

在Pandoc Markdown(Pandoc 1.12.2.1)中不起作用。评论仍然出现在HTML中。以下工作:

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

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

答案 11 :(得分:5)

对于pandoc,阻止评论的一种好方法是使用yaml metablock as suggested by the pandoc author。我注意到,与许多其他提议的解决方案相比,这给出了更合适的语法突出显示,至少在我的环境中vimvim-pandocvim-pandoc-syntax)。

html-comments cannot be nested起,我将yaml块注释与html-inline注释结合使用。不幸的是,有no way of block commenting within the 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)。同样适用于取消注释。< / p>

答案 12 :(得分:5)

kramdown - 基于Ruby的降价引擎,是Jekyll的默认值,因此是GitHub页面 - has built-in comment support through its extension syntax

{::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引擎的缺点。

答案 13 :(得分:5)

以下内容效果很好

<empty line>
[whatever comment text]::

该方法利用了syntax to create links via reference
由于将不会呈现使用[1]: http://example.org创建的链接引用,因此同样不会呈现以下任何内容

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

答案 14 :(得分:4)

你可以尝试

SELECT spb.SPB_code
,spb.NAME
,spp.City
,spp.County
,spb.ADD1
,SUM(num.Amount_1) AS sum_amount_1
FROM SPB spb
INNER JOIN VW vw
    ON spb.SPB_Code = vw.SPB_Code
INNER JOIN Num nm
    ON vw.vw_Code = nm.vw_CodeCODE
INNER JOIN SPP spp
on spb.SPB_Code = spp.SPP_Code
WHERE nm.period BETWEEN '201501' AND '201503'
GROUP BY spb.SPB_code
    ,spb.NAME
    ,spp.City
    ,spp.County
    ,spb.ADD1;

答案 15 :(得分:1)

使用 mkdocs 时,添加您的 mkdocs.yml

  - pymdownx.striphtml:
      strip_comments: true
      strip_js_on_attributes: false

然后在任何 Markdown 文件中使用普通的 html 注释,如

<!-- this is a comment -->

将从 html 输出中删除。

答案 16 :(得分:1)

我编写了一个小 awk 程序来过滤掉我添加到文本中的 #omitbegin 和 #omitend 标记之间。我使用 awk 将其输出通过管道传输到 pandoc 可以处理的临时文件。像这样:

awk -f omitfilter.awk aim2_article.md >aim2_article_tmp.md

pandoc --pdf-engine=xelatex --lua-filter=pagebreak.lua --filter pandoc-crossref --citeproc aim2_article_tmp.md -o aim2_article.pdf

这是omit filter.awk

/#omitbegin/ {
    insideOmit = 1;
}

! insideOmit {
    print $0
}

/#omitend/ {
    insideOmit = 0;
}

答案 17 :(得分:0)

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

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

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

答案 18 :(得分:0)

Github README.md或Stackoverflow答案

对于Github自述文件或Stackoverflow答案,我使用进行内联注释。

示例:


# clone the remote repository to your local machine

npm clone https://github.com/chebaby/echebaby.git

# change directory

cd echebaby

# install dependencies

yarn install

答案 19 :(得分:0)

对于 Pandoc Markdown,我使用带有 comment 的反引号作为类似内联“代码”语法的语言

`here's a comment`{=comment}

这会在所有输出中自动过滤掉。它只是重载了他们的代码语法,也适用于多行注释的代码块。我没试过,但我猜这对非 Pandoc Markdown 不起作用。

答案 20 :(得分:0)

此 Markdown 评论不会在带有 Jekyll 的 GitHub Pages 站点上呈现

import re
import sys

if len(sys.argv) > 1:
    val = sys.argv[1]

if re.search("^(abc|def)[0-9]+$", val.strip()) == None: 
    # do something here to inform the PHP code True or False