Loading... ## 内容块定义 “#内容块#”指的是一块内容,每块这样的内容通过一个全局唯一的 ID 进行标识。ID 是程序自动生成的,形如: `202008250000-a1b2c3d`,由时间和 7 位随机字符组成。 ## 内容块类型 最常见的内容块就是我们所熟悉的段落(Paragraph)。在中文传统排版中,段落通常是通过段首缩进(空两格)来表示,随着互联网的发展,逐渐影响了段落的表示。现在使用较多的方式是增加段落之间的行距,或者使用空行来分隔段落。 实际使用时,仅仅靠段落排版是不够的,往往还需要用到标题(Heading)、列表(List)、表格(Table)、块引用(Blockquote)等来丰富我们的排版。这些排版样式除了视觉上的不同,更重要的是它们在一定程度上表达了内容的语义。比如在看到无序列表时,我们可以知道每个列表项是不分先后的平级关系,而在看到有序列表时则相反。 所以,内容块存在"很多类型"[^1],不同的排版格式会形成不同的内容块。#内容块/类型# ## 组合内容块 一篇文档是一些内容块的组合,内容块是基本单位。这就好比乐高积木,可以使用不同的基本模块进行组合。#注意#:文档本身也是一种内容块,更准确地说,文档块、列表块、引述块这三种内容块是容器块,他们可以包含其他任意类型的内容块。#内容块/组合# 至此,我们已经能够用内容块来描述所有的内容了,这样就能通过统一的用法来"链接内容块"[^3]了。逻辑上没有页面(Page)概念,减少使用中不必要的负担,让用户将注意力集中在内容块上。 ## 命名和备注 我们可以为每个内容块命名、添加别名和备注。命名和别名主要用于反链"提及"[^6]搜索,备注用于记录一些不便在内容区中出现的信息。 在 <kbd>设置</kbd> - <kbd>编辑器</kbd> 中打开显示书签、命名、别名标识选项后,被命名的内容块在编辑器中会被加上外框显示。如果对文档块进行命名和备注,则当鼠标悬浮文档树文档上时将浮出该文档的相关命名和备注信息。 可使用"嵌入内容块"[^7]对命名和备注进行搜索汇总,比如列出备注中包含 `简短` 关键字的内容块: > 我们可以为每个内容块命名、添加别名和备注。命名和别名主要用于反链"提及"[^6]搜索,备注用于记录一些不便在内容区中出现的信息。 > [^1]: # 1 内容块类型 ## 内容块类型简述 鼠标悬浮在内容块上左侧会出现该内容块对应的图标。 | 标识 | 类型 | "元类型"[^2] | | ----------------------------------------------------------------------- | ---------- | ---------- | |  | 段落块 | 叶子块 | |  | 标题块 | 叶子块 | |  | 数学公式块 | 叶子块 | |  | 代码块 | 叶子块 | |  | 表格块 | 叶子块 | |  | 无序列表块 | 容器块 | |  | 有序列表块 | 容器块 | |  | 任务列表块 | 容器块 | |  | 列表项块 | 容器块 | |  | 引述块 | 容器块 | |  | 超级块 | 容器块 | |  | 文档块 | 容器块 | ## 内容块类型详解 下面我们分别介绍一下这些内容块类型的细节。#内容块/类型# ### 段落块  这里是一个示例段落。 在一个段落后直接回车会形成新的段落。 ### 标题块  以上就是标题块,支持一级到六级。 ### 数学公式块  $$ a^2 + b^2 = c^2 $$ ### 代码块  ```js function hello() {} ``` ### 表格块  | 列一 | 列二 | | -------- | -------- | | 行一列一 | 行一列二 | | 行二列一 | 行二列二 | 表格中如需使用 `|` 请使用 `\` 转义,即需要输入 `\|`。 ### 无序列表块  * 列表项一 * 列表项二 无序列表块是一种"元类型"[^2]。 如果需要在列表项中进行换行,请使用 <kbd>Shift Enter</kbd>。 ### 有序列表块  1. 列表项一 2. 列表项二 有序列表块是一种"元类型"[^2]。 ### 任务列表块  - [X] 待办一 - [ ] 待办二 任务列表块是一种"元类型"[^2]。 ### 列表项块  通过列表项块可以实现大纲式笔记的基本用法,列表项块是一种"元类型"[^2]。 ### 引述块  > 注意不是内容块引用,而是引述块(Blockquote)。 > 引述块是一种"元类型"[^2]。 ### 超级块  超级块是一种"元类型"[^2]。可用于组合文档内连续的内容块,也用于支持横向排版。 ### 文档块  整个文档是一个块,文档块是一种"元类型"[^2]。 ## 内容块元类型 内容块在逻辑上分为叶子块和容器块,叶子块不能包含其他块,容器块可以包含其他块: * 列表块:只能包含列表项块 * 列表项块:可以包含任意非文档块 * 引述块:可以包含任意非文档块 * 超级块:可以包含任意非文档块 * 文档块:可以包含任意非文档块 [^2]: ## 内容块元类型 内容块在逻辑上分为叶子块和容器块,叶子块不能包含其他块,容器块可以包含其他块: * 列表块:只能包含列表项块 * 列表项块:可以包含任意非文档块 * 引述块:可以包含任意非文档块 * 超级块:可以包含任意非文档块 * 文档块:可以包含任意非文档块 [^3]: # 2 引用内容块 ## 概述 输入 `((` 后将触发内容块引用搜索,继续输入作为搜索关键字,在搜索结果中使用上下键选定后回车就可以完成内容块的引用了。 内容块引用的完整语法是:` ((id "text"))`,其中 `id` 形如: `202008250000-a1b2c3d`,由时间和 7 位随机字符组成,内容块 id 是在创建内容块时就会自动生成的;后面的 `text` 是在引用处对该内容块的自定义锚文本。建立好内容块引用后,鼠标悬浮在锚文本上后将弹出预览浮层,展现被引用的内容块。#内容块/引用# ## 链接方向 * 正向链接(Forwardlink),即当前内容块使用了哪些其他内容块 * 反向链接(Backlink),即当前内容块被那些其他内容块使用了 正向链接包含在当前块的内容中,我们可以很直观的看到。反向链接需要在其他文档中搜索才能知道,而恰恰是这些信息对我们比较有价值。我们可以通过以下两种方式来帮助我们更好的掌握知识点或者发散思路: * "关系图"[^4]:浏览内容块之间的正向和反向链接关系 * "反向链接"[^5]:以文本列表的方式展现当前内容块的反向链接 [^4]: ## 关系图 关系图分为文档级和全局。文档的关系图是以当前文档块展开,并呈现所有和该文档有关联的(正向链接和反向链接)内容块;全局关系图是所有笔记本中所有的块和链接关系。 按住 `Ctrl` 单击节点:跳转到该节点。 [^5]: ## 反向链接 反向链接是文档级的,列出当前文档中内容块被引用和被提及所在的块。 ### 链接 * 鼠标悬浮引用块前面的标识会弹出预览浮窗 * 单击反链列表中的引用块进行跳转 ### 提及 提及使用当前文档中内容块名称和别名作为关键字进行搜索,搜索结果为包含这些关键字的内容块。可以通过链接按钮将提及转换为链接:提及处会使用 `((id "内容块名称"))` 进行替换。 [^6]: ### 提及 提及使用当前文档中内容块名称和别名作为关键字进行搜索,搜索结果为包含这些关键字的内容块。可以通过链接按钮将提及转换为链接:提及处会使用 `((id "内容块名称"))` 进行替换。 [^7]: # 5 嵌入内容块 ## 概述 嵌入内容块主要用于汇总所需内容块,通过 `{{` 和 `}}` 将 SQL 脚本包裹起来并独占一行:`{{ SELECT * FROM blocks WHERE content LIKE '%关键字%' }}`,数据库表请参考"这里"[^8]。#内容块/嵌入# ## 示例 * 查询内容中包含 `内容块` 的列表项: ```sql {{ SELECT * FROM blocks WHERE content LIKE '%内容块%' AND type = 'i' }} ``` * 查询内容中同时包含 `内容块` 和 `引用` 段落块: ```sql {{ SELECT * FROM blocks WHERE content LIKE '%内容块%' AND content LIKE '%引用%' AND type = 'p') }} ``` * 查询内容中同时包含 `内容块` 和 `嵌入` 的标题块并按更新时间降序结果取前 2 条: ```sql {{ SELECT * FROM blocks WHERE content LIKE '%内容块%' AND content LIKE '%嵌入%' AND type = 'h' ORDER BY updated DESC LIMIT 2 }} ``` ### 案例一 查询同时包含 `在思源中` 和 `核心概念` 文本的段落块,并排除当前文档(否则当段落块也会包含到结果集中,因为当前段落同样包含了这两个文本,下面的案例类似): 查询同时包含 `在思源中` 和 `核心概念` 文本的段落块,并排除当前文档(否则当段落块也会包含到结果集中,因为当前段落同样包含了这两个文本,下面的案例类似): 在思源中,唯一重要的核心概念是((20200813004931-q4cu8na "内容块"))。通过排版格式即可形成内容块,这样我们就能在块级粒度上对思绪和知识进行整理,同时也能方便长文阅读和输出。 ### 案例二 查询同时包含标签 `#内容块/嵌入#` 和 `#内容块/引用#` 的段落块: 嵌入内容块主要用于汇总所需内容块,通过 `{{` 和 `}}` 将 SQL 脚本包裹起来并独占一行:`{{ SELECT * FROM blocks WHERE content LIKE '%关键字%' }}`,数据库表请参考((20201117103851-l9cahuc "这里"))。#内容块/嵌入# 查询同时包含标签 `#内容块/嵌入#` 和 `#内容块/引用#` 的段落块: 内容块引用的完整语法是:` ((id "text"))`,其中 `id` 形如: `202008250000-a1b2c3d`,由时间和 7 位随机字符组成,内容块 id 是在创建内容块时就会自动生成的;后面的 `text` 是在引用处对该内容块的自定义锚文本。建立好内容块引用后,鼠标悬浮在锚文本上后将弹出预览浮层,展现被引用的内容块。#内容块/引用# ### 案例三 有时候我们可能需要随机漫游显示内容块,以方便回顾。 其余文件夹就是用户自己创建的笔记本文件夹,笔记本文件夹下 `.sy` 后缀的文件用于保存文档数据,数据格式为 JSON 小提示:在指定的模板使用((20201117101902-2ewjjum "嵌入内容块")),可以汇总待办事项或者需要每日查看的内容块。 “剪藏”是指将 Web 页面上的内容复制到思源中,并尽量保持其原始格式。 ### 案例四 查询未完成的任务列表项,这里需要使用 `markdown` 字段而不是 `content` 字段: - [ ] 待办二 * [ ] 预约牙医 [^8]: ## `blocks` 表 该表用于存储内容块数据。 | 字段 | 说明 | | ----------: | -------------------------------------------------- | | id | 内容块 ID | | parent_id | 父块的 ID,如果内容块是文档块则该字段为空 | | root_id | 根块 ID,即文档块 ID | | hash | content 的 SHA256 校验和 | | box | 笔记本 ID | | path | 内容块所在文档路径 | | hpath | 人类可读的内容块所在文档路径 | | name | 内容块名称 | | alias | 内容块别名 | | memo | 内容块备注 | | content | 去除了 Markdown 标记符的文本 | | markdown | 包含完整 Markdown 标记符的文本 | | length | Markdown 文本长度 | | type | 内容块类型,参考((20210210103523-ombf290 "这里")) | | subtype | 内容块子类型,参考((20210210103411-tcbcjja "这里")) | | ial | 内联属性列表,形如 `{: name="value"}` | | sort | 排序用,数值越小排序越靠前 | | created | 创建时间 | | updated | 更新时间 | Last modification:October 26th, 2021 at 11:53 pm © 允许规范转载