LaTeX 不只写论文
一个开发者用 LaTeX 给女朋友写了封情书,冲上 GitHub Trending 拿到 3658 星。它不只是浪漫故事,更是一份开源的排版与文档工程范例。本文逐行拆解自定义类、字体方案、可复用模板与协作技巧。
##写在前面
最近 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 一份改造成自己的?
完全可以,而且这就是项目能火的原因——复制门槛极低。建议三步走:
- clone 后把
mygirlfriend.cls改名(比如myletter.cls),并在\ProvidesClass{}里同步版本号; - 替换
main.tex里的\section、\chapter内容为你想写的话; - 调整
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 区相关排版讨论。