LaTeX 不只写论文

一个开发者用 LaTeX 给女朋友写了封情书,冲上 GitHub Trending 拿到 3658 星。它不只是浪漫故事,更是一份开源的排版与文档工程范例。本文逐行拆解自定义类、字体方案、可复用模板与协作技巧。

源仓库: HEJustinSun/my-girlfriend-jingtian-latex

##写在前面

最近 GitHub Trending 榜单上出现了一个让人会心一笑的仓库:HEJustinSun/my-girlfriend-jingtian-latex。一位开发者用 LaTeX 给女朋友 Jingtian 写了封浪漫文档,凭借 3658 颗星冲上趋势榜。它火的原因不止是故事甜蜜——更是把学术界的排版工具玩出了新高度。本文从开发者视角拆解这份”开源情书”的工程化写法:自定义类怎么写、字体怎么选、模板怎么 fork、协作怎么规范。

Q1:这个仓库里到底装了什么?

clone 下来你会看到一组非常典型的 LaTeX 工程:main.tex 作为入口、mygirlfriend.cls 提供自定义样式、assets/ 目录收纳封面图与中文字体、ref/ 引用排版资源。和一般简历模板不同,它大量使用 xeCJK + fontspec 加载中文手写体,再用 TikZ 绘制心形与连线。

最关键的设计是:所有依赖都收敛在本地,不依赖网络字体。这意味着别人 fork 之后只要本地装了 TeX Live 或 MikTeX,xelatex main.tex 一行命令就能编译出 PDF——这是它”开箱即用”、能被广泛复用的根本原因。

Q2:怎么用 .cls 抽离出可复用的样式?

这个项目最值得偷师的一招,是把所有样式抽到 .cls 文件,而不是堆在 main.tex 里。下面是简化后的核心结构:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mylove}[2026/08/29 v1.0 Love Letter Class]
\LoadClass[12pt,a4paper]{article}
\RequirePackage{xeCJK}
\RequirePackage{fontspec}
\RequirePackage{geometry}
\geometry{a4paper, margin=2.5cm}
\RequirePackage{xcolor}
\definecolor{lovered}{RGB}{220, 60, 90}
\setCJKmainfont{Ma Shan Zheng}

写自定义类的核心三步:声明格式、继承基类、按需 RequirePackage。这样别人只要换一行 \ProvidesClass{mylove} 就能 fork 出自己的版本,主题色、字体、封面图全部参数化。

Q3:怎么让 LaTeX 看起来”浪漫”?

浪漫感的来源其实全是排版细节:封面用 TikZ 画一颗手绘心、正文用 Calligraphy 手写体、行距放宽到 1.6 倍、关键句用 \color{lovered} 强调。例如封面节点:

\usetikzlibrary{shapes.geometric}
\node[heart, fill=lovered, scale=3, draw=none] at (0,0) {};

在 LaTeX 圈,字体是区分业余与专业的第一道门槛。Ma Shan Zheng、ZCOOL XiaoWei 这类开源手写体通过 fontspec 加载后,能瞬间把文档从”理工科作业”拉满到”手写信”。

Q4:如何 fork 一份改造成自己的?

完全可以,而且这就是项目能火的原因——复制门槛极低。建议三步走:

  1. clone 后把 mygirlfriend.cls 改名(比如 myletter.cls),并在 \ProvidesClass{} 里同步版本号;
  2. 替换 main.tex 里的 \section\chapter 内容为你想写的话;
  3. 调整 assets/ 下的封面图与字体文件路径。

LaTeX 编译是确定性的,只要本地有 xelatex,一行命令出新 PDF;再装个 pandoc + GitHub Actions,就能自动转 HTML 部署到 Pages,把”个人情书”扩成”个人站点”。

Q5:个人项目怎么做到”工程化”?

虽然只是写给一个人的情书,但它具备工程化雏形:README.md 写明编译命令、.gitignore 屏蔽 .aux/.log 等中间文件、assets/ 用语义化命名。这正是大多数个人项目欠缺的——把”我能跑”升级成”别人也能跑”。配合 GitHub Actions 自动编译 + Release 上传 PDF,任何人 PR 都能立刻看到渲染结果,比纯前端项目更轻量、更稳定。

Sources

本文参考:GitHub Trending 2026-08-29 榜单、r/ClaudeAI 关于 LaTeX 工具链的讨论、HEJustinSun/my-girlfriend-jingtian-latex 仓库 README 与 Issues 区相关排版讨论。