Community图像github.com

AnisAbdellatif/typst

编写、编辑、调试、编译和打包 Typst (.typ) 文档——论文、报告、论文、简历、信函、幻灯片、海报、数学笔记、数据驱动文档。涵盖标记/数学/代码语法、set/show 规则、布局、表格、图形、参考文献、内省(计数器/状态/查询)、数据加载、PDF/HTML/PNG/SVG 导出、PDF/A 和 PDF/UA 可访问性、CLI(compile/watch/eval/init/fonts)、模板、Typst Universe 包以及 LaTeX/Markdown 转换。

typst 是什么?

该技能提供了全面的 Typst 文档处理能力,涵盖从语法到导出的全流程。它支持 Typst 0.15.x 版本,并警告训练数据可能过时(0.11–0.13 版本),建议在不确定时查阅 `references/api-signatures.md` 或编译探针。技能详细描述了标准工作流程:澄清输出格式、从骨架或示例开始、编写文件、编译检查,以及格式化。核心内容包括一套详细的参考文件体系,涵盖语法与脚本、样式与布局、文档模型、数学、可视化、内省、数据与 IO、导出与 CLI、幻灯片、模板与包、迁移以及调试。技能特别强调了十个常见陷阱,例如 set/show 规则的作用域、`context` 的必要性、闭包中变量的只读性、包版本管理以及 0.15 版的移除项。此外,还提供了快速习语、编译速查表和多个实际示例(包括备忘录、报告、学术论文、数据报告、模板、可访问性文档、双目标输出、幻灯片和信函),并带有脚本用于代码片段验证和包搜索。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AnisAbdellatif/skills/tree/main/skills/typst

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

typst 是做什么的?

Typst 是一个基于标记的排版系统,内置脚本语言。单个二进制文件可将 .typ 编译为 PDF(默认)、PNG、SVG、HTML(实验性)或多文件包(实验性)。本技能针对 Typst 0.15.x(已验证至 0.15.1);附注中会标明旧版本中不同的行为。

关于 Typst 的训练数据通常过时(0.11–0.13 版本)。当不确定某个函数、参数或默认值时,请查阅 references/api-signatures.md,然后编译探针(typst eval '<expr>' 或 5 行文件),而不是猜测。

工作流程

  1. 明确输出:PDF(默认)、HTML、PNG/SVG、可访问 PDF(PDF/UA)、存档 PDF(PDF/A)?页面大小、语言、字体、引用样式、模板/期刊?
  2. 从骨架(见下文)或 examples/ 开始。对于期刊/论文/简历/幻灯片,首先搜索包:python3 scripts/search-packages.py "ieee paper"(参见 references/packages-and-ecosystem.md)。
  3. 编写文件:将 set/show 规则和导入放在顶部,内容放在下方。使用 #include 和 #import 拆分大型项目。
  4. 编译和检查:typst compile main.typ — 读取诊断信息(它们包含行:列和提示)。通过 PNG 进行视觉验证(typst compile main.typ 'p-{p}.png'),或通过 typst compile main.typ - -f html --features html / pdftotext 进行文本验证。详细信息见 references/pitfalls-and-debugging.md。
  5. 格式化(如果可用):typstyle -i file.typ。仅当差异仅限于您自己的编辑时。
  6. 报告哪些文件已创建/更改以及如何重建。

最小骨架

#set document(title: "My Document", author: "Name")
#set page(paper: "a4", margin: 2.5cm, numbering: "1")
#set text(font: "New Computer Modern", size: 11pt, lang: "en")
#set par(justify: true, leading: 0.65em)
#set heading(numbering: "1.1")

#title()

= Introduction <intro>
Typst supports *bold*, _italic_, `raw`, math $E = m c^2$ and references like @intro.

== A subsection
#lorem(30)

$ integral_0^1 x^2 dif x = 1/3 $

始终安全的默认值:#set text(lang: "...")(断字、引号、补充、可访问性)、#set document(title: ...) + #title() 用于可见标题、#set par(justify: true) 用于正文。

