一点代码,
留住值得记忆的内容。

阅读源码、翻转卡片,在 Anki 中打开生成的牌组。网页预览与下载文件使用相同字段。

基础问答

西班牙语问候语,包含问题、答案和显式稳定 ID。简单的正反面卡片可从这里开始。

basic.rsRust 代码片段
let (front, back) = ("hola", "hello");
let mut project = Project::new("spanish")?.default_deck("Spanish");
project.add("es:hola", Note::basic(front, back))?;
let built = project.build(BuildOptions::to(output.join("spanish.apkg")))?;

Spanish
西班牙语 → 英语

hola

它是什么意思?
下载 spanish.apkg 1 条笔记 · 1 张卡片 · 0 个媒体文件

填空

使用 Anki 填空语法隐藏上下文中的一个单词。此笔记只有一处填空,因此生成一张卡片。

cloze.rsRust 代码片段
let text = "A sound's pitch depends on its {{c1::frequency}}.";
let extra = "More cycles per second, higher pitch.";
let mut project = Project::new("website-sound")?.default_deck("Sound");
project.add("sound:pitch", Note::cloze(text).field("back_extra", extra))?;
let built = project.build(BuildOptions::to(output.join("sound.apkg")))?;

Sound
补全句子

A sound's pitch depends on its […].

下载 sound.apkg 1 条笔记 · 1 张卡片 · 0 个媒体文件

媒体

把图片和可播放的音频与笔记一起打包。片段使用的听音训练笔记类型在完整源码中定义。

media.rsRust 代码片段
let (prompt, answer) = ("Name this pitch.", "A4, 440 Hz");
let picture = Media::file(output.join("waveform.svg"))?.with_export_name("waveform.svg")?;
let audio = Media::file(output.join("concert-a.wav"))?.with_export_name("concert-a.wav")?;
project.add(
    "sound:a4",
    model
        .note()
        .field("prompt", prompt)
        .field("answer", answer)
        .field("picture", picture.image())
        .field("audio", audio.sound()),
)?;
let built = project.build(BuildOptions::to(output.join("ear-training.apkg")))?;

Ear Training
听音训练

Name this pitch.

合成音的示意波形
下载 ear-training.apkg 1 条笔记 · 1 张卡片 · 2 个媒体文件

图片遮挡

带稳定键的矩形遮住细胞剖面图中的细胞核。下载牌组与此预览使用相同图像和遮罩。

occlusion.rsRust 代码片段
let image =
    Media::file(output.join("cell-anatomy.png"))?.with_export_name("cell-anatomy.png")?;
Ok(Note::image_occlusion(image)
    .mask(Mask::rect("nucleus", 296, 106, 240, 232))
    .build()?
    .field("header", "Cell anatomy")
    .field("back_extra", "Nucleus"))

Cell Anatomy
细胞结构

Which structure is hidden?

隐藏一处结构的动物细胞剖面图
下载 cell-anatomy.apkg 1 条笔记 · 1 张卡片 · 1 个媒体文件

一条笔记,两个版本。

第二次构建将答案从“hello”改为“hello; hi”。程序会与第一个包比较,确认笔记 ID 保持不变。

let comparison = project.compare(CompareOptions::against(&previous))?;
ensure!(comparison.policy().allows_publication());
let built = project.build(BuildOptions::to(&next).update_from(&previous))?;

稳定笔记 IDes:hola
正面

hola

背面

hello

试着修改内容。

比较结果: RISK.NOTE_CHANGED (low). 发布策略: 允许本次更改.

下载 v1下载 v2比较报告

请保留原始分发 APKG。导入设置与较新的本地编辑会影响更新。 更新指南

Anki 的导入设置和本地编辑会影响更新结果。网页预览仅展示内容和笔记标识;实际卡片样式及复习方式由 Anki 决定。