重制《多项式的乘法和因式分解》
约 1444 字大约 5 分钟
2026-06-09
32 开本老书
我们找到了一套叫做《中学数学教学参考书》的丛书。《多项式的乘法和因式分解》是其中的一本。之所以选择它,是因为它只有 72 页,并且其中多数都是代数式,没有什么不涉及画图一类的复杂内容。这套丛书的页面大小都是 32 开。
我们当然不会把老书的内容一个字一个字的打出来。只要把 PDF 文件上传给 DeepSeek,告诉它把 PDF 转换成 LaTeX 格式,它就可以自动完成打字输入部分。当然,它也有许多扫描不出来的部分,这时候就只能逐字逐句的输入了。但是,我们的身份仍然是编辑。编辑的任务不是提供内容,而是将内容以一个合适的方式呈现给读者,这当中当然也包括对文章内容的校对、对版式的调整等等。
为了保存我们在重制过程中所获得的各种经验,我们创建了一个叫做32k.tex的文件。其中尽可能简洁地展示我们遇到的问题和解决方法。
编译成 PDF
假设我们已经有了一群读者,我们当然希望以成品的方式把作品交给他们。这个成品就是 PDF 文件。在出版行业,PDF 文件是一种非常常用的文件格式,很多排版好的文档都是以 PDF 格式发布的。现在让我们使用以下命令编译它:
latexmk -xelatex -interaction=nonstopmode -synctex=1 -shell-escape 32k.texlatexmk是一个用于编译 LaTeX 文档的工具。-xelatex表示使用 XeLaTeX 编译。-interaction=nonstopmode表示在编译过程中不暂停,直接编译到结束。-synctex=1表示启用同步 TeX,方便在编辑器中查看编译结果。-shell-escape表示允许在 LaTeX 文档中使用 shell 命令。
现在我们已经有了一个 PDF 文件。我们拿到任何一个文档,书也好,杂志也罢,肯定是有一个自上而下的观察过程。也就是从宏观的方面到微观的方面,从封面、章节,到文字细节、插图等。我们重制编辑的过程也遵循这样的思路:先处理整个文档主要框架部分,然后再逐步校对每个章节。当然,这其实不容易,因为 LaTeX 本身就是一个事无巨细都要进行处理的工具。在重制的过程中,遇到了许多反复拉扯的问题。这些问题经常会让人注意力不合理的转向细节问题。这正是 LaTeX 不友好的一面。我希望能够让这篇文章的读者避免过早陷入细节。因此我们会先设置文章的框架,然后针对一个一个的问题进行解决。当然这篇文章不是 LaTeX 的入门,我们更加关注怎么把文档像样的做出来。
主要框架
文档的框架主要解决文章的包括以下几个部分:首先会关注它的类型,然后是它的纸张大小、版面设置、字体、页眉页脚设置等。这是我们第一眼看得到的部分。现代的 PDF 文件还可以进一步提供链接等增强功能。现在让我们开始一点点进行设置。
文档类型
作为 LaTeX 文档,首先我们要确定文档的类型。我们的文档内容是一本书,所以我们的文档类型documentclass是ctexbook。它可以支持
- twoside: 双面打印,奇数页在一页,偶数页在一页的反面。因此它们的页边距会不同。
- UTF-8: 编码为 UTF-8,支持中文。
- CJKmath: 中文数学公式,可以直接在公式中加中文,不需要、text{}。
- scheme=chinese: 中文汉化(默认),譬如章节,表格,公式等的编号。
\documentclass[
twoside, % 双面打印
UTF8, % 编码为 UTF-8
CJKmath, % 中文数学公式,可以直接在公式中加中文,不需要\text{}
scheme=chinese, % 中文汉化(默认)
fontset=none, % 不使用默认字体设置,手动设置字体
]{ctexbook}纸张、版面设置
- 纸张大小:纸张通常比成品的页面要大,打印完成后需要裁剪,形成成品尺寸。(
paperwidth和paperheight) - 页面尺寸:成品的大小,对应 32K 即 130mmx184mm。(
pagewidth和pageheight) - 文字区域:版面尺寸是正文的内容,不包括页眉和页脚。(
textwidth和textheight)
根据我们在书内页中看到的,我们的文档尺寸应该是 32 开本,需要使用geometry包来设置纸张尺寸,并且画出了的裁剪区域。我们设置了 137mmx196mm 的纸张大小,除此之外选择了比较紧凑的版面设置。版面区域,就是容纳文字的区域,不包括页眉和页脚 (100mmx154mm)。
% 设置32K成品尺寸
\usepackage[
% 纸张尺寸
paperwidth=137mm,
paperheight=196mm,
% 页面尺寸
% pagewidth=130mm,
% pageheight=184mm,
% 订口:指书页靠近书脊(装订侧)的空白边距。
% 切口:指书页远离书脊(翻书侧)的空白边距,也就是你翻页时手指捏着的那一侧。
% 天头:指书页顶部的空白边距。页眉通常位于天头区域内,靠近版心上方。
% 地脚:指书页底部的空白边距。页脚通常位于地脚区域内,靠近版心下方。
%
% 版面/版心:书页上实际用于打印内容的区域,也就是文本区域
% 边框宽度(130mm) - 订口(18mm) - 切口(12mm) = 100mm
% 边框高度(184mm) - 天头(18mm) - 地脚(22mm) = 154mm
textwidth=100mm,
textheight=154mm,
% 文本块相对于物理页面的定位
% 将130x184边框居中在137x196页面内(水平3.5mm/垂直6mm出血偏移)
left=21.5mm, % 3.5mm偏移 + 18mm订口边距
top=24mm, % 6.0mm偏移 + 18mm天头边距
headsep=3mm, % 页眉到文本的距离
footskip=5mm, % 文本到页脚的距离
includeheadfoot=false % 保持边距相对于文本区域独立
]{geometry}
% 130mmx184mm裁切框
\usepackage{tikz}
\usepackage{eso-pic}
\AddToShipoutPictureBG{%
\begin{tikzpicture}[remember picture, overlay]
% 在137mmx196mm纸张上精确绘制130mmx184mm的黑色边框
\draw[line width=0.4pt, color=black]
([shift={(3.5mm, 6mm)}]current page.south west)
rectangle
([shift={(-3.5mm, -6mm)}]current page.north east);
\end{tikzpicture}%
}字体
由于之前设置了fontset=none,所以我们需要手动设置字体。fontspec包是用来设置字体的,它已经由ctexbook包包含了。
- 中文字体,我们使用 Noto 系列
- 西文字体,我们使用 Libertinus
- 数学公式里面的中文,我们直接使用霞鹜文楷字体。
% 字体设置(fontspec已经随着ctexbook加载了)
% 之前设置fontset=none,如果没有此处的设置,中文都是无法显示的
\setCJKmainfont{Noto Serif CJK SC}
\setCJKsansfont{Noto Sans CJK SC}
\setCJKmonofont{Noto Sans Mono CJK SC}
% 中文传统字体命令设置
\setCJKfamilyfont{songti}{Noto Serif CJK SC} % 宋体
\setCJKfamilyfont{heiti}{Noto Sans CJK SC}[BoldFont={Noto Sans CJK SC Black}] % 黑体
\setCJKfamilyfont{kaishu}{"LXGWWenKai-Regular.ttf"} % 楷书
% 定义简写命令
\newcommand{\songti}{\CJKfamily{songti}}
\newcommand{\heiti}{\CJKfamily{heiti}}
\newcommand{\kaishu}{\CJKfamily{kaishu}}
% 西文字体
\setmainfont{Libertinus Serif}%
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
% 数学字体
\setCJKmathfont{LXGWWenKai-Light.ttf} % 公式中的中文字符用霞鹜文楷页眉页脚设置
由于页面比较紧凑,所以的页眉和页脚也比较紧凑,fancyhdr包是用来设置页眉页脚的。我们在页眉的居中位置显示当前章标题。在左/右下角位置显示当前页码。
% 页眉页脚设置
\usepackage{fancyhdr}
\pagestyle{fancy} % 页眉页脚样式设为 fancy
\fancyhf{} % 清空页眉页脚设置
\fancyhead[C]{\small \leftmark} % 页眉居中显示章标题
\fancyfoot[RO, LE]{\(\cdot{}\ \)\thepage\(\ \cdot{}\)} % 页脚左右下角显示页码(双面打印)
% pagestyle 设置为 plain,不显示页眉页脚,只显示页码(每一章的第一页pagestyle 为 plain)
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[RO, LE]{\(\cdot{}\ \)\thepage\(\ \cdot{}\)}
\renewcommand{\headrulewidth}{0pt}
}链接设置
最后hyperref包是用来为 PDF 文件添加链接和书签的,方便在 PDF 中跳转。当然 PDF 也可以保存文档的元信息。
% 链接设置
\usepackage[
colorlinks=true, % 将链接文字本身着色,而不加彩色边框
linkcolor=blue, % 内部链接颜色(目录、交叉引用)
citecolor=green, % 引用颜色
urlcolor=red, % URL 颜色
bookmarks=true, % 生成书签(默认 true)
bookmarksopen=true, % 书签目录展开状态
bookmarksopenlevel=2, % 展开到第几级章节
pdftitle={32K}, % PDF 属性:标题
pdfauthor={小明}, % PDF 属性:作者
pdfsubject={32K}, % PDF 属性:主题
pdfkeywords={32K} % PDF 属性:关键词
]{hyperref}内容细节
效果
下面我们来看看模板成果。
