一点代码,
留住值得记忆的内容。
阅读源码、翻转卡片,在 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))?;Anki 的导入设置和本地编辑会影响更新结果。网页预览仅展示内容和笔记标识;实际卡片样式及复习方式由 Anki 决定。