XCPC 算法模板库:按主题分章(图论、数论、数据结构、几何……),原生 Typst 编写,直接编译成 PDF。
部分内容源自以下公开模板库,不逐条对应:
- hh2048/XCPC(WIDA 打印稿)——早期 md 底本的主要来源;部分修补对齐其 v1.8.8
- fstqwq/Nemesis(上海交大 2024 WF 打印稿)——虚树板子、网络流建图套路
- SMU_inch 板——二维几何章的自包含板子
main.typ— 入口:章清单(#include)、封面与目录、页码编排theme.typ— 视觉层:字体、标题、代码块、页眉页脚等全部版式规则prelude.typ— 宏层:复杂度记号#O(...)、include-code代码读取等chapters/— 19 个分章,唯一内容源code/— 按章分目录的独立 C++ 板子,可编译,经prelude.typ的include-code读入书中images/— 书中图片(本地化)code-snippets/— VS Code 代码片段(.code-snippets),按主题分组export/— 高亮主题、PowerShell 语法定义、字体(细节见export/PIPELINE.md)check.sh— 验证闸,改动后跑一遍;推main/ 开 PR 时 GitHub Actions 也会跑它tests/— 抽取实际书稿正文运行的回归测试(小规模穷举、朴素参考和数值性质),编译源与日志保留在build/regression/tools/sync_snippets.py— 检查已登记片段与来源一致;修改来源后用--write同步对应正文pyproject.toml/uv.lock— Python 工具的依赖声明与锁定版本,环境由 uv 放在.venv/
- 分章阅读:打开
chapters/里对应.typ - VS Code 片段:把
code-snippets/*.code-snippets复制到项目.vscode/目录,即可在 cpp 文件中用前缀触发
片段与书中代码共用 code/contest.hpp 的基础声明;额外依赖按对应小节说明拼接。修改模板时同步书稿、用法和片段,再运行 ./check.sh。单独运行回归:uv run python -m unittest discover -s tests -p 'test_*.py' -v。已登记来源之外的历史片段尚未获得同等验证。
./export-pdf.sh # 书 + 单独封面,同一日期哈希产物:build/风铃的模板库-YYYY-MM-DD-<git短哈希>.pdf 与 build/封面-YYYY-MM-DD-<git短哈希>.pdf。单独封面是两行居中的一张纸,不进正文页码。
导出依赖 Typst 0.15.1、uv、Python 3.10+ 和 Poppler 的 pdffonts(Debian:poppler-utils)。脚本通过 uv run 自动检查锁文件、同步项目 .venv/ 并运行 Python;也可先执行 uv sync 准备环境。使用 uv add / uv remove 调整依赖。pyproject.toml 和 uv.lock 一并入库,.venv/ 不入库。
所需字体包为 fonts-noto-core、fonts-noto-cjk、fonts-texgyre-math、fonts-jetbrains-mono、fonts-montserrat。缺字体、Type 3 字体、未解析或失效的内部跳转均视为导出失败。./check.sh 与 CI 都执行完整导出。单章预览:typst compile --root . --font-path export/vendor/jetbrains-mono chapters/博弈论.typ /tmp/x.pdf(跨章引用会报未定义,属正常)。
git clone https://github.com/EmptyDust/Templates-XCPC.git
# 或
git clone git@github.com:EmptyDust/Templates-XCPC.git使用 https 方式提交时网络异常:
git config --global http.proxy "http://PROXY_ADDRESS:PORT"
git config --global https.proxy "http://PROXY_ADDRESS:PORT"