ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用WorkBuddy+Obsidian打造公式教材与自动出题的备课生产线

用WorkBuddy+Obsidian打造公式教材与自动出题的备课生产线 在培训这行干了十年我最深的感触是备课和出题的时间永远比上课的时间多。尤其是有公式的教材——排版一处公式、校验一个符号、出十道配套题目每一件都是实打实的工时。后来我用 WorkBuddy 管项目节奏用 Obsidian 写教材、存题库、做自动出题把一条备课链路理顺成了“一次搭建、长期复用”的生产线。这套组合拳帮我省下的时间保守估计每周有四到六个小时。这篇就把我的整套落地方法拆开讲适合培训讲师、课程开发者、企业内部知识官以及所有被“公式教材 出题组卷”折磨过的人。1. 破局思路把教材开发和出题当成一条生产线1.1 为什么是“WorkBuddy Obsidian”这套组合先说痛点。大多数讲师的工作流是碎片化的教材在 Word 里公式要么用 MathType 要么截图题目散落在一堆 Excel 和旧试卷里组卷时靠人工去翻去凑。这个过程最大的成本不在“写”而在“找”和“排版”。公式教材还有一个特殊难点即便你写好了一章内容换个班型、调个课时整份讲义又要重新排版。我看到的热搜词很有意思WorkBuddy 的安装教程、缓存目录修改、项目搬迁Obsidian 的加标签、主题插件安装失败、飞书连接——这说明大家正在认真摸索“用工具重组工作流”而不是简单地把 Word 换成另一个 Word。我选 WorkBuddy 来做“管理面”选 Obsidian 做“生产面”逻辑是这样的WorkBuddy 解决“事情怎么排”教材开发的项目拆解、任务依赖、版本节点、交付时间全部可视化让备课不再靠脑子记截止日期。Obsidian 解决“内容怎么产”Markdown 源文件本地存储、LaTeX 公式原生渲染、标签和 Dataview 让题目可以被检索和抽取天然适合建立题库。两者结合解决“排课与内容的联动”每次新班开班在 WorkBuddy 里复制一个培训项目模板自动带出教材修订、题库抽取、组卷校对等子任务Obsidian 里对应章节和试卷文件同步更新。一句话总结我的选型标准管理工具要轻、要快、要能复制项目内容工具要本地优先、要能写公式、要能被程序化检索。Obsidian 恰好是全链路里最不容易被替代的一环因为题库一旦沉淀进 Markdown YAML就变成了结构化数据后续自动出题才有基础。1.2 整体流程设计做一次给长期用我建议不要一上来就搞工具配置先把流程画出来。我的固定流程分五步在 WorkBuddy 里为“某门课程开发”建项目拆出任务清单大纲评审、章节初稿、公式校对、案例补充、题库建设、试讲验证、排版交付。在 Obsidian 里按章节写教材公式用 LaTeX 语法录入例题和易错点用 Callout 标注。每写一个知识点顺手录入 3 到 5 道题放进统一题库目录用 YAML 标注题型、难度、知识点标签。组卷时不再手动挑题而是运行模板脚本按标签和难度随机抽题自动生成试卷和答案卷。考完把学员错误率最高的题目标记出来反馈给 WorkBuddy 的下一个迭代任务。这套流程的核心其实是“一次写多处用”。同一道题可以出现在随堂测里也可以出现在期中考试里区别只是抽取时的筛选条件。1.3 目录结构与命名规范先定规矩再干活Obsidian 里最容易翻车的就是“有库无结构”。我给一个可直接抄的目录方案培训项目/ ├── 00_项目索引.md ├── 01_教材大纲/ │ ├── C01-课程大纲.md │ └── C02-课时分配表.md ├── 02_分章教材/ │ ├── C01-需求分析基础.md │ ├── C02-系统设计方法.md │ └── C03-成本测算模型.md ├── 03_题库/ │ ├── Q-C01-001-单选题.md │ ├── Q-C02-001-计算题.md │ └── Q-C03-001-综合题.md ├── 04_试卷/ │ ├── P-期中-20240615.md │ └── P-随堂测-C01.md └── 05_教学复盘/ └── 复盘记录-2024Q2.md命名规则就三条教材文件用C章节号-主题便于排序和跨文件引用。题目文件用Q-章节号-序号-题型后面挂在 Obsidian 标签体系下。试卷文件用P-用途-日期每份卷子都有唯一文件名历史版本不覆盖。这个规范看着简单实际帮了大忙。我后续所有 Dataview 查询、Templater 随机抽题脚本都依赖文件名前缀和 YAML 标签来筛选。如果一开始不规划后面改起来成本极高。2. 用 Obsidian 搭建带公式的教材编写环境2.1 插件选型与配置哪些必须装、哪些建议装Obsidian 的核心是本地 Markdown但原生对公式渲染是不包的。所以第一步就是搞公式能力。我现在的插件清单如下按必要性排插件用途必要性MathLive / Better Math实时渲染 LaTeX 公式边写边看必须装Dataview按标签和 YAML 字段检索题目必须装Templater写模板脚本实现随机抽题组卷必须装Excalidraw画示意图、流程图导出 SVG/PNG 嵌入教材强烈建议Pandoc Plugin把 Markdown 导出成 Word/PDF公式转 OMML强烈建议QuickAdd快速捕获题目、快速建文件按需装Obsidian Git自动备份教材和题库版本强烈建议安装完重点配置两处。第一处是公式渲染MathLive 默认开启全部 Live 渲染即可但如果你用的主题把$符号转义了就会看到公式不出来的情况。第二处是 Dataview 开启 JavaScript 查询设置里把Enable JavaScript Queries打开否则后面我给的 dataviewjs 代码跑不了。有个细节很容易忽略中文字体下公式里的上下标和根号显示不清。建议在主题的 CSS 片段里把mjx-container的字号稍微调大一点或者直接换一个自带数学字体优化的主题。我在实际使用时发现默认主题下小字号公式在投影时会发虚后来把正文渲染字号从 16px 调到 18px投影效果立刻正常了。2.2 公式教材的写作规范行内、块级与推导过程公式教材和纯文字教材最大的不同是“公式也是正文的一部分”。我的写作规范是行内公式一律用$...$独立公式块用$$...$$推导过程的每一步单独成段落不写“显然可得”。举个例子成本测算模型里的一元二次方程求解在 Obsidian 里是这样写的对目标函数 $f(x)x^2-6x5$ 求根使用求根公式 $$ x\frac{-b\pm\sqrt{b^2-4ac}}{2a} $$ 代入 $a1$、$b-6$、$c5$得到 $$ x_11,\quad x_25 $$ 因此盈亏平衡点落在 $1$ 和 $5$ 两个单位产量处。这里有一个我踩过坑的细节LaTeX 内部不要有全角括号和全角空格。第一次写公式教材时我把中文全角逗号写进了$$环境结果渲染出来后面直接报错。后来养成了习惯公式内部一律用半角符号中文注释放在公式外面用\text{}包裹需要显示的短文字比如x_{\text{平衡}}。对复杂公式比如矩阵、分段函数、多行推导收藏几个常用代码片段可以事半功倍$$ \begin{cases} yaxb \\ ycxd \end{cases} $$ $$ \mathbf{A}\begin{bmatrix} a_{11} a_{12} \\ a_{21} a_{22} \end{bmatrix} $$ $$ \begin{aligned} S_n a_1a_2\cdotsa_n \\ \frac{n(a_1a_n)}{2} \end{aligned} $$这些片段我放在一个叫公式速查表.md的文件里每次写新章节遇到不常用的公式就打开复制改参数。看似笨办法实际是效率神器。2.3 排版导出从 Markdown 到能直接投影的教学讲义Obsidian 本身能看但学员拿到的必须是 PDF 或 Word。我的导出链路有两条PDF 链路先调整阅读视图的宽度和字号按章节打印成 PDF适合快速做课堂投影版。Word 链路用 Pandoc 插件导出.docx公式自动转成 Word 自带公式格式方便教学管理部门二次修改模板。Pandoc 导出有个前置要求插件会自动调用系统中安装的 Pandoc 程序所以你的电脑得装好。此外中文字体在导出时如果出现方块需要在导出设置里指定mainfont为系统中文字体比如SimSun或Microsoft YaHei。这个坑我帮两个同事都排查过几乎都是字体没指定导致的。教材导出还有一个实用技巧课堂讲义版和学生版要做两版。课堂版保留推导过程和课堂提问学生版把答案收敛掉只留练习。我不维护两套文件而是在 Markdown 里用 [!note]- 答案折叠块包住答案导出时写一个小脚本剥掉折叠块内容。虽然稍微折腾但比维护两份文件轻松得多。3. 题库沉淀与自动出题的完整实现3.1 题目标准结构YAML 元数据 题干 答案自动出题的前提是题库里的每一道题都有“可被程序识别的身份信息”。我的每道题文件长这样--- title: Q-C03-001 章节: C03-成本测算模型 知识点: 盈亏平衡分析 难度: 中等 题型: 计算题 考核维度: 应用 tags: - 题库 - C03 - 盈亏平衡 --- 某产品的固定成本为 $F50000$ 元单位变动成本为 $v20$ 元/件售价为 $p45$ 元/件。 要求 1. 计算盈亏平衡点产量 $Q^*$ 2. 若目标利润为 $30000$ 元计算需要达到的销量。 [!note]- 参考答案 盈亏平衡时 $Q^*\frac{F}{p-v}\frac{50000}{25}2000$ 件 目标利润时 $Q\frac{F\pi}{p-v}\frac{80000}{25}3200$ 件。YAML 里的字段就是后续自动出题的筛选条件。我常用的筛选维度有四个章节对应教材模块、知识点细粒度标签、难度简单/中等/困难、题型选择/计算/综合。章节和知识点一定要分开因为一个章节可以有多个知识点将来你可能会针对某个薄弱知识点单独出题这个设计能为你省很多事。我有段时间偷懒只打了tags不维护 YAML 的章节和知识点结果出题时 Dataview 查询只能按标签筛想按“第三章 中等难度”这种组合条件就变得很难。后来还是老老实实补齐了 YAML。这道题不值得取巧。3.2 用 QuickAdd 和 Templater 实现随机组卷随机组卷是我目前用得最顺的方案把“组卷”变成一个命令按下快捷键Obsidian 自动从题库里按要求抽取题目生成一份完整试卷文件。原理不复杂Templater 脚本读取题库文件夹下的所有 Markdown 文件按照 YAML 字段过滤随机抽取指定数量然后把题干拼接进一个新文件。这是我用在“随堂测”上的 Templater 脚本测试效果稳定%* const chapter C03; const difficulty 中等; const count 5; const files app.vault.getMarkdownFiles() .filter(f f.path.includes(03_题库)) .filter(f { const c app.metadataCache.getFileCache(f); return c c.frontmatter c.frontmatter.章节 chapter c.frontmatter.难度 difficulty; }); const picked files.sort(() Math.random() - 0.5).slice(0, count); tR # 随堂测验${chapter}难度${difficulty}\n\n; tR 总分${count * 10}分 建议用时${count * 5}分钟\n\n; for (const f of picked) { const content await app.vault.cachedRead(f); const body content.replace(/^---[\s\S]*?---/, ).trim(); const questionPart body.split( [!note]- 参考答案)[0].trim(); tR ---\n\n${questionPart}\n\n; } _%新建一个模板文件叫tpl-随堂测.md把上面代码贴到模板里然后在 Templater 配置里把该模板绑定一个快捷键。之后每次要组卷按一下快捷键Obsidian 会在当前路径创建一份含随机题的新文件。生成答案卷的思路类似把被截掉的 [!note]- 参考答案内容原样输出再把题目文件按顺序引出参考答案即可。我做成两个模板tpl-试卷和tpl-答案卷生成两份并排保存。这里有个重要的避坑点app.vault.cachedRead读出来的是文件最新内容但如果你刚往题库里加了题目还没触发缓存更新可能读取的是旧数据。我的解决方法是每次抽题前运行一次“重新扫描文件”动作或者在 Obsidian 的“文件与链接”设置里把检测文件变化的选项改成“快速检测”。实测下来把这个检测改成快速后脚本很少再读到旧内容。3.3 大模型辅助批量新题生成如果题库量不够只靠手工录入永远跟不上需求。我会用大模型做“初稿批处理”我做人工校验。流程如下从 Obsidian 导出某个章节的教材内容为纯文本或者直接复制 Markdown。把内容发给模型附上一段出题规则题型、难度分布、必须包含公式、答案必须附推导过程。让模型按约定格式批量输出题目一次性写入 Markdown 文件。人工过一遍放进03_题库目录补全 YAML 字段再跑随机组卷。这里最需要注意的是“公式准确性”。大模型生成的公式经常表面漂亮但物理意义不对。我要求模型每一步推导都写在text{}里而不是直接在公式里跳步然后我抽查边界条件。比如刚才盈亏平衡那道题我会验证代数结果是否能代回原始方程。大模型负责量人工负责质这是降本增效而不是甩手不管。批量生成后可以配合 QuickAdd 写一个“题目捕捉”宏选中一段教材文本运行宏后自动生成带 YAML 骨架的新题目文件再粘贴或微调内容。这个宏不复杂但能让录题速度提升一倍。4. WorkBuddy 侧的管理闭环与常见问题4.1 培训项目计划化管理任务、依赖与节点Obsidian 管内容那 WorkBuddy 管什么我的答案是管节奏、管交付、管版本。任何一门培训课程开发都不是“写完教材就结束”后面还有审核、试讲、修订、题库迭代一串事。我现在的习惯是开新课之前在 WorkBuddy 里建一个项目按阶段拆任务每条任务都写清依赖和交付物。参考任务拆解如下阶段任务项依赖项交付物规划课程大纲评审无大纲文档编写分章教材初稿大纲评审通过各章 Markdown 文件质检公式和案例校对教材初稿完成校对记录题库按章出题录入教材定稿题库 YAML 文件组卷随堂测和期中卷生成题库完成试卷和答案卷交付讲师讲义包归档试讲通过PDF/Word/母版每个任务我都会设置“前置任务”和“预计工时”。这样做的好处是当你同时开两门课时WorkBuddy 能自动显示当前哪些任务处于阻塞状态、哪些可以并行排期冲突一目了然。4.2 常见问题排查速查表下面是我和同事们在这套工作流里遇到最多的问题整理成速查表现象原因处理方式公式显示为源码未启用 MathLive或$被主题转义装插件在主题 CSS 中放行$PDF 导出中文字体方块Pandoc 未指定中文字体设置mainfont: Microsoft YaHeiObsidian 主题安装失败anuppuccin 这类社区插件市场网络不稳定或版本冲突手动下载安装包放入.obsidian/themes重启Templater 抽题报错缓存未更新“设置-文件与链接-检测文件变化”改为快速WorkBuddy 下载后是英文版未切换语言设置或偏好里改语言为简体中文重启生效WorkBuddy 缓存目录未改导致 C 盘爆红缓存默认在系统盘设置中把缓存目录改到非系统盘迁移后重启Windows 上 WorkBuddy 项目文件搬迁后数据不见未同步缓存与项目路径搬迁前导出项目包搬迁后导入保持新旧路径一致飞书消息想存进 Obsidian无中转通道用飞书 Webhook 或自建机器人转发到 Obsidian或借助第三方插件抓取微信 / 公众号文章不能直接剪藏到 Obsidian缺少剪藏入口使用浏览器剪藏插件生成 Markdown 后导入 Obsidian 对应目录这张表建议直接存到你的 Obsidian 知识库里遇事查表比自己翻设置快十倍。4.3 三道必看的坑第一个坑题库数量多起来之后文件名重复。最初我录题时偷懒题目文件叫题目1.md、题目2.md结果第二次组卷时脚本读到两个同名文件随机抽题就乱了。后来强制命名规则每个文件都有唯一编号这个问题再没出现过。第二个坑公式在 Obsidian 里显示正确但导出到 Word 后变成图片格式无法在 Word 里进一步编辑。如果你们单位有统一的排版规范建议优先用 Pandoc 导出导出的公式是原生 OMML可以在 Word 里改。如果你用的是普通浏览器打印成 PDF公式会变成不可编辑的位图后期修订时非常痛苦。第三个坑WorkBuddy 项目退档后忘了归档。培训项目结项后教材和题库还有下一轮使用价值不要因为“项目结束了”就把 Obsidian 里的目录删掉。我的习惯是 WorkBuddy 里建一个“归档项目区”结项项目移入归档区Obsidian 里的教材和题库继续保留作为下一期复训的素材库。内容资产是越积越厚的整理一次后面每次开班都在吃老本。5. 我的实际使用体会如果你正准备把这套流程引入自己的备课体系我给的最实在建议是先别追求一步到位。第一周只做两件事在 Obsidian 里建好教材和题库目录结构把公式插件和 Dataview 配好在 WorkBuddy 里建一个最简单的课程项目模板。一旦跑顺了再把随机组卷、大模型出题这些高阶操作加进来。工具只是加速器真正让你降本增效的是把教材、题库、组卷这条链路的每一步都变成标准动作。我个人这套组合用到现在最大的感受不是“变忙了”而是“不慌了”。课排得再密只要教材和题库在组一份随堂测就是按一下快捷键的事。这套方法后续还能无限扩展比如把上课案例、学员问答记录也沉淀进 Obsidian形成完整的教学资产库——那是另一篇文章的素材了。
返回列表