ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

milewski-ctfp-pdf 构建指南:用 Nix Flakes 与 LaTeX 从源码产出《Category Theory for Programmers》PDF

2026/10/4 21:45:08 拓冰建站 浏览量
milewski-ctfp-pdf 构建指南:用 Nix Flakes 与 LaTeX 从源码产出《Category Theory for Programmers》PDF 教程文档【免费下载链接】milewski-ctfp-pdfBartosz Milewskis Category Theory for Programmers unofficial PDF and LaTeX source项目地址https://gitcode.com/gh_mirrors/mi/milewski-ctfp-pdf点击查看免费下载本篇技术指南围绕开源仓库milewski-ctfp-pdfBartosz Milewski 所著《Category Theory for Programmers》的非官方 LaTeX 源码与 PDF 工程展开重点讲解如何从源码构建出 Haskell、Scala、OCaml、Reason 四种语言版本及其印刷版 PDF。读完本文你将掌握nix build、nix flake show、nix develop与make两套完整构建路径、各 edition 的对应关系、构建产物的目录位置以及仓库的贡献流程与双重开源许可约定。项目定位与仓库概览这是一个将 Bartosz Milewski 的博客连载《Category Theory for Programmers》转换为可编译 LaTeX 工程、并持续产出 PDF 的非官方仓库已获作者授权。仓库根目录下同时存在README.md项目总览、购买链接、构建流程与许可说明是本文的主干依据flake.nixNix Flakes 声明式构建配置定义了 8 个可构建的 book package 与开发环境Makefile手动构建的 Make 入口封装了 latexmk xelatex 调用链src/全部 LaTeX 源文件src/content/按章节1.1到3.15存放正文每个章节目录下还有code/haskell、code/ocaml、code/reason、code/scala四语言的代码片段snippet01 起的.hs/.ml/.re/.scala文件errata-1.3.0.md、errata-scala.md自 v1.3.0 印刷以来的勘误记录LICENSE仓库整体许可声明。书的主体内容组织在 src/ctfp.tex 中依次是 Editors Note、PrefacePart One范畴、类型与函数、函子、自然变换等 10 章、Part Two声明式编程、极限与余极限、Yoneda 引理等 6 章、Part Three伴随、单子、F-代数、Ends and Coends、Kan 扩展、Topoi、Lawvere Theories 等 15 章最后是附录、Acknowledgments、Colophon 与 Copyleft notice。全书正文共 31 个章节从范畴论基础一路覆盖到高阶主题。可购印刷版两种正式发行版本README 明确列出两种可购买的实体书版本二者均基于v1.3.0发布标签印刷并分别附带勘误页版本装帧印刷日期勘误文档标准版Standard edition全彩精装2019-08-12errata-1.3.0.mdScala 版Scala Edition平装2019-08-12errata-scala.md需要说明的是README 中的购买链接指向 Blurb 平台外部服务本文档仓库内并不包含购买或下载入口如果你需要的是自行构建的 PDF请直接使用下文介绍的 Nix / Make 构建流程。构建前置安装并启用 Nix FlakesREADME 明确指出官方推荐的构建工作流依赖Nix且要求启用当时默认关闭的flakes 实验特性flakes 支持隐藏在 feature-flag 之后。操作步骤为从 Nix 官网安装 NixREADME 引用了 Nix 官网 下载页按 NixOS Wiki 的说明手动开启 flakes 特性在~/.config/nix/nix.conf中加入experimental-features nix-command flakes或使用NIX_CONFIG环境变量——README 写作时该特性尚需手动开启新版 Nix 可能默认启用请以你安装的 Nix 版本实际行为为准回到仓库根目录用nix flake show列出该 flake 暴露的全部可构建版本用nix build .#edition构建所需版本。仓库根目录的 flake.lock 已锁定nixpkgs等输入的具体版本保证构建可复现。可构建产物清单8 个 edition 一一对应nix flake show列出的所有版本实际定义在 flake.nix 的editions与variants两个列表组合中editionsnull即 Haskell 默认版、scala、ocaml、reasonvariantsnull即阅读版 reader、print印刷版。组合后得到 8 个 package见 flake.nix 的listToAttrs生成逻辑命名规则为ctfp-variant-editionpackage 名对应源文件src/ 下说明ctfpctfp-reader.texHaskell 默认阅读版ctfp-scalactfp-reader-scala.texScala 阅读版ctfp-ocamlctfp-reader-ocaml.texOCaml 阅读版ctfp-reasonctfp-reader-reason.texReason 阅读版ctfp-printctfp-print.texHaskell 印刷版US-trade 版式ctfp-print-scalactfp-print-scala.texScala 印刷版ctfp-print-ocamlctfp-print-ocaml.texOCaml 印刷版ctfp-print-reasonctfp-print-reason.texReason 印刷版例如 README 给出的示例命令nix build .#ctfp-scala构建的就是 Scala 阅读版。每种语言版本的差异由 opt-ocaml.tex 这类选项文件注入例如 OCaml 版定义了\def\OPTCustomLanguage{ocaml}、\def\OPTCustomLanguageExt{ml}与\def\OPTCustomLanguageColor{BurntOrange}、\def\OPTDDisplayLanguageName{OCaml}用于在正文中切换代码高亮语言与标签Scala、Reason 版同理opt-scala.tex、opt-reason.tex。构建产物位置README 说明构建成功后的 PDF 会放在result目录Nix 构建输出的标准符号链接。从 flake.nix 的installPhase看每个 package 的最终 PDF 名形如ctfp-print-scala.pdf即ctfp${variant}${edition}.pdf并以install -m 0644安装到输出目录version由self.shortRev or self.lastModifiedDate决定。手动构建路径nix develop Makefile如果不走nix buildREADME 提供了第二条路径nix develop会进入一个包含全部构建依赖的 shell随后用仓库自带的Makefile手动构建。例如构建 Scala 版nix develop make ctfp-scalanix develop对应的 shell 定义在 flake.nix 的devShells.default它在公共构建输入之上追加了git与gnumake与 LaTeX 工具链一起组成完整开发环境。Makefile 目标速查Makefile 的 7 个目标与 Nix 的 8 个 package 基本对应make ctfp之外缺 Reason 目标Reason 需走 Nix 构建make 目标构建的 jobname对应 PDFmake ctfpctfpHaskell 阅读版make ctfp-ocamlctfp-ocamlOCaml 阅读版make ctfp-scalactfp-scalaScala 阅读版make ctfp-printctfp-printHaskell 印刷版make ctfp-print-ocamlctfp-print-ocamlOCaml 印刷版make ctfp-print-scalactfp-print-scalaScala 印刷版make lint—对INPUT指向目录下所有.tex执行latexindent -l -w格式化注意 Makefile 有一个细节每个目标内部先cd src再调用 latexmk因此需在仓库根目录执行make而OUTPUT变量取INPUT所在目录名OUTPUT_DIRECTORY固定为仓库根下的build/实际产物以-jobname命名的 PDF 落在src/下由 latexmk 生成这一点与 Nix 的result输出位置不同。底层编译链Makefile 与 flake 的buildPhase都调用同一套命令Makefile 与 flake.nix 高度一致latexmk -file-line-error -shell-escape -logfilewarninglist \ -interactionnonstopmode -halt-on-error -norc \ -pdflatexxelatex %O %S -pdfxe \ 主文件.tex关键参数含义-pdflatexxelatex %O %S -pdfxe用XeLaTeX驱动编译处理 Unicode 与系统字体-shell-escape允许调用外部程序minted代码高亮依赖此开关flake 环境内置python3pygments、pygments-style-github提供高亮着色-interactionnonstopmode -halt-on-error非交互模式下遇错即停便于 CI 与日志排查-file-line-error错误信息带文件名与行号。LaTeX 依赖方面flake.nix 通过texlive.combine精确组合了minted、tikz-cd画交换图、tcolorbox、subfiles、libertine/libertinus-fonts正文与数学字体、inconsolata 自定义inconsolata-lgc-latex代码等宽字体将 TTF/OTF 安装到 TeX 目录结构等数十个宏包。构建阶段还会在configurePhase用substituteInPlace version.tex --replace dev ${version}把 src/version.tex 里的dev占位符替换成 git 短提交号或构建日期使每份 PDF 带上可追溯的版本信息。印刷版与阅读版版式差异阅读版与印刷版共用正文 src/ctfp.tex区别在页面选项文件阅读版如 opt-reader-10in.texoneside,openany,11pt页面 148×197mm四边 18.5–28mm 边距专为 10 英寸平板如 Kindle DX阅读优化链接不隐藏\def\OPThidelinks{false}印刷版opt-print-ustrade.textwoside,final,openright,10pt页面 6.125×9.25in、含出血bleed 0.125in、装订偏移 0.4–0.5in文件头部注释详细记录了按 Blurb 装订规格推算边距的过程ctfp-print.tex 还会执行\hypersetup{hidelinks}隐藏链接颜色避免印刷时出现彩色下划线。贡献流程README 的贡献约定很简单欢迎通过 Pull Request 提交改进审阅通过后合入主分支并在下一个 release 中收录。Bartosz 本人也在 README 中致谢所有贡献者。仓库根目录的scraper.py等脚本是历史抓取工具社区在此基础上持续校对正文与代码片段。许可与版权边界README 明确了双重许可结构正文与素材PDF 书籍、全部.tex文件以及src/fig与src/content目录下的图片和插图采用Creative Commons Attribution-ShareAlike 4.0 InternationalCC BY-SA 4.0脚本scraper.py等脚本文件采用GNU General Public License version 3GPL v3。这意味着书籍内容可基于署名—相同方式共享条款复用与演绎而脚本代码按 GPL-3.0 开源。分发由原项目作者hmemcpy维护本文仓库仅是镜像加速源构建产物请按上述许可使用。结语从nix flake show到nix build .#ctfp-scala再到nix developmakemilewski-ctfp-pdf用一套声明式 Nix 配置覆盖了四语言 × 两版式的 8 种 PDF 产物底层由 latexmk XeLaTeX minted 组成可复现的 LaTeX 工具链。对于想深入范畴论学习的读者构建 Haskell 版阅读 PDF 是最快的上手路径需要印刷/装订或特定语言代码示例的读者则可按上文对照表选择对应 edition。赞分享教程文档【免费下载链接】milewski-ctfp-pdfBartosz Milewskis Category Theory for Programmers unofficial PDF and LaTeX source项目地址https://gitcode.com/gh_mirrors/mi/milewski-ctfp-pdf点击查看免费下载相关推荐《Category Theory for Programmers》PDF和LaTeX源码项目教程《Category Theory for Programmers》PDF和LaTeX源码项目教程 1. 项目介绍 项目概述 milewski ctfp pdf教程文档终极Category Theory学习指南milewski-ctfp-pdf完整资源对比终极Category Theory学习指南milewski ctfp pdf完整资源对比 Category Theory范畴论作为现代数学和计算机科学的重教程文档Category Theory学习终极指南5个必备工具与milewski-ctfp-pdf完整资源包Category Theory学习终极指南5个必备工具与milewski ctfp pdf完整资源包 Category Theory范畴论 是现代数学中一教程文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考