如何在Markdown中编写注释,即HTML输出中未呈现的文本?我在Markdown项目中没有发现任何东西。
我使用标准的HTML标记,例如
<!---
your comment goes here
and here
-->
注意三点划线。其优点是,在生成TeX或HTML输出时,它可以与pandoc一起工作。有关更多信息,请访问pandoc讨论组。
另一种方法是将注释放在样式化的HTML标记中。这样,您可以根据需要切换它们的可见性。例如,在CSS样式表中定义注释类。
.注释{display:none;}
然后,以下增强的MARKDOWN
我们不支持评论
在浏览器中显示如下
我们支持评论
披露:我写了这个插件。
由于问题没有指定特定的markdown实现,我想提到python markdown的Comments插件,它实现了上述相同的pandoc注释样式。
我相信,所有先前提出的解决方案(除了那些需要特定实现的解决方案)都会导致注释包含在输出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解析器,因为它是核心规范的一部分。(即使定义了多个链接时的行为,或定义了链接但从未使用时的行为也未严格指定)。
另请参见由越来越多的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.
如果您正在使用Jekyll或octopress,下面的操作也会起作用。
{% comment %}
These commments will not include inside the source.
{% endcomment %}
Liquid标记{%comment%}首先被解析,并在MarkDown处理器到达它之前被删除。访问者在尝试从浏览器查看源代码时将看不到。
这在GitHub上有效:
[](Comment text goes here)
生成的HTML如下所示:
<a href="Comment%20text%20goes%20here"></a>
这基本上是一个空链接。显然,您可以在渲染文本的源代码中阅读,但无论如何您都可以在GitHub上阅读。
这项小型研究证明并完善了马格努斯的答案
最独立于平台的语法是
(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)
将注释放在非eval、非echo R块中怎么样?即。,
```{r echo=FALSE, eval=FALSE}
All the comments!
```
对我来说似乎很好。
你可以试试
[](
Your comments go here however you cannot leave
// a blank line so fill blank lines with
//
Something
)
<!--- ... -->
不适用于PandocMarkdown(Pandoc1.12.2.1)。注释仍显示在html中。以下措施确实奏效:
Blank line
[^Comment]: Text that will not appear in html source
Blank line
然后使用+脚注扩展名。它本质上是一个从未被引用的脚注。
对于pandoc,一个阻止评论的好方法是使用yaml元块,正如pandoc作者所建议的那样。我注意到,至少在我的环境中(vim、vim-pandoc和vim-pandocsyntax),与许多其他建议的解决方案相比,这为注释提供了更恰当的语法高亮显示。
我将yaml块注释与html内联注释结合使用,因为html注释不能嵌套。不幸的是,在yaml元块中没有块注释的方法,所以每一行都必须单独注释。幸运的是,软包装的段落中应该只有一行。
在我的~/.vimrc中,我为块注释设置了自定义快捷方式:
nmap <Leader>b }o<Esc>O...<Esc>{ji#<Esc>O---<Esc>2<down>
nmap <Leader>v {jddx}kdd
我分别使用so、b和v注释和取消注释段落,作为我的<Leader>键。如果我需要注释多个段落,我将j,b映射到一个宏(通常为Q),然后运行<段落数><宏名>(例如(3Q)。这同样适用于取消注释。
Vim Instant Markdown用户需要使用
<!---
First comment line...
//
_NO_BLANK_LINES_ARE_ALLOWED_
//
_and_try_to_avoid_double_minuses_like_this_: --
//
last comment line.
-->
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引擎。
以下方法非常有效
<empty line>
[whatever comment text]::
该方法利用语法通过引用创建链接由于使用[1]创建了链接引用:http://example.org不会呈现,同样,以下任何内容也不会呈现
<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever
[whatever]: # whatever with spaces
使用mkdocs时,添加mkdocs.yml:
- pymdownx.striphtml:
strip_comments: true
strip_js_on_attributes: false
然后在任何markdown文件中使用普通的html注释,如
<!-- this is a comment -->
将从html输出中删除。
对于PandocMarkdown,我使用带有注释的反引号作为内联“代码”语法的语言
`here's a comment`{=comment}
这将在所有输出中自动过滤掉。它只是重载它们的代码语法,也适用于多行注释的代码块。我还没有尝试过,但我猜这对非潘多克·马克顿来说不起作用。
我编写了一个小awk程序来过滤添加到文本中的#omitbegine和#omitend标记。我使用awk将其输出通过管道传输到pandoc可以处理的临时文件。像这样:
awk-f省略过滤器.awk aim2_article.md>aim2_aArticle_tmp.md
pandoc--pdf engine=xelatex--lua filter=pagebreak.lua--filter pandoc crossref--citeproc aim2_article_tmp.md-o aim2_aarticle.pdf
这里是省略筛选器.awk:
/#omitbegin/ {
insideOmit = 1;
}
! insideOmit {
print $0
}
/#omitend/ {
insideOmit = 0;
}
此Markdown注释不会在带有Jekyll的GitHub Pages网站上呈现
[whatever]: text
因为Jekyll使用Liquid模板语言来处理模板,所以这个Liquid注释也不会在使用Jekyll的GitHubPages网站上呈现
{% comment %}
This is a long comment string
Newline
Stuff
{% endcomment %}
如果它在VS代码中,那么还有另一个好选项:
<span hidden> Some texts </span>
与“HTML注释标记”相比,它具有在编辑区域保持语法高亮显示的优势,以及为语义标记添加属性的能力,如<span notice hidden>。
警告:根据常识,不要在源代码中包含个人信息。
Pandoc有一个选项--删除注释,删除所有<!--html输出中的普通html注释-->。
https://pandoc.org/MANUAL.html#general-写入程序选项
推荐文章
- 使用pandoc从Markdown转换为PDF时设置空白大小
- 如何显示数学方程在一般github的markdown(不是github的博客)
- JavaScript错误(Uncaught SyntaxError:意外的输入结束)
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 使用Markdown的Sphinx而不是reST
- Shell脚本for循环语法
- 降价和图像对齐
- 这在PHP中意味着什么:->或=>
- C或c++中的单引号与双引号
- TypeScript注释的语法记录在哪里?
- “+new Date”中加号的作用是什么
- CSV文件可以有注释吗?
- 在Python中%的结果是什么?
- 如何样式一个JSON块在Github维基?
- 标记“本机”文本对齐方式