60 秒语法速览

模式输入方式示例
Markup(默认)—= Heading, *strong*, _emph_, - item, + numbered, / Term: desc, @label, <label>
Code(代码)#(一个表达式)或 #{ ... } 块#let x = 3, #f(1)[body], #if a [yes] else [no], #for i in range(3) [#i ]
Math(数学)$...$($ x $ 带空格 = 独立行)$a^2 + b_i$, $sum_(i=1)^n i$, $ vec(1, 2) $
Content block(内容块)代码内使用 [...]#box[hi], let c = [*x*]
  • 在代码中,不要重复 #:#figure(image("a.png"), caption: [Hi])。在 [...] 内容块内部,您会回到 markup 模式:[Total: #x]。
  • 数组 (1, 2),字典 (a: 1, b: 2),空 () / (:),单元素 (1,)。没有元组。使用 .at(i) 索引,而不是 [i]。
  • 命名参数使用 :(f(width: 2cm));= 仅在 let/代码内是赋值。
  • 字符串 "...",内容 [...],原始 `...`。使用 str(x)、[#s]、eval(s, mode: "markup") 进行转换。
  • 注释:// line,/* block */。使用 \ 转义特殊字符(\#、\$、\@、\*、\_、\<);Unicode \u{1F600}。
  • 长度单位:pt mm cm in em、fr(分数)、%、角度 deg rad。auto 和 none 是值。
  • set = 从这里开始为某个元素设置默认参数;show = 重新样式化/替换元素。context 是读取样式/计数器/位置所必需的(参见 references/introspection.md)。
  • 路径:仅使用正斜杠(0.15 版本)。"/x.typ" 是项目根目录相对路径(默认根目录:主文件所在目录;使用 --root 更改),"x.typ" 是当前文件相对路径。
  • 方法语法随处可见:"abc".len()、(1,2,3).map(x => x*2)、rgb("#f00").lighten(30%)。

查阅指南

需求查阅
语法、类型、运算符、字符串/数组/字典方法、模块、闭包、context 基础references/syntax-and-scripting.md
set/show 规则、选择器、页面设置、文本、段落、块、网格、分栏、对齐、间距、定位、变换references/styling-and-layout.md
标题、列表、图形、表格、参考文献、脚注、大纲、引用、书目/引文/CSL、编号、链接、元数据references/document-model.md
方程、数学语法、符号、矩阵、对齐、字体、编号references/math.md
形状、曲线、图像、颜色、渐变、填充、描边、专色references/visuals.md
计数器、状态、query、locate、metadata、within、布局收敛、页眉、measure/layoutreferences/introspection.md
CSV/JSON/YAML/TOML/XML/CBOR、read、bytes、sys.inputs、eval、WASM 插件、数据驱动文档references/data-and-io.md
CLI 标志、字体、PDF/A/UA、可访问性、HTML、包、PNG/SVG、typst eval、CI/可重现构建references/export-and-cli.md
幻灯片(Touying/Polylux、动画、讲义、演讲者备注、pdfpc)references/slides.md
模板、typst.toml、发布包、Universe 包选择(cetz, fletcher, touying, codly, ...)、编辑器工具references/templates-and-packages.md、references/packages-and-ecosystem.md
LaTeX → Typst 转换、Markdown/pandoc 转换、从 0.11–0.14 升级references/migration.md
错误、警告、探针、视觉验证、性能、常见陷阱references/pitfalls-and-debugging.md
每个元素的确切参数/默认值(已验证至 0.15.1 源代码)references/api-signatures.md
即编即用的入门文件examples/*.typ

主要陷阱(写作前请阅读)

  1. set/show 规则向前应用,且仅在其作用域内生效;将它们放在应影响的内容之前。[...]/{...} 内的 set 随块结束。
  2. 读取任何依赖于位置/样式的内容需要 context:#context counter(page).get()、#context text.size。否则:"只能在上下文已知时使用"。
  3. 闭包捕获的变量是只读副本;通过 fold、单个代码块内的循环、state 或 counter 进行累积。
  4. # 只需要一次;在标记中,对于包含运算符的表达式,使用 #(a + b);#f(x).g 有效,但 #f (x)(空格)不会调用。
  5. 数学不是文本:多字母单词是符号/变量(alpha、sin);将文本写作 "text" 或 upright(...)。单个字母是斜体变量。
  6. 字符串不是内容:标题主体是内容;使用 .body、str() 或辅助函数 to-string(参见语法参考)获取文本。
  7. 字体:只有已安装/嵌入/--font-path 的字体可用;未知字体名仅会警告并回退。使用 typst fonts 列出。对于可变字体,省略名称中的 "Variable"/"VF"(0.15 版本)。
  8. 包使用精确版本导入:#import "@preview/cetz:0.5.3" — 请查阅 Typst Universe(scripts/search-packages.py)获取最新版本,而不是依赖记忆。包可能落后于新编译器。
  9. 0.15 版本的移除项:path() → curve()、pattern → tiling、pdf.embed → pdf.attach、*.decode(...) → 将 bytes 传递给 json(...) 等、typst query → typst eval、路径中不允许反斜杠。
  10. HTML/包导出是实验性的,需要 --features html / --features bundle。

快速习语

// 可重用模板:使用函数和 show 规则
#let conf(title: none, authors: (), body) = {
  set page(margin: 2cm)
  set par(justify: true)
  align(center, text(17pt, weight: "bold", title))
  v(1em)
  body
}
#show: conf.with(title: [My Paper])

// 为某个标题级别设置样式
#show heading.where(level: 1): set text(navy)
#show heading.where(level: 1): it => block(above: 1.5em, below: 1em, it)

// 交叉引用和图形
#figure(table(columns: 2, [A], [B], [1], [2]), caption: [Data]) <tab:data>
See @tab:data.

// 数据驱动内容
#for (name, score) in (("Ann", 3), ("Bo", 5)) [- #name: #score]

// 从 CLI 运行时输入:typst compile --input mode=draft main.typ
#let draft = sys.inputs.at("mode", default: "final") == "draft"

编译速查表

typst compile main.typ                 # → main.pdf
typst compile main.typ out.pdf --root .
typst compile main.typ 'page-{0p}.png' --ppi 144
typst watch main.typ                   # 更改时重新编译
typst eval 'calc.pow(2, 10)'           # 计算表达式,JSON 输出
typst eval --in main.typ 'query(heading).len()'
typst init @preview/charged-ieee       # 从模板创建新项目
typst fonts --variants                 # 已安装字体

示例(均在 0.15.1 上编译)

文件展示内容
examples/memo.typ简短备忘录,标题网格,简单样式
examples/report.typ标题页、目录、页眉、图形/表格/脚注、show 规则
examples/academic-paper.typ (+ refs.bib)方程、定理环境、交叉引用、引文
examples/data-report.typ (+ data.csv)CSV → 表格、计算列、--input、简单形状柱状图
examples/template.typ + template-usage.typ可重用模板函数 + 组件
examples/accessible.typPDF/A-2a + PDF/UA-1(--pdf-standard a-2a,ua-1)
examples/dual-target.typ同一源文件 → PDF 和 HTML(context target()、html.*)
examples/query-export.typmetadata + typst eval 结构导出
examples/slides-plain.typ、examples/letter.typ无包的幻灯片和正式信函
examples/packages-demo.typcetz、fletcher、lilaq、theorion、codly(锁定版本,已验证)

脚本

  • scripts/check-snippets.py FILE.md… — 编译每个 ```typ 代码块(使用 ```typ-x 标记仅供说明/不可编译的块)。在您编写的任何包含 Typst 的 Markdown 上运行。
  • scripts/search-packages.py "keywords" [--category cv] [--name cetz --versions] — 查询 Typst Universe 索引以获取当前包名称/版本。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能