Posted in: Language, Mobile/iOS

记忆app anki

以前我用来记日语单词的软件叫做单语,由于它只有iOS版,没有电脑版,词汇一多了操作起来就非常不方便,而且鉴于它只有导入功能没有导出功能。有一些bug还无法修复。因此随着单词越来越多,越用越不方便。

昨天开始接触神器anki。简单记录一下:

安装

Windows、Mac的客户端在官网免费下载安装(mac 有 M1 编译版),iOS客户端在App Store上要收费(很贵,168元)。不想出钱的,可以去淘宝花2~3元利用共享账号安装。

账户同步

先在web上注册账户,然后去各个客户端登录账户。原则上,电脑上打开/退出app时就自动同步。但由于iOS没有“退出”的概念,所以只能自己多去手动点点。

各个客户端都可以开多个账户,但一个账户对应一个电子邮件,互不干扰。

针对日语单词的卡片模板

先说结论:记日语单词一定使用 Basic (optional reversed card) 这个模板。中文翻译为:问答题(同时生成翻转的卡片<可选>)

anki 这个app的名字实际上来自于日语单词「暗記(あんき)」的读音。日语单词存在假名的特殊性,因此有以下特殊场景:

  1. 正面写汉字、反面写假名和意思:看汉字回忆假名和意思。同时另一张:正面写假名、反面写意思:直接看假名回忆意思。例如:「慰める(なぐさめる)」。这就需要生成“翻转的卡片”。
  2. 只需要正面写汉字、反面写假名和意思,不需要反过来。这通常用于读音很短、同音字很多的单词。例如:「引く(ひく)」,毕竟读音ひく的单词太多了,没必要反过来记。
  3. 只需要正面写假名、反面写意思,不需要反过来。这通常用于无同音词、且汉字难些或基本不用的单词,例如:「いびき」,汉字「鼾」几乎不用。

一般的app想同时满足这三点几乎不可能。得亏anki的高度定制性,使得我可以自己写代码完成:

卡片1正面

 <!--
说明:
(1){{kanji:Front}}是单词的汉字写法(包括送假名)。如果单词没有汉字,则它的值就是假名。
(2){{tts ja_JP:kana:Front}}调用系统的发音功能。卡片在此处会显示一个播放按钮,可以发音。MacOS和iOS上都能用。
 -->
 <br>
 <br>
 <br>
 <div class="word">{{kanji:Front}}</div>
 <br>
 {{tts ja_JP:kana:Front}}
 <br>
 <br>
 <div class="tag">标签:{{Tags}}</div>

卡片1反面

 <!--
说明:
(1){{furigana:Front}}显示单词的振假名注音(如果单词没有汉字,则它显示假名自身)
(2)<a href="XXX"></a>这个链接可以链接到外部词典,我这里用的是weblio日中词典。
 -->
 {{FrontSide}}
 <hr id=answer>
 <div class="annotation">
 「{{furigana:Front}}」 <a style="text-decoration:none" href="https://cjjc.weblio.jp/content/{{text:kanji:Front}}">此处画一个你自己喜欢的字符</a><br>
 <br>
 {{Back}}
 </div>

卡片2正面

 <!--
说明:整个区域被{{#Add Reverse}} {{/Add Reverse}}标记包裹,即如果Add Reverse这一项为空,则不生成卡片2.
 -->

 {{#Add Reverse}}
 <br>
 <br>
 <br>
 <div class="word">{{kana:Front}}</div>
 <br>
 {{tts ja_JP:kana:Front}}
 <br>
 <br>
 <div class="tag">标签:{{Tags}}</div>
 {{/Add Reverse}}

卡片2反面

 {{FrontSide}}
 <hr id=answer>
 <div class="annotation">
 「{{furigana:Front}}」  <a style="text-decoration:none" href="https://cjjc.weblio.jp/content/{{text:kanji:Front}}">此处画一个你自己喜欢的字符</a><br>
 <br>
 {{Back}}
 </div>

CSS(卡片1和2的正反面都一样)

 .card {
   font-family: arial;
   font-size: 20px
   text-align: center;
   color: blue;
   background-color: white;
 }
 

 .card1 {
   color: green;
 }
 

 .word {
   font-size: 60px;
 }
 

 .annotation {
 font-size: 30px;
 }

小提示

局部振假名

比如有个单词叫做「お父さん」,按常规的写法得写:お父さん[おとうさん]。这样子很难看,实际上我们只需要给“父”一个字注音「とう」即可。方法是:在“父”的前面加一个英文空格,然后紧跟着它写中括号和假名,就是:お 父[とう]さん。(PS:我反而觉得这样子很麻烦,因为需要不停地切换输入法,所以后来我干脆用Japanese Text Cleaner插件自动处理得了。)

在背面插入表格

可以直接从excel复制到背面框(当然需要在PC端操作,txt导入估计够麻烦),设置以下CSS就行:

table {
 width: 100%;
 border-collapse: collapse;
 text-align: left;
}
 
td {
 font-size: 15px;
 color: black;
 border: 1px solid;
}

声调

这需要使用一个插件:Japanese Pitch Accent。它会自动根据你的词汇生成svg格式的声调图,没有img图片,很轻巧。

然而问题很快就来了:它需要指定 Expression 和 Reading 字段,お 父[とう]さん这样肯定是不行的,它遇到空格就会自己终止。那就自己添加字段吧(这两个字段只作为辅助,不在卡片上显示)。

于是最后就变成这样:输入时只输入汉字(お父さん)和假名(おとうさん),然后用Japanese Text Cleaner插件自动生成振假名字符串作为最终的 Front(お 父[とう]さん),用Japanese Pitch Accent插件根据汉字字段和假名字段生成音调。最后展示一下带有声调的卡片背面图。

夜间模式

iOS版(AnkiMobile)有随系统自动夜间模式功能。但这只能反转系统内置的文字颜色。卡片里面那些自定义的HTML需要自己用CSS反转,CSS为nightMode这个类别,例如:

.nightMode td {
  color: white;
  border: 1px solid white;
}

.nightMode svg > text { fill: #fff !important; }
.nightMode svg > path { stroke: #fff !important; }
.nightMode svg > circle[r="5"] { fill: #fff !important; }
.nightMode svg > circle[r="3.25"] { fill: #2d2d2d !important; }

用正则表达式搜索片假名单词

虽然每次输入单词时直接附上一个标签(例如:片假名)比较方便,但毕竟总有遗漏的时候。好在anki支持正则表达式搜索。例如片假名的Unicode字符范围是U+30A0–U+30FF,则用front:re:[\u30A0-\u30FF]就可以搜到所有的片假名单词。

Comments (8) on "记忆app anki"

        1. Safari 14.1 iPhone iOS 14.5

          我回去再设置一下,以前是对国外启用了cdn,国内不启用,所以会有区别。

        2. Safari 14.1 Mac OS X  10.15.7

          请现在再试一试?之前是因为CDN(面向国际)的证书有问题,所以才会非常诡异。现在两者应该都OK了,无论国内还是国际。

  1. Safari 16.0 Mac OS X  10.15.7

    Anki 非常强大,几乎可以用来记任何知识~ 我在大学的时候就付费购买了 iOS 版,当时开发者是说 iOS 用户的购买力普遍要强于 Android 和 Windows 平台用户,所以就只对 iOS 用户进行收费……

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注