问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Obsidian插件:用Obsidian进行Anki制卡

创作时间:
作者:
@小白创作中心

Obsidian插件:用Obsidian进行Anki制卡

引用
1
来源
1.
https://pkmer.cn/Pkmer-Docs/10-obsidian/obsidian%E7%A4%BE%E5%8C%BA%E6%8F%92%E4%BB%B6/obsidian-to-anki-plugin/

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}(?<!<!--).*))+)  

上述正则表达式语法的解释:仅对四级标题及对应内容进行制卡。

拟要实现的功能为:

  1. 四级标题,对应:anki 的卡片问题
  2. 四级标题下的内容,对应:anki 的卡片答案

注意:以上只是个人的偏好,以四级标题为卡片问题,在我的笔记体系里有两个好处:

  1. 可以在目录里直观看到一篇笔记里有几个问题卡片
  2. 方便在别的笔记里进行标题级引用(即对卡片问题进行引用,虽然后面实质上用的也不多)

附一个效果图:

其他设置

解释:

  1. 在 anki 中增加可以跳转回 ob 的链接
  2. 美化 ID comments 的显示
  3. 增加对笔记中标签的读取

Obsidian与Anki的联动方式

Obsidian里的基本制卡形式

Anki里的表现形式

  1. 牌组级的表现形式
  2. 卡片级的表现形式

经过以上三步,已经可以正常通过ob批量做anki卡片了。

接下来是一些关于美化anki卡片或提高效率的做法,有时间建议继续往下看。

进阶

Anki里的卡片样式美化

一个合适于自己的高亮体系可以促进自己刷卡的效率,推荐做适量的修改。但不建议花太多时间在美化上面,毕竟内容才是最重要的。

另外这是我自己作卡时,对高亮体系的约定,供参考:

  1. 加粗:关键词
  2. 斜体:用于句首,可以理解为卡片的结构化写法
  3. 高亮:简记的形式——记忆法的延伸
  4. 内容断行:先回车,然后“空一格”,然后再回车,这样就可以在卡片中进行内容的分隔(这个没有什么特别的说法,单纯是因为插件代码就是这么写的)。

以下是一个示例:

以下介绍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的代码已经提交),故要使用本节功能要对这个插件源代码进行修改。

步骤如下:

  1. 定位到:obsidian vault (就是你的笔记库),如: ~/Obsidian/
  2. 找到插件所在文件夹,通常类似于: ~/Obsidian/.obsidian/plugins/obsidian-to-anki-plugin,这个文件可能是被隐藏的,需要你自己显示隐藏文件
  3. 打开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这个文件直接放在社区里,然后方便想要尝鲜的人直接进行下载替换就可以?

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号