经常写文档的人应该对“标注框”(callouts block)不会感到陌生。
什么是标注框
所谓标注框,就是一种带有小图标、标题、背景色的一小段文本样式,有时候还会提供折叠功能。有点类似 Markdown 中的 >
引言块,但更加醒目。往往用于诸如提示、警告之类的用途,也经常被称为“谏言块”(admonition)。
在 标准 Markdown 规范 和非常流行的 Github 式 Markdown 规范 中,对于“标注框”都没有明确的定义,连 Markdown 扩展语法中也不见踪迹。因此,关于标注框这件事,各家都是采用各自的语法来实现,不同语法之间互不通用。
Obsidian 中的标注框
目前 Obsidian 有两种方式实现标注框。
- 官方的 Callouts 标准(从 Obsidian 0.14 版本开始可用)。
- 第三方插件 Obsidian Admonition 的标注框标准(兼容官方标准)。
Obsidian 官方的标注框写法
Obsidian 的官方写法借助了 Markdown 中的引言块写法:>
,在后面加上 [!标注类型]
就可以添加对应种类的标注框了。
具体能用的标注类型也有不少,tip
、success
、warning
、example
这些看文档时常见的类型都做了支持。
> [!info]
> 这是一个标注框
> 它支持 **Markdown 语法**、 [[内部链接|Wikilinks]] 和 [[嵌入文件|embeds]]。
还可以在标题上添加更多文字信息,改掉原来的 Info 字样。
> [!tip] 小技巧
> 这个小技巧的标题不是默认的 “Tip”
还有更复杂一些的嵌套标注框:
> [!question] 标注框可以被嵌套吗?
> > [!success] 当然
> > > [!example] 第三层嵌套
在 > [!标注]
后,添加一个加号(+
)或减号(-
) 就可以将其设置为折叠标注框,加号是默认展开,减号是默认折叠。
官方的标注框还有一大优势,它能够被官方的 Publish 服务支持。
附:以下是所有支持的标注类型,它们已经有了一套默认的图标和配色,开箱即用。具体的样式可以参考 Obsidian 标注框支持的样式 文档。
标注类型 | 别名 |
---|---|
Note | |
Abstract | summary , tldr |
Info | |
Todo | |
Tip | hint , important |
Success | check , done |
Question | help , faq |
Warning | caution , attention |
Failure | fail , missing |
Danger | error |
Bug | |
Example | |
Quote | cite |
Obsidian Admonition 插件的标注框写法
Obsidian Admonition 插件要比官方功能更早推出,在它的历史版本中一共有三套标注框语法。分别是沿用至今的代码块语法、实验性质的非代码块语法(已移除)、微软文档语法(已移除)。
在官方功能推出后,它对官方的标注框做了增强支持,允许开启“始终启用折叠”之类的选项。并且保证“现有的所有标注框永久有效”,所以你仍然可以了解一下它的写法,并在笔记中继续使用。
最简单的用法就是在代码块后添加一个 ad-标注类别
的标注。
```ad-tip
标注框正文内容
```
接下来是完整的用法,能够自定义标题、折叠功能、图标和颜色。注意顺序不要写错。
```ad-<type> # 标注框类型
title: # 自定义标题
collapse: # 启用折叠功能,输入 `open` 或者 `close`
icon: # 自定义图标,支持 FontAwesome 和 RPGAwesome
color: # 自定义颜色,支持 `200, 200, 200` 的 RGB 颜色写法
标注框正文内容
```
嵌套的用法就更直接了,通过往外层添加更多的代码框符号就可以了,这本身也是代码框的标准写法。
`````ad-question
title: 标注框可以被嵌套吗?
collapse: open
````ad-success
title: 当然
```ad-example
title: 第三层嵌套
collapse: close
```
````
`````
由于借用了代码块的写法,所以相比官方写法还有一个额外的问题,如果想在标注框中再套一层代码块应该怎么写?
答案是用 ~~~
或者 Tab 缩进来解决,Tab 时没有办法再附加代码高亮效果。
```ad-example
用 ~~~ 包含一些代码
~~~python
def code:
print('some code')
~~~
```
```ad-example
用 Tab 包含一些代码
def code:
print('some code')
```
Obsidian Admonition 可以有限地支持官方的 Publish 服务,具体实现方法是在通过私有域名部署 Obsidian Publish 的时候,添加一部分 JS 代码来实现的。相比直接用官方写法,终归是麻烦了一点。
Obsidian Admonition 插件支持的种类差别不大,支持的别名更丰富。
标注类型 | 别名 |
---|---|
note | note , seealso |
abstract | abstract , summary , tldr |
info | info , todo |
tip | tip , hint , important |
success | success , check , done |
question | question , help , faq |
warning | warning , caution , attention |
failure | failure , fail , missing |
danger | danger , error |
bug | bug |
example | example |
quote | quote , cite |
Obsidian Admonition 插件还提供了一些配置项,它提供了专属的设置界面进行配置,允许你一次性调整是否开启折叠、允许 Markdown 标题(支持 LaTeX)、定制标注框样式、添加复制按钮等。更适合喜欢自定义的用户。
转标注框的 Quicker 动作
很多时候我们已经写完了一段内容,要将其中的一部分转换为带标注框的样式。如果用 Obsidian 自带的样式,就需要逐行添加 >
,再查一查 > [!info]
的语法,似乎有一点麻烦。
所以我做了一个 Quicker 动作,可以将一段文本转换为带标注框的样式。
应该使用哪一种?
我更推荐 Obsidian 官方的标注框写法,样式足够美观,语法足够简洁,有官方的支持,还有“用加减符号来添加折叠功能”的这样的巧思,实在叫人没什么理由拒绝。
Obsidian Admonition 则更适合需要额外定制的用户,在需要定制颜色、图标的情况下是不二之选。
我想开发者应该会更喜欢 Admonition 的“类代码块语法”。因为开发者在使用代码块的时候,本来也需要在代码块标记后添加 python、js 这样的标注来添加语言高亮,Admonition 只是一种特殊的语言标注而已。不需要费额外的力气就能上手这种写法。
而我个人从 Obsidian 的早期版本就开始使用 Admonition,已经在大量笔记中使用、甚至在模板中都添加了这个写法,既然插件已经保证会保持向下兼容性,那么同样建议老用户继续使用 Admonition 插件。