Obsidian插件:用Obsidian进行Anki制卡
Obsidian插件:用Obsidian进行Anki制卡
Obsidian和Anki都是广受欢迎的软件,两者联动需要依靠一些技巧和配置。本文将详细介绍如何使用Obsidian_to_Anki插件,将Obsidian中的笔记批量导入到Anki中。
概述
Obsidian_to_Anki是一款Anki集成插件,旨在高效地批量导出。该插件支持用户自定义的闪卡语法,适用于Obsidian的markdown语法。它可以从文本或markdown文件中添加闪卡到Anki,并支持标签、自定义卡片类型、更新文件中的卡片、自定义语法等功能。无论是作为Obsidian插件还是作为Python脚本运行,都可以使用该插件。该插件解决了批量导出闪卡的问题,适用于需要将大量内容导入Anki的用户。
安装准备
- Anki端:需要安装anki connector插件
- Obsidian端:在社区插件市场里安装Export to Anki(原名:Obsidian_to_anki插件)
Obsidian_to_anki插件配置要点
准备工作
在以上两个插件均安装完成后,可先运行下“Obsidian_to_anki”插件中 Action 里的“Regenerate”,如描述所示,是将 anki 里的卡片类型给读取至插件中。
如下图所示,左侧为 anki 里的卡片形式,读取后,右侧为插件里的样式
核心设置:卡片的语法形式
注意,本教程仅以最基本的“问答题”进行说明。
在图示红框处输入内容:
^#{4}\s(.+)\n*((?:\n(?:^[^\n#].{0,2}$|^[^\n#].{3}(?<!<!--).*))+)
上述正则表达式语法的解释:仅对四级标题及对应内容进行制卡。
拟要实现的功能为:
- 四级标题,对应:anki 的卡片问题
- 四级标题下的内容,对应:anki 的卡片答案
注意:以上只是个人的偏好,以四级标题为卡片问题,在我的笔记体系里有两个好处:
- 可以在目录里直观看到一篇笔记里有几个问题卡片
- 方便在别的笔记里进行标题级引用(即对卡片问题进行引用,虽然后面实质上用的也不多)
附一个效果图:
其他设置
解释:
- 在 anki 中增加可以跳转回 ob 的链接
- 美化 ID comments 的显示
- 增加对笔记中标签的读取
Obsidian与Anki的联动方式
Obsidian里的基本制卡形式
Anki里的表现形式
- 牌组级的表现形式
- 卡片级的表现形式
经过以上三步,已经可以正常通过ob批量做anki卡片了。
接下来是一些关于美化anki卡片或提高效率的做法,有时间建议继续往下看。
进阶
Anki里的卡片样式美化
一个合适于自己的高亮体系可以促进自己刷卡的效率,推荐做适量的修改。但不建议花太多时间在美化上面,毕竟内容才是最重要的。
另外这是我自己作卡时,对高亮体系的约定,供参考:
- 加粗:关键词
- 斜体:用于句首,可以理解为卡片的结构化写法
- 高亮:简记的形式——记忆法的延伸
- 内容断行:先回车,然后“空一格”,然后再回车,这样就可以在卡片中进行内容的分隔(这个没有什么特别的说法,单纯是因为插件代码就是这么写的)。
以下是一个示例:
以下介绍anki中基本的CSS代码编写方式,首先在anki的页面点击“Browse”
关键点:找到Anki卡片样式的html格式对应的是什么标签,然后进行修改
快捷键:ctrl+shift+x
然后会发现:比如obsidian to anki里输出的是strong及em(对应加粗及斜体的样式)。
按下图进行样式的替换
发一些代码如参考:
.card {
font-family: arial;
font-size: 20px;
text-align: left;
color: black;
background-color: white;
}
em {
#color:white;
background-color: #69E147;
border-radius: 5px;
padding: 2px 5px;
}
strong {
color:red;
font-weight: bolder;
text-shadow: 2px 2px 5px #ffe600;
}
code {
color:black;
font-weight: bolder;
text-shadow: 2px 2px 5px gray;
}
mark {
border-radius: 5px;
padding: 2px 5px;
}
blockquote {
background-color: #ECECEC;
padding: 2px 5px;
border: 2px solid #7F7F7F;
border-radius: 5px;
}
好的,愉快地刷起卡片吧。
关于四级标题的快速输入
不知道大家会如何快速打开四个#号,是通过自定义ob快捷键来设置,如下图:
还是自己连续打四个#号?
我说下我的方法:自定义输入法的短语设置
mac端,清歌输入法,在“用户词库”这里进行常用符号的输入,甚至包括[[这样的快捷符号,主打一个偷懒。
如下图所示,我直接输入kk,再按下空格键就可以了,在输入上非常的快捷方便。
通过Alfred快速跳回ob对应卡片,进行卡片修改
一个问题:复习anki时,如何更方便地定位在Obsidian中的位置,以便进行修改?
注意:本节方法适用于mac,windows应该可以通过quicker这个软件实现,期待其他网友进行分享
在我的笔记体系中,有一类就是专门的卡片笔记,如下面几个图所示:
对应的anki问题如下所示:
那么在用anki进行复习时,如何可以快速的定位到相关问题以便修改呢?
我是通过alfred这个软件实现了跳转的功能。
操作方式,在anki时复习时,先点击超链接,跳转到对应的Obsidian笔记中
以下是在两个软件中具体的设置方法:
其中,alfred在本文写时的版本号是:5.1.2
在alfred中的设置如下:
在Obsidian中的设置如下:
好了,继续愉快地刷卡片吧
增加对卡片标题的编号,以便手机端进行快速定位
接上一节,用Alfred来进行直接的跳转,那如果在手机端呢?
目前没有特别好的一键跳转的方式,但可以借助给卡片标题进行编号,来相对快速地定位到卡片标题。
需要Obsidian插件配合:number-headings-obsidian
相关的设置如下图所示:
实现的效果图如下图所示(mac端),右侧边栏为目录大纲
手机端效果图如下图所示:
如何删除所有文章中的anki的ID
目的:为了重新整理下anki里的卡片
具体操作方式:用vs code里的搜索功能,对文件夹里的所有文件进行批量删除ID编码
实现Obsidian与anki多级标签的联动
不知用obsidian to anki的小伙伴有没有注意过,在卡片里写中文标签是不能被正常读取的,更不要提多级嵌套的标签实现了。但其实通过对源文件进行修改,是可以实现的。
先看下面的图片效果
因为最新版的obsidian to anki插件还没有更新(github的代码已经提交),故要使用本节功能要对这个插件源代码进行修改。
步骤如下:
- 定位到:obsidian vault (就是你的笔记库),如: ~/Obsidian/
- 找到插件所在文件夹,通常类似于: ~/Obsidian/.obsidian/plugins/obsidian-to-anki-plugin,这个文件可能是被隐藏的,需要你自己显示隐藏文件
- 打开main.js文件,并查找关键词:OBS_TAG_REGEXP。先对老的语法进行替换,新语法如下(这是第一处),具体功能就是增加对字宣传教育
const OBS_TAG_REGEXP = /#([\p{L}\p{N}\p{Emoji}\p{M}_-\uFF0C/]+)/gu;
如下图所示:
继续对这个OBS_TAG_REGEXP进行搜索,对下图进行代码进行替换(这是第二处)
再次继续对这个OBS_TAG_REGEXP进行搜索,对下图进行代码进行替换(这是第三处)
其中第二处、第三处的代码是一致的,如下:
if (data.add_obs_tags) {
for (let key in template["fields"]) {
for (let match of template["fields"][key].matchAll(OBS_TAG_REGEXP)) {
let formattedTag = match[1].replace(/\//g, "::"); // 添加这行代码来替换标签
this.tags.push(formattedTag); // 修改后的标签被添加到数组
}
template["fields"][key] = template["fields"][key].replace(OBS_TAG_REGEXP, "");
}
}
最后,一个问题
我在想是不是将main.js这个文件直接放在社区里,然后方便想要尝鲜的人直接进行下载替换就可以?