diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index 957062b..3e32fcc 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -4,5 +4,7 @@ "nativeMenus": false, "theme": "moonstone", "accentColor": "", - "enabledCssSnippets": [] + "enabledCssSnippets": [ + "多彩标签" + ] } \ No newline at end of file diff --git a/.obsidian/snippets/多彩标签.css b/.obsidian/snippets/多彩标签.css new file mode 100644 index 0000000..bcbd64a --- /dev/null +++ b/.obsidian/snippets/多彩标签.css @@ -0,0 +1,70 @@ +@charset "UTF-8"; +/* + 优化版:Obsidian Metadata 多彩标签样式 + - 只需修改下面的 --pill-bg-N 和 --pill-hover-N 变量即可定制你的调色板。 +*/ + +/* 在所有非tags的metadata属性上统一定义颜色变量 */ +.metadata-property:not([data-property-key="tags"]) { + /* --- 色板3: 大地色系 / Earth Tones --- */ + /* AA=33 表示20%透明度, AA=40 表示25%透明度 */ + --pill-bg-1: #a98c7833; --pill-hover-1: #a98c7840; /* Clay Brown */ + --pill-bg-2: #d8c3a533; --pill-hover-2: #d8c3a540; /* Almond */ + --pill-bg-3: #8e8d8a33; --pill-hover-3: #8e8d8a40; /* Stone Grey */ + --pill-bg-4: #e9807433; --pill-hover-4: #e9807440; /* Terracotta */ + --pill-bg-5: #e85a4f33; --pill-hover-5: #e85a4f40; /* Rust Red */ + --pill-bg-6: #d8ae4733; --pill-hover-6: #d8ae4740; /* Ochre */ + --pill-bg-7: #a49e8d33; --pill-hover-7: #a49e8d40; /* Khaki Grey */ + --pill-bg-8: #e6b47c33; --pill-hover-8: #e6b47c40; /* Sandy Brown */ +} + +/* 基础样式:确保内边距和背景填充正确 */ +.metadata-property:not([data-property-key="tags"]) .multi-select-pill { + --pill-padding-x: var(--tag-padding-x); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill::after { + width: 100% !important; + left: 0 !important; +} + +/* 颜色循环:现在只需引用变量,代码非常整洁 */ +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+1) { + --pill-background: var(--pill-bg-1); + --pill-background-hover: var(--pill-hover-1); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+2) { + --pill-background: var(--pill-bg-2); + --pill-background-hover: var(--pill-hover-2); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+3) { + --pill-background: var(--pill-bg-3); + --pill-background-hover: var(--pill-hover-3); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+4) { + --pill-background: var(--pill-bg-4); + --pill-background-hover: var(--pill-hover-4); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+5) { + --pill-background: var(--pill-bg-5); + --pill-background-hover: var(--pill-hover-5); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+6) { + --pill-background: var(--pill-bg-6); + --pill-background-hover: var(--pill-hover-6); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+7) { + --pill-background: var(--pill-bg-7); + --pill-background-hover: var(--pill-hover-7); +} + +.metadata-property:not([data-property-key="tags"]) .multi-select-pill:nth-child(8n+8) { + --pill-background: var(--pill-bg-8); + --pill-background-hover: var(--pill-hover-8); +} \ No newline at end of file diff --git a/.obsidian/types.json b/.obsidian/types.json index 72c2fc3..3ee90e4 100644 --- a/.obsidian/types.json +++ b/.obsidian/types.json @@ -26,6 +26,7 @@ "TQ_show_task_count": "checkbox", "TQ_show_tree": "checkbox", "TQ_show_urgency": "checkbox", - "TQ_show_toolbar": "checkbox" + "TQ_show_toolbar": "checkbox", + "写完了吗": "checkbox" } } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 123d86e..6bc6e17 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,13 +13,13 @@ "state": { "type": "markdown", "state": { - "file": "School/vivado_ip.md", + "file": "Template/AutoAdd.md", "mode": "source", - "source": false, + "source": true, "backlinks": false }, "icon": "lucide-file", - "title": "vivado_ip" + "title": "AutoAdd" } } ] @@ -103,11 +103,9 @@ "type": "leaf", "state": { "type": "file-properties", - "state": { - "file": "School/vivado_ip.md" - }, + "state": {}, "icon": "lucide-info", - "title": "vivado_ip的笔记属性" + "title": "笔记属性" } }, { @@ -126,13 +124,13 @@ "state": { "type": "outline", "state": { - "file": "School/vivado_ip.md", + "file": "Template/AutoAdd.md", "followCursor": true, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "vivado_ip 的大纲" + "title": "AutoAdd 的大纲" } } ], @@ -204,7 +202,7 @@ } } ], - "currentTab": 3 + "currentTab": 2 }, { "id": "bf1e7d1a52b4651c", @@ -255,18 +253,26 @@ }, "active": "9c82e7556515fa96", "lastOpenFiles": [ + "Bases/元数据列表.base", + "Collection/Markdown语法.md", + "Collection/linux命令.md", + "Collection/KMP算法.md", + "Collection/连~都忘记了的小知识.md", + "Collection/YAML用法.md", + "Collection/PID控制算法.md", + "🏡HOME.md", + "README.md", + "Diary/2026/04/2026-04-16 周四.md", + "未命名.canvas", + "School/vivado_ip.md", "Template/Diary.md", "YueQian/相关网站.md", "Archive/test.md", "Collection/配置备忘/navidrome.md", "Collection/配置备忘/openclash配置.md", "Collection/配置备忘/Typecho插件Aplayer使用教程.md", - "🏡HOME.md", "Bases/为什么会消失.md", - "README.md", "Bases/Diary.base", - "Diary/2026/04/2026-04-16 周四.md", - "Bases/test.base", "Bases", "Bases/未命名.base", "Archive", @@ -276,22 +282,13 @@ "Diary/2026/01/2026-01-30 周五.md", "Diary/2026/01/2026-01-31 周六.md", "Diary/2026/01/2026-01-27 周二.md", - "Collection/未命名.md", "Collection/未命名 1.md", "Bases/Diay.base", "Template/AutoAdd.md", - "Diary/2026/02/2026-02-05 周四.md", - "Diary/2026/02/2026-02-11 周三.md", - "Diary/2026/02/2026-02-03 周二.md", - "Diary/2026/02/2026-02-01 周日.md", - "Diary/2026/04/2026-04-17 周五.md", - "Diary/2026-04-16 周四.md", - "未命名.md", "Diary/2026/04", "Diary/2026/01", "Diary/2026/02", "Diary/2026", - "未命名.canvas", "Collection/YoudaoyunNotes/02C语言/images/WEBRESOURCE0486404994804c5fb05039cff405656astickPicture.png", "Collection/YoudaoyunNotes/02C语言/images/WEBRESOURCE059f0c15158165303fc0fc990a90a445image.png", "Collection/YoudaoyunNotes/02C语言/images/WEBRESOURCE048d46d9bb04ceb46b8fe1f3cc419d92image.png", diff --git a/.obsidian/workspaces.json b/.obsidian/workspaces.json index 0142de2..a0e8de0 100644 --- a/.obsidian/workspaces.json +++ b/.obsidian/workspaces.json @@ -1,27 +1,27 @@ { "workspaces": { - "260122": { + "260417": { "main": { - "id": "8991b07ab8f0472d", + "id": "5324373015726ba8", "type": "split", "children": [ { - "id": "4e4eb7258fdc6262", + "id": "69f4530e14d73640", "type": "tabs", "children": [ { - "id": "0a3de9047665030d", + "id": "9c82e7556515fa96", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "YueQian/相关网站.md", - "mode": "preview", + "file": "🏡HOME.md", + "mode": "source", "source": false, "backlinks": false }, "icon": "lucide-file", - "title": "相关网站" + "title": "🏡HOME" } } ] @@ -86,18 +86,28 @@ "dimension": 47.39756367663344, "children": [ { - "id": "d1e1fbb98edd7d1b", + "id": "ffdb392eea0ad1e2", "type": "leaf", "state": { - "type": "outline", + "type": "tag", "state": { - "file": "YueQian/相关网站.md", - "followCursor": true, + "sortOrder": "frequency", + "useHierarchy": false, "showSearch": false, "searchQuery": "" }, - "icon": "lucide-list", - "title": "相关网站 的大纲" + "icon": "lucide-tags", + "title": "标签" + } + }, + { + "id": "f78029584b10fc88", + "type": "leaf", + "state": { + "type": "file-properties", + "state": {}, + "icon": "lucide-info", + "title": "笔记属性" } }, { @@ -111,35 +121,22 @@ } }, { - "id": "b701810dff40f03d", + "id": "d1e1fbb98edd7d1b", "type": "leaf", "state": { - "type": "all-properties", + "type": "outline", "state": { - "sortOrder": "frequency", + "file": "🏡HOME.md", + "followCursor": true, "showSearch": false, "searchQuery": "" }, - "icon": "lucide-archive", - "title": "添加笔记属性" - } - }, - { - "id": "ffdb392eea0ad1e2", - "type": "leaf", - "state": { - "type": "tag", - "state": { - "sortOrder": "frequency", - "useHierarchy": true, - "showSearch": false, - "searchQuery": "" - }, - "icon": "lucide-tags", - "title": "标签" + "icon": "lucide-list", + "title": "🏡HOME 的大纲" } } - ] + ], + "currentTab": 3 } ], "direction": "horizontal", @@ -189,11 +186,9 @@ { "id": "841e99623ecdb9f4", "type": "leaf", - "pinned": true, "state": { "type": "chinese-calendar-view", "state": {}, - "pinned": true, "icon": "calendar-with-checkmark", "title": "日历" } @@ -234,25 +229,33 @@ }, "left-ribbon": { "hiddenItems": { - "homepage:打开主页": false, + "obsidian-livesync:P2P Replicator": false, + "obsidian-livesync:Replicate": false, + "obsidian-livesync:Show Log": false, "graph:查看关系图谱": false, "switcher:打开快速切换": false, "command-palette:打开命令面板": false, "workspaces:管理工作区布局": false, - "i18n:I18N": false, - "obsidian-git:打开Git源代码管理": false, "obsidian-excalidraw-plugin:新建绘图文件": false, "canvas:新建白板": false, "bases:新建数据库": false, "templater-obsidian:Templater": false, "pdf-plus:PDF++: 切换自动粘贴": false, "pdf-plus:PDF++: 切换自动对焦": false, - "pdf-plus:PDF++: 切换自动复制": false + "pdf-plus:PDF++: 切换自动复制": false, + "nutstore-sync:Start sync": false, + "nutstore-sync:Stop sync": false, + "daily-notes:打开/创建今天的日记": false, + "obsidian-git:打开Git源代码管理": false, + "homepage:打开主页": false, + "obsidian42-brat:BRAT": false, + "i18n:common.i18n": false, + "obsidian-livesync:显示自定义同步": false } }, "active": "841e99623ecdb9f4", - "mtime": "2026-01-22T16:41:43+08:00" + "mtime": "2026-04-17T23:08:26+08:00" } }, - "active": "260122" + "active": "260417" } \ No newline at end of file diff --git a/Bases/test.base b/Bases/test.base deleted file mode 100644 index f165474..0000000 --- a/Bases/test.base +++ /dev/null @@ -1,3 +0,0 @@ -views: - - type: table - name: 表格 diff --git a/Bases/元数据列表.base b/Bases/元数据列表.base new file mode 100644 index 0000000..e2e8e91 --- /dev/null +++ b/Bases/元数据列表.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + order: + - file.name + - 笔记类型 + - tags + - aliases + sort: + - property: 笔记类型 + direction: ASC + - property: file.name + direction: ASC + columnSize: + file.name: 210 + note.笔记类型: 171 + note.tags: 344 diff --git a/Collection/Markdown语法.md b/Collection/Markdown语法.md new file mode 100644 index 0000000..1305608 --- /dev/null +++ b/Collection/Markdown语法.md @@ -0,0 +1,358 @@ +--- +tags: + - Markdown语法 + - 标记语言 + - Obsidian +aliases: + - MD语法 + - Obsidian Markdown + - Markdown教程 +笔记类型: 永久笔记 +日期: 2026/4/17 +--- +# **语法速查表** + +| 功能 (Feature) | Markdown 语法 (Syntax) | 效果预览 (Result) | +| :--- | :--- | :--- | +| 一级标题 | `# 标题内容` | 最大的标题 | +| 二级标题 | `## 标题内容` | | +| 三级标题 | `### 标题内容` | (依此类推,可到六级) | +| --- | --- | --- | +| **加粗** | `**需要加粗的文字**` | **需要加粗的文字** | +| *斜体* | `*需要倾斜的文字*` | *需要倾斜的文字* | +| ***加粗并斜体*** | `***又粗又斜的文字***` | ***又粗又斜的文字*** | +| ~~删除线~~ | `~~被删除的文字~~` | ~~被删除的文字~~ | +| --- | --- | --- | +| 无序列表 | `- 列表项` 或 `* 列表项` | • 列表项 | +| 有序列表 | `1. 列表项一`
`2. 列表项二` | 1. 列表项一
2. 列表项二 | +| 任务列表(待办) | `- [ ] 未完成的任务`
`- [x] 已完成的任务` | ☐ 未完成的任务
☑ 已完成的任务 | +| --- | --- | --- | +| > 引用 | `> 这是一段引用的文字` | > 这是一段引用的文字 | +| `行内代码` | `` `code` `` | 用于突出显示单个变量或命令 | +| 代码块 | ```` ```python `
`print("Hello, World!")`
` ``` ```` | 用于显示多行代码片段 | +| --- | --- | --- | +| 链接 | `[链接显示的文字](https://obsidian.md)` | [链接显示的文字](https://obsidian.md) | +| 图片 | `![图片的替代文字](图片链接或路径)` | (在笔记中会直接显示图片) | +| 水平分割线 | `---` 或 `***` | 一条横跨整个页面的线 | + + + + + + + +> [!note]+ 标题 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 井号加空格,几个井号就是几级标题,一级标题字体最大。 +> # 一级标题 +> ## 二级标题 +> ``` + +# 标题 1 + +## 标题 2 + +### 标题 3 + +#### 标题 4 + +##### 标题 5 + +###### 标题 6 + +--- + +> [!note]+ 文本 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 两个星号是加粗:**我是加粗字体** +> 一个型号是斜体:*我是斜体* +> 三个星号,或者三个下划线是粗斜体:***我是粗斜体***,___我是粗斜体___ +> 两个等号是高亮:==我是高亮== +> 两个波浪线是删除:~~我是删除~~ +> ``` + +## 文本 + +普通文本 + +**段落粗体文本** + +*段落斜体文本* + +==高亮== + +~~删除~~ + +***粗斜体*** +___粗斜体___ +~~删除~~ + + +--- + +> [!note]+ 列表 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 无序列表:减号/加号/星号 + 空格,三个符号哪个都可以,但是建议用减号。 - 列表项1 +> 有序列表:数字+点+空格:1. 列表项 +> 输入完一个列表项后,打回车可以继续下一个列表项 +> 列表嵌套:使用tab可以让列表缩进,使用shift+tab可以取消缩进。 +> +> 任务列表:方括号里面一个空格或者叉,空格代表未完成,叉代表已完成。 +> [x] 任务 1 +> [ ] 任务 2 +> Task插件可以使已完成的任务后面自动显示完成时间。 +> +>任务列表并非原始的、John Gruber 定义的 Markdown 标准语法。然而,它已经成为一种被广泛接受和支持的 Markdown 扩展语法,许多现代的 Markdown 编辑器和笔记应用也都采纳了这种任务列表语法,因为它非常直观和实用。 +> ``` +## 列表 +**无序列表** +- 列表项 1 +- 列表项 2 + - 列表项 2.1 + - 列表项 2.2 +- 列表项 3 + +**有序列表** +1. 列表项 a +2. 列表项 b + 1. 列表项 b1 + 2. 列表项 b2 +3. 列表项 c + +**任务列表** +- [ ] 任务 1 +- [ ] 任务 2 + - [ ] 嵌套任务 2.1 + - [ ] 嵌套任务 2.2 +- [ ] 任务 3 + +--- + +## 段落 +> [!note]+ 段落 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 引用:大于号+空格:> 我是引用 +> 嵌套引用:多个大于号,每多一个大于号,代表深一层嵌套 +> 分割线:三个减号然后回车:--- +> 强制换行 (Soft Break / Line Break):在同一段落内强制开始一个新行,而不是开始一个新段落。使用方法:在一行的末尾输入两个或更多的空格,然后按回车键。 +> 备选方法:(如果 Markdown 解析器支持 HTML):直接使用 HTML 的 
 标签。 +> +> ``` + +引用语法: +> 引用了一段名人名言 +>> 嵌套引用 +>>> 俄罗斯套娃 + +强制换行: + + 这是第一行文字(假设末尾有两个空格) + 第二行 + + +分割线: + +--- + +> [!note]+ 链接 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> [普通链接](https://www.bing.com/) +> [普通链接带标题](https://www.bing.com/ "普通链接带标题") +> 直接链接: +> 锚点链接:1. 在文稿起草阶段,还没确定具体网址,但可以先给出网址标题。2. 同一篇文章需要重复出现同一个网址时. +> 使用方法:[网址标题][网址名] +> 然后在其他地方(一般是文章最后)给出网址名的地址:[网址名]:https://www.bing.com/ +> [锚点链接][anchor-id] +> [anchor-id]: http://www.this-anchor-link.com/ +> +> ``` + +## 链接 + +[普通链接](https://www.bing.com/) + +直接链接: + +[锚点链接][锚点名称123] + +[锚点名称123]: http://www.this-anchor-link.com/ + + + +--- +> [!note]+ 脚注 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 方括号内,上箭头,外加脚注名称(一般为标号) +> 本句话要加脚注[^01] +> [^01]:这是解释脚注 01的内容 +> ``` + +## 脚注 + +1. 要添加脚注的话[^01] +2. 第二个要添加脚注的话[^02] + +[^01]:脚注内容一 +[^02]:脚注内容二 + + + +--- +> [!note]+ 图片 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 图片语法与链接类似,只是在前面多一个感叹号!。 +> 示例:![替代文本](图片路径 "可选的图片标题") +> 替代文本:当图片无法显示时展示的文字,也有助于屏幕阅读器。 +> 图片路径:可以是网络图片的 URL,也可以是本地文件的相对或绝对路径。 +> 可选的图片标题:鼠标悬停在图片上时显示的提示文字。 +> +> 带链接的图片 (Clickable Images): +> 使用方法:将图片的 Markdown 语法作为链接的“链接文本”部分。 +> [![替代文本](图片路径)](链接地址) +> [![可爱的猫咪](/assets/obsidian.jpg)](https://www.bing.com/) +> 点击即可跳转到bing.com,哪怕图片找不到,点击依然跳转到链接。 +> ``` +## 图片 + +![Obsidian Logo](https://obsidian.md/images/obsidian-logo-gradient.svg "Obsidian Logo") + +[![可爱的猫咪](/assets/obsidian.jpg)](https://www.bing.com/) + + +--- + +> [!note]+ 表格 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 表头: 用竖线 | 分隔单元格内容。 +> 分隔行: 用竖线 | 分隔,并使用至少三个减号 - 来创建每个单元格的分隔线。可以通过在减号前后添加冒号 : 来控制该列的对齐方式: +> 左对齐 (默认)::--- (或 :-) +> 居中对齐::---: (或 :-:) +> 右对齐:---: (或 -:) +> 内容行 (Content Rows): 用竖线 | 分隔单元格内容。 +> 最外层的竖线 | 是可选的,但为了美观和清晰,建议加上。 +> ``` + +## 表格 + +| 名字 | 姓氏 | 电子邮件 | +| ------ | ------- | -------------------------- | +| John | Doe | john.doe@example.com | +| Muffin | Poppies | muffin.poppies@example.com | +| Jane | Doe | jane.doe@example.com | + +| 左对齐 | 居中对齐 | 右对齐 | +| :----- | :------: | -----: | +| AAA | BBB | CCC | + +--- + +> [!note]+ 代码 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 行内代码用一个点包裹,代码块用三个点包裹,点是键盘上数字1左边的点。 +> 代码块可以指定代码语言,比如python、javascript,直接加在三个点后面即可。 +> 对于 Markdown 中的语言标识符(例如 javascript),通常不区分大小写。这意味着 javascript、JavaScript 和 JAVASCRIPT 应该产生相同的语法高亮效果。不过,最佳实践是使用小写形式。但这也可能取决于具体的 Markdown 解析器。 +> +> Mermaid代码可以生成各种图标,感兴趣的可以单独学习Mermaid语法。 +> ``` + +## 代码 + +**行内代码** +变量 `myvar` 被设置为值 `100`。 + +**代码块** + + +```python +import numpy as np +def calc(a): + return np.sqrt(a)*3 + +test = calc(12) +``` + +Mermaid代码: +```mermaid +graph TD + A[开始] --> B(处理); + B --> C{条件?}; + C -- 是 --> D[操作1]; + C -- 否 --> E[操作2]; + D --> F[结束]; + E --> F; +``` + + +# [[Obsidian]]特有或增强的Markdown 功能 + +> [!note]+ 双链 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 1. [[笔记文件名]]:链接到仓库内的另一篇笔记。使用方法:用双层方括号 [[]] 包裹笔记的文件名 (无需 .md 后缀)。示例:[[我的待办事项]] +> 2. [[笔记文件名#标题名]]:链接到另一篇笔记中的特定标题。使用方法:在文件名后加 # 和目标标题的文本。示例:[[Markdown 语法详解#10. 表格]] +> 3. [[笔记文件名|自定义显示文本]]:链接到另一篇笔记,但显示自定义的链接文字。使用方法:在文件名后加 | 和希望显示的文本。示例: [[2024-05-27 Daily Note|昨天的日记]] +> 4. ![[笔记文件名]]:将另一篇笔记的全部内容嵌入到当前笔记中。使用方法:与图片嵌入类似,但使用双层方括号,并以 ! 开头。示例: ![[常用代码片段]] +> 5. ![[笔记文件名#标题名]]:将另一篇笔记中特定标题下的内容嵌入。使用方法:在文件名后跟特定标题。示例: ![[会议记录#行动项]] +> 6. ![[笔记文件名#^块ID]]:嵌入笔记中被 \^块ID 标记的特定块(段落、列表项等)。使用方法:先在源笔记中,在你想要引用的段落或列表项的末尾添加一个块引用ID,格式为 ^yourBlockID (例如 ^task123)。然后在目标笔记中用 ![[源笔记文件名#^yourBlockID]] 来嵌入它。示例:在 "任务列表.md" 中: - [ ] 完成报告 ^reportTask,然后在当前笔记中嵌入: ![[任务列表#^reportTask]] +> ``` +## 双链 +注意:这里使用反斜杠,是为了让Obsidian不把他识别为一个双链,否则Dashboard就会被认为是一个双链,从而在关系图谱中看到这个Dashboard节点。 +内部链接: \[[Dashboard]] + +--- +> [!note]+ 标签 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 以井号 # 开头,后跟标签名称。标签名不能包含空格,可以用 - 或 _ 连接多词标签 (如 #读书笔记 或 #project-alpha)。标签可以放在笔记的任意位置,包括 YAML Frontmatter 中的 tags 字段。 +> ``` +## 标签 +标签: #dashboard #notes + +--- + +> [!note]+ 数学与公式 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> Obsidian 内置了对 KaTeX 的支持,用于渲染 LaTeX 数学公式。 +> $行内数学公式$:将公式嵌入到文本行中。 +> 使用方法:用一对美元符号 $ 包裹 LaTeX 公式。 +> $$块级数学公式$$:将公式在单独的块中居中显示。 +> 使用方法:两对美元符号包裹 +> ``` + +## 数学与公式 + +$$g=g_0 \frac{R^2}{\left( R + z \right)^2} = \frac{g_0}{\left(1 + z/R \right)^2} $$ + +其中, +$g$ = 指定距离处的相对引力。 +$g_0$ = \[[Surface Gravity |物体的表面引力]]。 +$R$ = 物体的半径。(通常是物体的赤道半径)。 +$z$ = 物体表面以上的距离。 + +--- + +> [!note]+ 引用块 +> ``` +> 注意:所有符号都是英文输入法下的符号 +> 使用方法: 引用块 (>) 之后紧跟 [!类型]。类型可以是 note, abstract, info, todo, tip, success, question, warning, failure, danger, bug, example, quote 等。 +> 可选标题**: 在 [!类型] 后可以添加自定义标题文本。 +> 可折叠**: 在类型后加减号 - (如 [!INFO]-) 可使标注默认折叠,加加号 + (如 [!INFO]+) 可使其默认展开 (通常默认就是展开)。 +> ``` + +## 引用块 (Callouts) + +> [!note]+ 笔记引用块 +> 这是一个笔记引用块... + +> [!warning]- 警示引用块 +> 这是一个警示引用块... \ No newline at end of file diff --git a/Collection/YAML用法.md b/Collection/YAML用法.md new file mode 100644 index 0000000..21cc06d --- /dev/null +++ b/Collection/YAML用法.md @@ -0,0 +1,252 @@ +--- +tags: + - yaml +aliases: + - yaml用法 +笔记类型: 永久笔记 +日期: 2026/4/17 +--- +**YAML (YAML Ain't Markup Language) 是一种以数据为中心、对人类友好的数据序列化语言。它因其简洁和高可读性而备受青睐,尤其是在配置文件和知识管理领域。** + +### 1. YAML的应用场景 +#### 作为Markdown知识笔记的元数据 +##### 什么是YAML Front Matter? + +- **定义:** 它是添加到文件第一行的一系列纯文本属性,用于在Markdown等文件中添加元数据。 +- **别称:** 也常被称为 front matter、页眉、前页、扉页、前言。 +- **作用:** 它是一种人类可读、文件级的元数据,为笔记本身添加了结构化的信息,使得软件可以基于这些信息进行强大的自动化处理,例如分类、查询和筛选。 + + +在Obsidian、Joplin等众多工具中,YAML Front Matter是核心功能。它为一篇笔记提供了超越其正文内容的“身份信息”。 + +**示例:** 在一篇Obsidian笔记的开头,你可以这样定义元数据。 + +```yaml +--- +title: "我的Obsidian使用技巧" +date: 2025-08-21 +tags: [Obsidian, 知识管理, YAML] +aliases: [Obsidian技巧, 如何使用Obsidian] +--- +``` + +#### 作为AI提示词的格式 + +当构建复杂的AI提示词(Prompt)时,需要一种能够清晰组织指令、变量和上下文的格式。YAML在这方面表现出色。 + +| 格式 | 优点 | 缺点 | 适用场景 | +| ------------ | ------------------------------------------------------------ | -------------------------------------- | -------------------------------------- | +| **YAML** | 结构清晰,可读性高,易于手写和维护,适合表达复杂的层级关系。 | 语法依赖严格的缩进,对新手不友好。 | 复杂的、多参数的、需要模板化的AI任务。 | +| **Markdown** | 自由流畅,接近自然语言,适合编写故事或对话型提示词。 | 结构性差,难以定义精确的配置参数。 | 文学创作、角色扮演、简单的问答。 | +| **JSON** | 机器解析极为友好,语法严格,不易产生歧义,是API交互的标准。 | 手写繁琐,括号和引号过多,可读性较差。 | 程序化的API调用,自动化工作流。 | + +#### 作为配置文件 + +YAML是许多现代软件和工具首选的配置文件格式,因为它能清晰地表达复杂的配置结构。 + +- **智能家居自动化:** 在流行的开源智能家居平台 Home Assistant 中,用户主要通过编辑YAML文件(如 configuration.yaml)来设置自动化场景。例如,“当太阳下山时,自动打开客厅的灯”或者“当传感器检测到湿度低于40%时,开启加湿器”这样的规则,都是通过YAML来定义的。 + +- **PC游戏的插件与Mod:** 许多PC游戏(尤其是沙盒类游戏如《我的世界》Minecraft)的服务器插件或Mod,都使用YAML文件作为配置文件。服务器的管理员或玩家可以通过修改这些 .yml 文件,来调整游戏规则、设置商店物品价格、或者自定义玩家加入时的欢迎信息,而无需编写任何代码。 + + +### 2. YAML的基础语法 +#### 核心规则 + +1. **格式**:采用“关键词: 值”的键值对形式(关键词 英文冒号 空格 值)。 +样例: +```yaml +views: + - type: table + name: 表格 + order: + - file.name + - file.fullname + - file.tags + - file.folder +``` +2. **空格与缩进**:YAML 的语法对缩进和空格**极其敏感**,这是其结构的核心。理解并遵守这些规则是正确编写 YAML 的关键。 + - **使用空格进行缩进**:通过空格缩进来表示数据的层级关系和嵌套。 + - **严禁使用 Tab 键**:只能使用空格进行缩进,绝不能使用 Tab 键。混合使用或单独使用 Tab 键都会导致解析错误。 + - **缩进需保持一致**:同一层级的元素必须左侧对齐(即保持相同的缩进量)。通常推荐使用 2 个或 4 个空格作为一级缩进。 + - **冒号和短横线后的空格**: + - 键值对的冒号 (:) 后面必须跟一个空格。 + - 列表项的短横线 (-) 后面必须跟一个空格。 + +#### 基本数据结构 + +YAML 主要由三种基本数据结构组成:纯量(Scalars)、序列(Sequences/Lists)和映射(Mappings/Dictionaries)。 + +##### 1. 纯量 (Scalars) + +纯量是单个的、不可分割的值,是 YAML 中最基本的数据单元。 + +- **字符串 (String)** + - 默认无需引号:my_string: Hello YAML + - 单引号 ('):不会转义特殊字符,所有内容视为字面量。 + - 双引号 ("):会转义特殊字符,例如 \n 会被解析为换行符。 +- **数字 (Number)**:包括整数和浮点数。 +- **布尔值 (Boolean)**:true 或 false。 +- **空值 (Null)**:使用 null 或 ~ 表示。 + +**示例代码:** +```yaml +# 字符串 +string_value: Hello YAML +quoted_string: "This is a string with a \n newline." + +# 数字 +integer_value: 1024 +float_value: 3.14159 + +# 布尔值 +is_active: true +is_enabled: false + +# 空值 +empty_value: null +another_empty: ~ +``` + +##### 2. 序列 (Sequences / Lists) + +序列是一组有序的值,类似于编程语言中的数组或列表。每个列表项由一个短横线 (-) 和一个空格开头。 + +**示例代码:** +```yaml +# 一个简单的水果列表 +fruits: + - Apple + - Orange + - Strawberry + +# 也可以使用行内(inline)格式 +fruits_inline: [Apple, Orange, Strawberry] +``` + +##### 3. 映射 (Mappings / Dictionaries) + +映射是键值对(key-value)的集合,类似于编程语言中的字典或哈希表。 + +**示例代码:** +```yaml +# 描述一个用户的基本信息 +user: + name: John Doe + age: 30 + email: john.doe@example.com + +# 也可以使用行内(inline)格式 +user_inline: {name: Jane Doe, age: 28} +``` + +#### 复合结构:数据嵌套 + +以上三种基本结构可以自由组合,形成复杂的数据结构。这是 YAML 强大功能的核心体现。 + +**示例代码:** +```yaml +# 一个用户列表,每个用户都是一个包含详细信息的映射 +users: + # 第一个用户 + - name: Alice + age: 28 + is_admin: true + roles: # "roles" 的值是一个序列 + - editor + - publisher + # 第二个用户 + - name: Bob + age: 35 + is_admin: false + roles: + - viewer +``` + +#### 多行文本 +**字面量块 `|`**:保留每一个换行。适合要“按原样呈现”的文本。 +```yaml +about: | + 第一行 + 第二行 + 第三行 +``` +解析后:`"第一行\n第二行\n第三行\n"`(注意末尾有 1 个换行,因为默认是clip-保留一个结尾换行(\n),但丢掉多余的尾随空行)。 + +**折叠块** `>`:把换行折叠为空格(空行保留为换行) +```yaml +about: > + 这一段 + 被写成了多行 + 但会折叠成一行显示 + + 空行用来分段 + 分段之间会出现真正的换行 +``` +解析后:`"这一段 被写成了多行 但会折叠成一行显示\n\n空行用来分段 分段之间会出现真正的换行\n"` +(你看到:单个换行被折成空格;空行保留为 `\n`;末尾仍有一个换行,因为clip-保留一个结尾换行(\n),但丢掉多余的尾随空行) + +#### 注释 + +使用井号 (#) 进行单行注释。从 # 开始到该行末尾的所有内容都会被忽略。 +```yaml +# 这是一个注释,它将被解析器忽略。 +key: value # 这也是一个行内注释。 +``` + + +### 3. YAML在Obsidian中的实践 + +在Obsidian中,YAML元数据是实现知识库从简单笔记集合升级为强大个人数据库的关键。它为每篇笔记赋予了结构化的“属性”,使得自动化管理和知识发现成为可能。 + +#### 从YAML Front Matter到“属性”视图 + +最初,YAML元数据需要手动在笔记顶端的`---`分隔符之间编写。为了降低使用门槛并提升体验,Obsidian推出了核心的“**属性**”(Properties)功能。 + +* **可视化界面**:你不再需要手动输入YAML代码,可以通过一个直观的界面在笔记顶部添加、编辑或删除属性。这个界面提供了文本、数字、日期、复选框和列表等多种属性类型,并会自动补全已存在的属性名和值,极大地保证了数据的一致性。 +* **源码对应**:你在属性界面上的所有操作,都会实时、准确地转换成笔记源文件顶部的标准YAML Front Matter。你随时可以切换到“源码模式”查看和编辑底层的YAML代码。 + +#### Obsidian原生支持的特殊属性 + +Obsidian会对一些特定的YAML属性赋予特殊功能,让它们与软件的核心功能深度集成。 + +| 属性 (Property) | 功能描述 (Description) | 格式要求 (Format Requirement) | +| :--- | :--- | :--- | +| `tags` | 定义笔记的标签,会自动被Obsidian的“标签面板”识别和索引。 | 必须是列表(Array)格式。 | +| `aliases` | 为笔记设置一个或多个“别名”,方便通过别名进行链接和搜索。 | 必须是列表(Array)格式。 | +| `cssclasses` | 为当前笔记应用一个或多个自定义的CSS样式片段,实现特定的视觉效果。 | 必须是列表(Array)格式。 | + +> **重要更新**:从Obsidian 1.4版本开始,官方统一并强制要求这些原生属性必须使用复数形式(`tags`, `aliases`, `cssclasses`),并且它们的值必须是列表格式。 + + +#### 设计你的个人化元数据系统 + +YAML的真正威力在于自定义。通过建立一套规范的元数据体系,你可以为自己的知识库量身打造强大的分类和检索系统。 + +| 实践建议 (Practice) | 目的与描述 (Purpose & Description) | 示例 (Example) | +| :--- | :--- | :--- | +| **规范命名** | 为了便于Dataview等插件查询,建议属性名全部使用小写,并用下划线代替空格。 | `creation_date` | +| **笔记分类** | 使用`type`或`category`属性来定义笔记的类型,这是进行分类查询的基础。 | `type: book` | +| **状态追踪** | 使用`status`属性来管理笔记的生命周期或项目的进度。 | `status: seedling` (想法) | +| **建立关联** | 除了使用`[[链接]]`,你还可以用属性来定义更明确的关系。 | `author: [[作者A]]` | + +#### 通过Obsidian插件,让你的元数据“活”起来 + +你精心维护的YAML属性,通过插件可以实现知识的自动化组织与呈现。 + +| 插件 (Plugin) | 核心功能 (Core Function) | 应用实例 (Application Example) | +| :--- | :--- | :--- | +| **Dataview** | 使用简单的查询语言(DQL)从整个知识库中筛选、排序和展示笔记,自动生成动态的笔记列表和表格。 | 创建一个“动态首页”,自动汇总所有 `status: in-progress` 的任务。 | +| **Bases** | (官方插件) 提供一个可视化的、类似Notion数据库的界面(表格、看板等)来浏览和批量编辑笔记的元数据。 | 以看板视图来管理所有 `type: project` 的笔记,并拖动卡片来改变它们的 `status` 属性。 | +| **Metadata Menu** | 极大地增强了属性的编辑体验,可以为属性预设可选值或创建依赖关系,实现更高效、规范的元数据录入。 | 为`status`属性设置固定的下拉菜单选项:"待办"、"进行中"、"完成"。 | + + + + +### 4. YAML的编辑器或格式化工具 + + +| 工具 | 类型 | 主要功能 | +| ----------------------- | -------------- | ------------------------------------------------------------------ | +| **VS Code + YAML 插件** | 桌面编辑器 | 语法高亮、自动补全、实时错误校验、代码折叠、格式化。 | +| **Online YAML Parsers** | 在线工具,例如[YAML Checker - The YAML Syntax Validator](https://yamlchecker.com/) | 快速验证YAML语法是否正确,进行格式化和美化,适合临时检查。 | +| **Prettier** | 代码格式化工具,例如[Prettier · Opinionated Code Formatter · Prettier](https://prettier.io/) | 通过插件支持YAML,可以在项目中统一代码风格,实现保存时自动格式化。 | \ No newline at end of file diff --git a/Template/AutoAdd.md b/Template/AutoAdd.md index 7b83501..cce283e 100644 --- a/Template/AutoAdd.md +++ b/Template/AutoAdd.md @@ -3,5 +3,6 @@ tags: - empty aliases: empty 笔记类型: 未分类 +: -[ ] 日期: <%tp.date.now("YYYY/M/D") %> ---