游戏文化浓度也许很高的微型博客,还有审查观察和浅显的科普杂谈。每日 7:30 准时更新。明明很向往自由,却有着严格约束,和奇怪规则的频道。

由 gledos 创作的内容,如果没有另外声明,均为 CC-BY 4.0 许可协议。

gledos 无法保证内容正确,但会一直尝试追逐正确。

管理员: @gledos_green
淡色的 Markdown 块引用

Markdown 中有一个块引用的语法标记,以尖括号开头。可能会有用户将块引用当作整句强调、缩进或者备注等使用,但这是误解了块引用的作用。

块引用大致起源于 Usenet(新闻组),用法也同步到了电子邮件,现在回复纯文本的电子邮件时,默认会执行「底部引用」,也是源自当时的习惯。

所以狭义上,Markdown 的块引用,仅应在回复他人时使用,这也是淡色的显示效果原因。这个引用只是提示,而不是重点。然后 Markdown 的块引用会生成 HTML <blockquote> 标签,这是一个语义标签。为了无障碍等语义合理,也应遵守上面提到的用法。

相关考据可以查看〈GWLM 15 纯文本〉。

封面图来自 Cataclysm-DDA 的 issues 68100,是交错式的块回复,如果用词不够柔和,那么就算是「逐点反驳」样式……

#markdown #历史
星号包裹文字的起源

Markdown 中,被星号包裹的文字会生成斜体(表示强调),这种用法能追溯到 Usenet、IRC 和早期电子邮件,Setext 这个标记语言在 1992 年使用星号包裹的文字表示粗体(强调)。

但是尚不明确到底是 Setext 影响了带有符号的纯文本,还是带有符号的纯文本影响了 Setext。现在寻找关于 Setext 历史的文章,几乎都是 Markdown 的历史里提到 Setext……

好在有擅长研究语言的博客,找到了过去老漫画常使用爆炸符号,而用法跟 ZUN 语很相似,都是一种第三人称的表演性质,就像是:

> 虽然我这么说,但怎么听都是一如既往的曲子(笑)

图片1:带有符号的纯文本
图片2:《花生》(漫画)的爆炸符号

#markdown #历史

---

非常感谢为也行(@weiyexing)频道 提及,互联网太酷了 ❤️
Markdown 的其他细节

许多 Markdown 生成器都有 TOC(大纲)功能,将文章的标题提取出来,做成一个带有 HTML 元素 id 的链接清单,点击后就会跳转到对应标题的位置。

由于 CommonMark 没有规定过 TOC 功能,自然各种 Markdown 生成器对此有不同的策略,有的直接照搬,将标题内容转化为 HTML 元素 id,有的将大写字母转为了小写,还有的仅保留 ASCII,并将空格替换为短横线,总之这个 TOC 功能,在各个 Markdown 生成器里各不相同,要实现「一次编写,到处运行」,还有很远的路。

---

GitHub 默认不把 Markdown 记入统计,所以你的文本仓库,很可能被 CSS, yaml 等文件抢了风头。所以要成为真正的 Markdown 工程师,应该在仓库里添加一个文件 .gitattributes,内容为:

.md linguist-detectable=true
.md linguist-documentation=false

这样就会像标题图,Alexandre Sanlim 的 GitHub 主页一样,出现 Markdown 编写的仓库了。

#Markdown
写作主要使用到的软件或工具

因为喜欢 Markdown 写作,所以只要有 Visual Studio Code 就足够了,选择 VSCode 的主要原因还是性能很不错,Shift + Alt + F 快捷键还可以将表格标记格式化,以及方便的多行编辑,还有 Alt + Z 快捷键切换换行模式(自动换行开启或关闭)。

Obsidian 对于我来说就不够方便,通常只会使用插入模板的功能,其他的功能我基本没有使用。

Zotero 被我当作剪报工具,其浏览器插件含有 SingleFile 功能,可以将一个网页保存为单页的 HTML 文件,方便储存,并且 Zotero 本身是文献管理工具,所以我还使用了自定义的引用模板 (Citation Style Language) 文件,让引用以 Markdown 标记呈现一种类似于维基的风格,就像下面这样:

