用 Rust 构建第一个 Anki 牌组
从一段简短的 Rust 程序,到可以在 Anki 中打开的西班牙语卡片。
当笔记已经保存在脚本、数据集或一组文件中时,生成 Anki 牌组可以让内容编写过程更容易重复。源文件可以在 Git 中审阅,每次导出都是可再次执行的一步。
从一个单词开始:hola。我们希望卡片正面显示西班牙语问候语,背面显示其英语含义。
完整程序
这是仓库中的最小 Rust 示例:
use ankiforge::{BuildOptions, Note, Project};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut project = Project::new("spanish")?.default_deck("Spanish");
project.add("es:hola", Note::basic("hola", "hello"))?;
let output = project.build(BuildOptions::to("spanish.apkg"))?;
println!("{}", output.artifact().path().display());
Ok(())
}Project::new("spanish") 创建命名空间,Note::basic("hola", "hello") 创建 Basic 笔记,project.add("es:hola", note) 分配稳定键,build(BuildOptions::to(...)) 写出包。
build 只在成功后返回 BuildOutput。? 运算符传播类型化失败,让脚本能够以错误退出。
安装与运行
按当前入门指南安装公开包并执行运行命令。若要在自己的项目中使用同一程序,参考集成到应用。
导出后,将 spanish.apkg 导入 Anki,显示第一张卡片的答案。
如果想先检查结果,本站的Basic 示例也提供可下载包。
为笔记指定身份
字符串 es:hola 是 spanish 命名空间内显式的稳定笔记键。它标识是哪条笔记,与答案的措辞无关。之后可以把“hello”扩展为“hello; hi”,同时保持相同 ID。
每条逻辑笔记使用不同 ID。如果源数据已有词汇条目 ID 等持久键,就可以从它开始。不要仅根据将来可能编辑的文本派生身份。
更新已分发牌组还需要发布历史。保留原始旧包,并遵循文档中的更新流程。
从一条笔记扩展
另一句问候语可以创建为另一条 Basic 笔记,并使用新键添加。句子中的缺失单词可以使用Cloze 笔记。更丰富的卡片可通过项目 API 定义字段和模板,并将图片或音频与笔记一起打包。