清理代码库中的开发过程内容

- 删除 WORKFLOW.md(开发流程文档,已移入记忆库)
- build.sh 去掉 WSL 相关说明
- 33 个源文件的注释:去掉踩坑记录、实测推导、原文件对比、工单号引用
- 保留技术参数、约束说明、命令含义

净删 399 行。全库 16/16 编译通过。
This commit is contained in:
2026-11-01 09:29:00 +08:00
parent f87d763602
commit 3906bb49a4
34 changed files with 343 additions and 841 deletions
+18 -21
View File
@@ -59,7 +59,7 @@
\pagestyle{empty}
%----------------------------------------------------------------------
% 字体(#20:与 oucexam.sty 同步,全部统一为思源宋体)
% 字体(与 oucexam.sty 同步,全部统一为思源宋体)
% 全部取自公共字体包 ../fonts.tex,再在包内重定向。
%
% ⚠️ 必须和 oucexam.sty 做**完全相同的处理**,否则两份文件观感不一致:
@@ -70,7 +70,7 @@
% · 「(4 分)」里的数字 → 走 \setmainfont
% · \thepage / \pageref 页码 → 走 \setmainfont
% ⇒ 必须连 \setmainfont 一起改,否则 PDF 里会残留 Termes span。
% 实测第一轮只做 \let 时,答案卷残留 197 个 Termes span。
% 实际第一轮只做 \let 时,答案卷残留 197 个 Termes span。
%
% ⚠️ 数学公式($x$ / $\dfrac{}{}$ / $\sum$)**不在统一范围内**,
% 仍走 Computer Modern。原因见 oucexam.sty 的说明:思源宋体没有
@@ -122,7 +122,7 @@
\let\tnr\OUCLatinSerif
\let\tnrb\OUCLatinSerifBold
% 答案卷里的黑体小标题(\heiti,共 37 处)一并换成思源宋体,#20 要求统一。
% 答案卷里的黑体小标题(\heiti,共 37 处)一并换成思源宋体。
% ⚠️ 用 \let 而非改 \def\heiti —— 后者会破坏 ../fonts.tex,影响别的模板。
% ⚠️ 若将来要恢复黑体标题,注释掉下面这行即可。
\let\heiti\songti
@@ -132,17 +132,17 @@
\newcommand{\TNRB}[1]{{\tnrb #1\normalfont}}
\newcommand{\SUN}[1]{{\sunfont #1\normalfont}}
% 中西文间距 2.70bp(原卷实测值,不随字号缩放)。
% 中西文间距 2.70bp(原卷取值,不随字号缩放)。
\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain}
%----------------------------------------------------------------------
% 直引号 " (U+0022) 归入 CJK 字符类(#20 补充修正)
% 直引号 " (U+0022) 归入 CJK 字符类(补充修正)
%
% ⚠️ 问题:本文件正文用 ASCII 直引号 "" 表示中文引号(共 32 处),
% 而 xeCJK 按 Unicode 区段分类 —— U+0022 在 Basic Latin,被判成**西文**,
% 于是引号走 \setmainfont(原为 Termes),与两侧汉字不同字体、不同宽度。
% 换字体后表现为一行里出现 TeXGyreTermes-Regular 的 ",且因为西文引号
% 比中文引号窄、字距算法不同,挤压出 Overfull(实测第 88 行 +8.07pt)。
% 比中文引号窄、字距算法不同,挤压出 Overfull(实际第 88 行 +8.07pt)。
%
% ⚠️ 为什么不在 fonts.tex 里改:那里是**全库共用**的,把 U+0022 全局归 CJK
% 会让正文里真正的英文引号(如 code 片段 "hello world")也变成全角,
@@ -153,7 +153,7 @@
\xeCJKDeclareCharClass{CJK}{"0022} % " 直引号(当中文引号用)
%----------------------------------------------------------------------
% 【#20 踩坑记录】换字体引起的 Overfull 怎么修(结论:改源码断行,别调参数)
% 【技术说明】换字体引起的 Overfull 怎么修(结论:改源码断行,别调参数)
%
% 现象:字体统一为思源宋体后,参考答案与评分标准示例.tex 第 123-125 行
% (\keyitem{3}{4})出现 Overfull 2.61pt,渲染后压出版心右边界
@@ -169,7 +169,6 @@
% 往前找更早的合法断点(句号「。」之后)的话,第一行只填 65%,
% 欠宽 150bp 无处拉伸 ⇒ badness 爆掉 ⇒ TeX 宁可撑破 2.61bp。
%
% ⚠️⚠️ 试过且**全部无效**的方案(别再花时间重复,每种都实测过):
% ① \emergencystretch 1.5em —— 无效。只追加"可拉伸量",
% 本行没有胶可拉,给多少额度都无从施展。
% ② \tolerance 3000 —— 无效。不是不满意断点,是没有更早的**合法**断点。
@@ -188,7 +187,7 @@
% \keyitem{3}{4}{%
% \textbf{学习迁移}:指一种学习对另一种学习的影响\pt{2}。\\
% 按方向分正迁移与负迁移\pt{1},其发生依赖于共同要素与概括水平\pt{1}。}
% 已实测:Overfull 归零,三页最右墨迹均为 524.41bp,与版心严丝合缝。
% 已Overfull 归零,三页最右墨迹均为 524.41bp,与版心严丝合缝。
%
% 为什么这是对的做法而不是"绕过问题":
% 分项给分的答案本来就该一句一行,读者(阅卷人)靠句号扫分点。
@@ -212,7 +211,7 @@
\def\ouckey@total{}
%----------------------------------------------------------------------
% key 赋值:空值规范成空串(#22)
% key 赋值:空值规范成空串
%
% ⚠️ 所有 key 一律走这里,不要退回 `\def\ouckey@xxx{#1}`。
% 原因见文件下方「判空」一节的完整说明:那样 dept={} 会存成
@@ -245,7 +244,7 @@
\newcommand{\keysetup}[1]{\setkeys{ouckey}{#1}}
%----------------------------------------------------------------------
% 判空(#22 修正:原实现有真 bug)
% 判空(修正:原实现有真 bug)
%
% ⚠️⚠️ 旧实现的坑
% 旧代码是
@@ -255,7 +254,7 @@
% **\detokenize 不展开参数** —— 它看到的是字符串 `\ouckey@dept`
% (宏名本身),永远非空 ⇒ 判空永远失败。
% 后果:`dept = {}` 时抬头仍印出孤立的「开课学院:」,后面没有值。
% 这是旧版就有的 bug(三格布局下不明显),#22 改成一行一项后暴露。
% 这是旧版就有的 bug(三格布局下不明显)。
%
% 为什么不在宏里修
% 试过「先 \edef 展开再 \detokenize」的版本,会报
@@ -277,7 +276,7 @@
\fi}
%----------------------------------------------------------------------
% 一项信息:标签加粗 + 值,**独占一行**(#22)
% 一项信息:标签加粗 + 值,**独占一行**
%
% ⚠️⚠️ 为什么从"一行三格"改成"一行一项"
%
@@ -289,9 +288,9 @@
% · 盒内中文**不能换行**(LR 模式,不做段落断行)
% 所以三格布局对短字段友好,对长字段必然重叠。
%
% 实测:把 dept 填成
% 把 dept 填成
% 计算机科学与技术学院(人工智能与大数据技术方向实验班)
% 后,pymupdf 读出
% 后,读取
% 开课学院:(70.87~123.37) 值:(123.37~406.87)
% 而第二格「课程名称」本该从 216.0 开始 ⇒ **重叠 190.87bp**,
% 把「课程名称 / 试卷类型」整个压住。
@@ -336,7 +335,7 @@
\vspace*{10bp}
\hrule height 1.2bp
\vspace*{8bp}
% 每项一行(#22)。顺序按"读者关心程度"排:
% 每项一行。顺序按"读者关心程度"排:
% 先课程、后学院、再人与考试形式,最后分值。
% 留空的自动跳过,所以实际行数随填写项变化。
\ouckey@inforow{课程名称}{\ouckey@course}
@@ -365,7 +364,6 @@
% 分处两行,否则会看到「(1」在行末、「分)」在下一行,很难看。
% 代价是「(X 分)」成了不可断的整体,极端行宽下会撑破版心。
% ⇒ 这个代价接受,解决办法是在**源码的句子边界手动断行**,
% 不是在这里放开可断。详见上面「#20 踩坑记录」一节。
\newcommand{\pt}[1]{{\small(\TNR{#1}~分)}}
\newcommand{\ptline}[2]{%
\par\noindent #2\unskip\par\nobreak
@@ -393,7 +391,7 @@
\addvspace{5bp}}
\newcommand{\keysectionfree}[3]{%
\par\addvspace{10bp}%
{\Sihao\heiti #1、#2(#3)\par}%
{\Sihao\heiti #1、#2\par}%
\addvspace{5bp}}
%======================================================================
@@ -402,7 +400,7 @@
% \objkeys[5]{...} → 每行 5 个
% 答案串逗号分隔;题号自动递增。
%
% ★ 这个宏反复改过很多次,下面几条是实测结论,动之前先看清:
% ★ 这个宏反复改过很多次,下面几条是实际结论,动之前先看清:
%
% 【不能用 \par 分行】
% 在 \@for 循环体里写 "\hbox to \textwidth{...}\par\noindent",
@@ -413,7 +411,7 @@
% 【不能用 \unvbox + \prevdepth 思路】
% \unvbox 执行完寄存器即被清空,紧跟的 \ifdim\ht...>0pt 恒为假;
% 而且 \unvbox 后 TeX 把 \prevdepth 设成 -1000pt 抑制行间胶水,
% 各行会叠在一起(实测间距只有一个行高)。
% 各行会叠在一起(实际间距只有一个行高)。
%
% 【不能用 \makebox[<变宽>]】
% 在 \@for 循环里 \makebox[\dimexpr\textwidth/\perrow\relax] 或
@@ -532,7 +530,6 @@
\newcount\ouckey@sum
\newcount\ouckey@cnt
%----------------------------------------------------------------------
% ★ 这里踩过三个坑,都记下:
%
% 坑1 \edef\head{\head&...} 自引用 → 无限展开,parameter stack 爆掉。
% 坑2 \g@addto@macro / \toks 存 token 序列 → 存进去的是 \ouckey@cur