使用 Markdown 注意事项
分为语法和工具两个部分,备忘录。
语法
写在前面
在使用 JotterPad(CommonMark)阅读 markdown 格式的文本时,发现的细节:
标题
#
后需要有空格,才能解析成标题,不然就是文本;【重要】- 进一步修正:任意级别的标题行前后添加空行,至少标题行之前要有空行,
#
之后添加空格;
- 进一步修正:任意级别的标题行前后添加空行,至少标题行之前要有空行,
使用参考式链接时,链接网址只能放在文件最末尾,不然识别不出来;【重要】
引用内使用编号问题:
引用文字
- item1
- item
编号结束,结尾的引用文字
怎么写代码块?——是解析的,只不过呈现方式只体现在字体上,排版效果并不明显。
尽量不要嵌套使用。在 GitHub 上项目的 README.md 都不复杂。占一屏幕,不需要滚屏。建议很值得采纳,但实在是不实用。可以做图片链接的哦,惊喜
嵌套时无需有空行(分段需求除外,比如引用时),当两个模块是平行关系时需要有空行(列表除外,列表项之间添加空行会引入 <p>)。参考 1.1 节中英文混合排版加不加空格问题,持保留态度,无论加或者不加,都保持原状。
- 强调语义,不加;强调呈现,添加。
- 书写笔记不考虑纯手工补充空格,为了表现效果美观吹毛求疵,时间成本太高,没有意义。【重要】
扩展阅读:
测试 item
块元素
模块之间的嵌套使用,怎么书写是规范的一直是一件比较困惑的事情。但在我写下这篇文字的时候,我已经感觉到胜利在朝我招手了。
首先一定要有意识区分“块元素(Block Element)”和“Span Element”,对于熟悉 html 的程序员来说可能是很 easy 的一件事情,但是虽然我用 Markdown 两三个月,相关的操作手册、语法说明也看了很多,但我是自动过滤这两个单词的,讲解标题(用不同数目的 # 区分标题级别)和强调(用 * 斜体,** 加粗)时肯定是分别放在 Block Element 和 Span Element 中介绍,但我脑子里是没有这两个概念的,我并未意识到它们意味着什么,甚至并未意识到它们的存在。我真的是个前端白痴,原谅我。
块元素(Block Element)包括:
- 标题
- 引用
- 列表,注意是整个列表,而不是列表的 item
- 代码块
- 分割线
Span Element 包括:
- 链接
- 强调
- 代码
- 图片
块元素是涉及嵌套的主体!Span Element 不是。所以嵌套问题是块元素的嵌套问题,额,如果我了解 html 多好。
结论(针对 GFM)
秘籍:(在严格坚持第一点的基础上,除却以下情况不会用到第二点:如果问题出现在章节末尾(见本文末尾)、列表末尾,使用第二点)
每个独立的块元素(包括分段)之后留有空行,标题、分割线可以除外;
哪个块元素解析有问题,就在哪个块元素之前加空行;
- 为了保证一致性(特殊情形,即当前嵌套情形(列表主体除末尾空行无其他空行,且在末尾嵌套有子列表)),要求嵌套子列表时,子模块前添加空行(即本行之前的空行,否则解释时不完美);
综合上述两点,在每个块元素(包括分段)的前后添加空行可以保证所有情形下解释正确。唯一的不足在于阅读源文本时可能稍显松散。
其实,在每个块元素(包括分段、标题、分割线)之前留有空行是不是就万事大吉了呢?【重要】
详细描述:
分段用空行,这句是废话;
标题之前加空行,保证所有情况下语法正常解释;【重要】
- 如果前置标题、分割线或者普通段落,则没有空行语法也能正常解释;
- 如果前置列表、引用等,没有空行,语法解释后呈现有问题;
空行意味着引用、列表的结束;标题、分割线是单行的;GFM 中代码块是 ``` 结束的。多个空行合并成一个。
- 分段时,空行意味着段落的结束;
- 非分段情况下,段落之后不用跟空行。接标题、引用、
列表、代码块都意味着段落结束。 - 非分段情况下,段落之后无空行直接跟有序列表,是有问题的;直接跟无序列表没问题;
- 综合上述三条,建议每个独立的块元素之后留有空行,标题、分割线除外【重要】
列表内容拥有缩进概念;
- 列表 item 中缩进内容(针对引用、代码块)前(或者后)加空行;否则语法无法正常解释
- 缩进内容为列表(即嵌套子列表)时,按照规则建议添加空行。即使无空行,语法也能正常解释,看着还顺眼一点
- 综合上述两条,建议在嵌套子模块的结尾留有空行【重要】
补充说明:
列表的 item 之间一般不需要空行(分段除外),如果
如果列表项之间有空行,markdown会给每一个生成的li元素创建一个p:
工具
前两年一直使用的 MarkdownPad2,后来随着系统更新(而软件并未跟进)出现了几项功能性问题,虽然也能通过某些手段结局,但无疑是影响体验的。
在此基础上,由于对 Visual Studio Code 好奇心(喜新厌旧嘛),放弃了使用 MarkdownPad2,但回头再看(2020/12/25 17:38:28 )前者也只那些 vimer 的狂欢,经过各种调教之后可能好用,但调教本身也是成本。
快捷键支持并不完全。还是算了。来源
深有感触,不胜其烦。所以又回归了 MarkdownPad2