女儿小学三年级了,开始要写作文了。
上了一个月学,已经正经写过两次作文了。
或许是看我平常写稿的习惯,所以女儿也习惯了在我的电脑上,用豆包语音输入法写初稿、润色,定稿后再打印出来,誊写在老师要求的20×20文稿纸上。
之前打印,就是用Word随便打印了一个白纸黑字普通版,国庆想着是不是能增加点仪式感,按照文稿纸打印——突然发现Mac版的Word不似Windows,并没内置稿纸功能。而外部加载的模板,不太好用。
AI时代,自己动手丰衣足食。
正好最近因为用Quarto写电子书,顺带对于Typst这个新一代排版语言也越有了解,就像用它来实现。
问Gemini,Typst下是否有稿纸插件。Gemini先后两次给我推荐了两个,结果发现都不存在——这一代Gemini文字能力没退化,但幻觉实在有点厉害。
不过将错就错,让Devin的SWE-2模型,直接帮我写了一个宏,不但可以自定义输出文稿纸,还能设定标题、日期的自动居中,正文自动空两格,外加还有每100字的里程碑标记。
把作文打印出来,满满的仪式感。
文件下载
使用方法
-
把
lib.typ和yuangao-template.typ放在同一目录。 -
在
.typ文件开头写:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16#import "lib.typ": * #show: yuangao.with( cols: 20, // 每行20格 rows: 20, // 每页20行(共400格) grid-color: rgb("#70a174"), // 淡绿色方格 title: "作文题目", // 作文标题(自动居中排在第一行方格) date: "2026年10月7日", // 日期(可选,注释掉即可) paper-title: "文 稿 纸", // 顶部标题 show-word-count: true, // 右侧显示 100/200/300/400 字标记 title-in-grid: true, // 标题排在方格内(第一行) ) 这里填写第一段正文内容。每段开头会自动缩进两格,不需要手动输入空格。 这里填写第二段正文内容。标点符号会自动占用一个方格,并且自动遵循行首行末避头尾排版规则。 -
本地运行
typst compile yuangao-template.typ生成 PDF。也可以在VS code下安装Tinymist Typst插件,实时编辑预览。
特点
- 标准 20×20 方格:一页 20 行 × 20 列 = 400 格
- 淡绿色护眼格子:默认
rgb("#70a174"),可自定义颜色 - 自动排版:段首缩进两格、标点避头尾禁则、双位英数合占一格(如
A4) - 字数统计:右侧每 5 行标注 100/200/300/400 字
- 多页支持:超过一页自动分页并显示页码
- 空白稿纸生成:内置
yuangao-sheet函数可快速生成空白稿纸用于打印手写
示例效果

源码说明
lib.typ 是一个纯 Typst 宏包,不依赖外部包。核心逻辑包括:
parse-text-to-cells:把正文解析成 20×20 的格子二维数组,自动处理段落缩进和标点禁则render-yuangao-page:渲染单页稿纸(标题、格子、字数标记、页脚)yuangao:主入口函数,负责分页计算和整体排版yuangao-sheet:空白稿纸生成函数
如果你需要调整样式(比如改格子颜色、加田字格、加班级姓名栏),直接或让AI改 lib.typ 即可。