[^1]: 《[网易盘点年度事件视频催人泪下 发布不久即被删除](https://www.zaobao.com.sg/realtime/china/story20221230-1348416)》, 早报, 2022-12-30. (参照 2022-12-30).


最后是在 Telegram 发布含有 Markdown 标记的内容,所以会使用 Markdown Bot

#工具 #经验
Markdown in HTML

原始 Markdown 语法规范有比较严格的约束,禁止了 HTML 标签内使用 Markdown,不过 CommonMark 对此有些改进,如果在块级元素比如 <div> 标签之后,完整的空一行,就能启用在 HTML 中使用 Markdown 标记的功能,效果如图所示。

但是即使不这么做,部分解析器还是会允许部分 HTML 标签中的 Markdown 标记,比如斜体、加粗,不过为了兼容性,还是使用 CommonMark 的规范比较好。

方法 2: 部分 Markdown 解析器使用块级元素的属性来定义,比如 <div> 就使用 <div markdown="1"> 来启用,pandoc, DFM, kramdown, multimarkdown, gambas, maruku, python-markdown(需要启用 md_in_html 扩展)均支持。

方法 3: 这个方法只能适用于想给一个小部分的内容,添加一个 class 或者 id,来适配单独的 css,就是使用 Attribute List 功能,不过目前大概只有 kramdown 和 python-markdown(需要启用 attr_list 扩展)支持。

#markdown
Markdown 音标的语法标记

<ruby> 是 HTML 的标签,可以用来制作文字音标,不过也不止于此,还可以用来制作「写作OO,读作XX」这样有趣的文字。

不过很明显,这种写法并不在欧美流行,自然大部分社交网站都不支持这种写法,从而使支持音标的网站一直很少见。标记语言也主要考虑的是字母语言,对 CJK 文字以及其排版都没有太关注,自然不会有关于音标的语法标记。

不过还是有许多需要音标的 Markdown 用户,开发了音标功能,但因缺少共识,所以语法标记差异非常大。

底部图片 是总览表格,详情可以查看我的博客《与众不同的 Markdown》〈音标的语法标记〉

#网站 #Markdown #gledos_science
Markdown 的扩展语法与 Admonitions

之前提到了 CommonMark 这个 Markdown 的规范指导,但 CommonMark 仅包含原始的 Markdown 语法,脚注和表格这样常见基本的扩展语法,均没有在里面提到。不过好在脚注和表格出现的早,所以在各种 Markdown 解析器中基本没有差异,但在 Markdown 解析器越来越多的现在,想要创建一个广泛被其他解析器接受的扩展语法,就很难了。

虽然没有规范指导,但有一定共识的语法列表是存在的,Markdown Guide 编写了《Extended Syntax》这篇指南,将最流行的 Markdown 扩展语法记录了下来。

AsciiDoc 的 Admonitions(告诫)是创建一个高亮的框体,这个功能也被一些 Markdown 解析器添加为扩展语法,但每个的实现都不相同,就像封面图里面的这些语法一样。

详细信息可以查看我的博客内容,我也把之前写在微型博客上的 Markdown 内容移植到了博客:

https://gledos.science/specially-markdown.html

#Markdown #gledos_science
与众不同的 Markdown

标记语言有许多种,最常用的是超文本标记语言 (HTML),被几乎所有的网站使用,所以进入网络时代后,新诞生的标记语言或多或少都受到 HTML 的影响,比如 HTML 的标题有六级标题,分别是 H1 到 H6,所以大多标记语言也只有六级标题。

同理,带有文字的外部链接语法也是大同小异:

+ HTML: <a href=链接>文字</a>
+ AsciiDoc: 链接[文字]
+ BBCode: [url=链接]文字[/url]
+ Org Mode:[[链接][文字]]
+ Wikitext: [链接 文字]
+ Markdown: [文字](链接)

可以看出,大部分的标记语言都是链接在前,文字在后,但 Markdown 选择了相反顺序,这应该就是将可读性列为首位的目标,而进行的设计。

🔗本文的其他部分 | #Markdown #gledos_science | 🌐博客版
混乱的 Markdown 语法

最早的 Markdown 语法解析器,是 John Gruber 与 Aaron Swartz 创造的 Markdown.pl ,但此解析器存在歧义,并且开发者 John Gruber 不再更新,而 Aaron Swartz 早已辞世,也就导致了其他人制作的 Markdown 解析器各不相同。

2012年,一群 Markdown 爱好者开始制作具有共识的规范,原理是使用目前流行的解析器测试,将之前存在歧义,疏漏的情况进行填补,不过还是以原始的 Markdown.pl 为准,所以像是脚注这样的扩展语法不会收录进此项目中,最后此规范被命名为了 CommonMark

不过 CommonMark 规范只是指导意见,熟悉此规范可能只会减少遇到一些奇怪的解析问题的可能性,具体情况还是需要阅读该平台的 Markdown 指南,如果是开源软件,应该也能找到具体解析器的相关说明。

如果阅读 CommonMark 的内容太枯燥,也可以在 VS Code 等常见编辑器中安装 markdownlint 插件,从而快速检查可能有问题的部分。(不过可能会看到大量错误,如果不得不这么做,比如一些扩展语法被当作错误,就需要到设置了关闭不需要的规则)

#历史 #原理 #Markdown #gledos_science
在 Telegram 里使用 Markdown

Telegram 直接支持的 Markdown 语法较少,比如缺少了链接这个比较重要的功能,即 [URL](http://example.com) 无法被解析为链接。

Telegram 机器人是比较方便的方法,私聊 @markdownbot ,选择语言后点击 Custom Mode ,然后发送 Markdown 文本,就能产生 Telegram 支持的富文本。

不过经测试,Telegram 在部分情况下会解析粗体 (**被加粗的内容**) ,所以 @markdownbot 支持粗体的语法是 *被加粗的内容* 这样。

@bold@Sean_Bot 这两个机器人都是基于 inline 模式,可以支持原样的 Markdown 语法,但受到 inline 模式的限制,无法渲染过长的文字。

#研究 #经验 #Markdown #telegram
Markdown 撰写文档常见问题 有序列表的缩进

Markdown 可以通过缩进,让列表也进行缩进。但是如果涉及复杂的缩进,比如我曾经使用 Markdown 编写了一个超过 100 编号的有序序列,并且序列里还有多行内容,比如内部再增加一个无序序列以及代码块,这就需要严格遵守 Markdown 的语法了。

严格来说,缩进都应该使用四个空格或是一个制表符,两个空格可能在有限的情况下能够正常使用,但一旦缩进变得复杂了,就容易出错。[图1]是我编写的超过 100 编号的有序序列的一部分,如何在有序序列放置各种信息,可以查看 亚伦斯·沃茨 参与编写的 Markdown 语法 网页。

不过当有序序列的编号超过 100 时,情况又发生了变化,至少在基于 Javascript 的 Marked 与基于 Ruby 的 kramdown 上,都需要增加空格,如[图2][图3]所示,只有四个空格时会出现错误,这时「对齐」,也许是三位数的序号加上「点」与一个空格,已经是五个字符的宽度了,所以需要五个空格。(五到八个空格应该都能正常运行)

#原理 #工具 #指南 #Markdown
Markdown 撰写文档常见问题

标题

Markdown 在 HTML 中使用时,最好只有一个 <H1> 标题标签,即一个 # 标题,这是 HTML 的 标准规范。如果 YAML 头文件含有 title 元素,那么不建议在正文中再次使用 <H1> 标题,因为 <H1> 往往表示该页面的标题。也需要注意避免跳过某级标题。

换行

古典的 Markdown 使用严格换行,即只按下一次回车,Markdown 解析器是会自动忽略掉这个回车。如果想要文章不分段的换行,那么需要使用 <br> 标记或者输入两次空格后再按下回车。Visual Studio Code 可以在设置中搜索 renderWhitespace 选项,来显示尾部的空白字符。

现在一些简单入门的 Markdown 工具可能为了方便,会默认设置禁止严格换行,比如 Obsidian 这款笔记软件。

空格

只要不是左右包括住里面的内容的 Markdown 语法,比如标题和列表,都需要在标记与文字间留下空格,否则解析可能不成功,或者其他的解析器会遇到问题。

#原理 #工具 #指南 #Markdown #gledos_science
使用 mermaid 的流程图功能制作类「思维导图」

Markdown 等易于使用的标记语言的诞生,是为了减少文字排版时间。

而图表也有标记语言,比如 GraphvizPlantUML 等,其中 mermaid 是最流行的,因为使用了 Javascript ,所以能够轻易的添加进各种 Markdown 编辑器以及网页之中。

要使用 mermaid 的流程图功能 (Flowchart) 制作类「思维导图」,常用的语法有这些: 手动控制节点距离通过双引号实现换行子图

最后就能生成一幅 SVG 或 PNG 的「思维导图」了,因为方便,所以使用的是 在线编辑器 自带的生成图片功能,封面图为《靴的分类 思维导图》,无损图以及源码在 这里

使用的编辑工具为: 安装了相关插件的 VS Code 与 Obsidian 。

如果对 mermaid 的其他功能感兴趣,可以阅读《Mermaid,就像用 Markdown 码字一样,高效制作简易流图》—— 火箭君CC 这篇少数派文章。

#工具 #文章 #Markdown
 
 
Back to Top