Commit Graph
9 Commits
Author SHA1 Message Date
laoyang 25dc872062 新增课程教学日历 LaTeX 模板(课程教学日历/) #8
把学校下发的通用空白表「附件3:中国海洋大学课程教学日历(理论课程)」
做成 XeLaTeX 模板,与 试卷归档封面/、试卷归档目录/ 同一套做法。

版式按原 .doc 逐项还原并实测标定:
- 表宽 174.625mm(tblW 9900 twips),tblInd 为负(−13.97mm),
  表格比版心更靠左,可见左边界 15.875mm
- 7 列宽度取 gridCol − 2×colsep − 线宽
- 边框 0.5pt(w:sz=4),内边距 1.905mm(108 twips)
- 字号 14 / 12 / 10.5bp 三档,全部用 bp(Word 的 pt 是 PostScript pt)
- 行高按「行数 × 23pt」显式给 ht(原件 w:line=460 exact)

实测校验(pymupdf 读两版 PDF):
- 8 条竖线 x 偏差 ≤ 0.004mm
- 纵向锚点:附件号 / 标题 / 表格顶线 Δ = 0.00pt,其余 ≤ 0.03pt
- 行高 18 行中 17 行 Δ ≤ 0.4pt
- 字号 14.00 / 12.00 / 10.50 精确
- 零警告(无 Overfull / Underfull / 缺字)

真实数据零泄漏:原 .doc 是填过的实例,模板把所有字段换成占位符
(××××、000000000000、×、20××),已 grep 确认课程名、开课号、
教师姓名、年份、16 周日期与章节名均零命中。

README 记录五类坑:bp 单位、固定行距在 TeX 里不等于 baselineskip、
linespread 必须在 fontsize 之后、SetCell 的 c 列不折行、leftskip 与
geometry 叠加;以及原件五处不一致(第一周行距 15.6pt、周次列对齐
前后不同、表头折行数、表头不加粗、签字栏用空格顶位)。

注:本模板 3 页,原件 2 页 —— 因不复制第一周行距的疏漏,该行多 22pt。
2026-10-27 08:37:28 +08:00
laoyang 8fa44b138c 新增试卷归档目录 LaTeX 模板 #7
把「附件2:信息科学与工程学院归档目录(理论课).doc」做成 LaTeX 模板,
落在 试卷归档目录/。版式逐项照原 .doc 还原,尺寸全部注明换算过程。

- oucgddir.sty:A4、表宽 150.81mm、13 行固定行高、单元格宏
- 试卷归档目录.tex:12 项核对清单
- README.md:用法 / 版式参数表 / 实测数据 / 踩坑记录
- 根 README.md、fonts.tex:模板清单加一项,「七个」改「八个」

与原稿实测对比(pymupdf 读 PDF):
  表格竖线 x Δ ≤ 0.001mm,横线 y Δ ≤ 0.006mm
  32 行文字水平中心 Δ ≤ 0.11pt,字号 24/18/12/10.45 全部精确
  编译 1 页,零 Overfull / Underfull / 缺字

踩到并解决的五个坑:
  1. \fontsize 必须用 bp(TeX pt 比 PostScript pt 大 0.36%,24pt 实测 23.91)
  2. xeCJK 吞连续半角空格 → 标题字间用 \gdgap 手动 kern 24bp
  3. xeCJK 默认 PunctStyle=quanjiao 会挤压全角括号,使含括号的行整行
     右移 4.23pt → 必须 \xeCJKsetup{PunctStyle=plain}
  4. tabularray 把线宽算进列宽、ht 不含 hline 线宽、boxes 比 Σwd 多
     0.4945pt → 三处都要实测标定
  5. 单元格整体下移只有「尾部 \vspace*」有效,顶部 \vspace*/rule 会被
     首行 ascent 吃掉,\raisebox 被 m 居中抵销

字体:方正楷体_GB2312(商业,不可分发)→ OUC Kai(霞鹜文楷子集,OFL 1.1),
西文 Times New Roman → TeX Gyre Termes。字宽逐字相同(60.00 / 120.00pt 全等)。
2026-10-27 07:51:10 +08:00
laoyang 8aa979739a 字体统一:建公共字体目录,全部改用开源可商用字体 (#6)
七个模板原先分两套做法:幻灯片/fonts(49MB 鸿蒙 18 个字重)与
科技报告/font(92MB,含 5 款方正商业字体),其余模板直接调系统
SimSun/SimHei/KaiTi/FangSong/Times New Roman。换机器就编不出来,
方正系列也不允许随仓库分发。

统一到仓库根的 fonts/ + fonts.tex:
- OUC Serif(思源宋体 SC 子集)   —— 宋体
- OUC Sans(思源黑体 SC 子集)    —— 黑体
- OUC Kai(霞鹜文楷子集)          —— 楷体
- Zhuque Fangsong(朱雀仿宋)      —— 仿宋
- TeX Gyre Termes                  —— 西文 Times 等价(度量逐字相同)
- HarmonyOS Sans                   —— 幻灯片/科技报告原有字体

fonts.tex 是唯一允许声明字体的地方,7 个模板全部 \input 它。
字体体积 141MB -> 49MB(去掉重复),全库共用一套最小集合。

几处踩过的坑(均已写进源码注释):
- \newCJKfontfamily 与 ctex 默认 fontset 冲突会中断编译,改用
  \setCJKfamilyfont + \def
- \newfontfamily 缺粗体档会让 \bfseries 静默失效,四档必须全给
- UprightFont= 与主参数不能同时给,否则文件名被拼两次
- Path= 相对编译时工作目录,不是相对 .sty
- ×/□/○ 等符号按 Unicode 区段被判成西文,需 \xeCJKDeclareCharClass
- 中文斜体的 ItalicFont 与主字体不在同一目录,须在 ItalicFeatures
  里单独写 Path/Extension(否则报 OUCKai-Regular cannot be found)

顺带:
- 科技报告 report.tex 的字体演示正文改为新字体名(原文写着方正系列)
- 试卷归档封面新模板并入本库
- 科技报告 shell 命令框底色改海大蓝(#5 遗留)

验证(7 个模板 8 个 PDF 全量重编 + 逐行 A/B 对照):
- 错误 0,缺字 0
- 幻灯片 362 行逐行完全一致,零漂移
- 年度考核登记表 / 劳务发放说明表 / 试卷题型示例 / 参考答案 文本完全一致
- 课程执行大纲 仅 2 处断字连字符差异(throughout、processing),
  1 条 6.39pt Overfull 已论证不可见(距纸张右边缘仍有 20.7mm)
- 科技报告 内嵌字体方正归零,只剩 OUC Serif/Sans/Kai + Zhuque
- 全库正文 857 个非 ASCII 字符,四款中文字体(含粗体)覆盖 100%
2026-10-27 00:43:14 +08:00
laoyang 1f807e9cce 所有模板目录改为中文名,并入幻灯片与科技报告两个仓库(#3)
目录改名(git mv 保留历史,包名不变):
  exam/   -> 试卷/
  form/   -> 年度考核登记表/
  form2/  -> 劳务发放说明表/
  course/ -> 课程执行大纲/

改名即可编译:实测 6 个模板在含中文的目录下 XeLaTeX 均零报错,
PDF 逐页文本与改名前的版本完全一致(0 页差异,仅元数据时间戳变化)。

并入两个此前独立维护的仓库:
  ouc-slide-latex-template  -> 幻灯片/
  ouc-report-latex-template -> 科技报告/
带入了 theme/ fonts/ logos/ figs/ cls/ input/ 与 fontawesome.pdf,
字体随模板附带(无须在系统安装)。中间文件一律不入库。

同步修正的文档:根 README 目录表改为中文名并说明统一维护;
四个子 README 的标题;ouclw.sty 注释里对 form/ 的交叉引用;
幻灯片与科技报告 README 里「从旧仓库 clone」「按年份切分支」等已失效的说明
(并入后只有 main 一个分支,各年份 TeX Live 通用)。

两个迁入模板的 PDF 保留源仓库原版(逐字节一致),未重新编译:
源 PDF 出自 TeX Live 2026,本机为 2022,重新编译会让结尾页装饰层定位
产生细微偏移,保留原版以保证样张与原来完全一致。
2026-10-26 18:31:04 +08:00
laoyang d353aaa324 新增课程教学执行大纲 LaTeX 模板 course/(#2)
把学校下发的《本科课程教学执行大纲》Word 模板复刻为 XeLaTeX,
内容全部虚构(课程名、代码、开课号、教师、教材、思政案例)。

- ouccourse.sty:版式宏包,尺寸全部从 OOXML 量出
  · 页面:左 27.52 / 右 22.93 / 上 25.05 / 下 4.94 mm(照抄原文件的不对称与极小下边距)
  · 表 0:156.93mm,5 行 × 8.01mm,两列 131.921/25.012mm
  · 表 1:165.54mm(超版心 5.91mm,居中溢出),6 列逐列对齐 gridCol
- 课程执行大纲.tex:虚构课程「信号与系统基础」完整示例,5 页
- README.md:用法、参数表、twips→mm 对照、字体降级、六个坑、校验方法
- 根 README.md 目录表补 course/ 一行

关键技术点(README 有详述):
- 表宽 > 版心时不能按比例缩列宽(会让长文字提前折行),要用 \leftskip 整块左移;
  \hspace* 对 longtblr 的 \halign 盒子无效
- tabularray 的 wd= 是内容宽,不含竖线自身 0.5pt;ht= 含横线预算
- presep/headsep 是 outer 键,误写进 inner spec 会把 "0pt" 印成垃圾文字且不报错
- 表级默认字号须写 cells={font=...},单独写 font= 被静默忽略
- longtblr 跨页提示要清两组模板;*-text 不能设 empty(会报 LaTeX3 变量错误)
- ctex 默认 \linespread≈1.3 会覆盖 \fontsize 的行距

验收:26/26 项量化达标,编译零错误零 Overfull/Underfull,5 页
2026-10-26 17:43:50 +08:00
laoyang e032aec228 新增劳务发放说明表 LaTeX 模板(form2/)#1
把实验室《劳务发放说明表》docx 复刻为 XeLaTeX 模板,与 exam/、form/ 同一套做法:
自包含子目录、版式逐项对齐原 docx、模板不含真人信息。

- form2/ouclw.sty      版式包:A4 + left=31.70mm + 表宽 150.32mm,
                       4 列 / 5 行、14pt 宋体、15.6pt 行距、0.5pt 边框、
                       1.905mm 单元格内边距,全部尺寸附 twips→mm 换算注释
- form2/劳务发放说明表.tex  主文件,填表只改 4 个变量
- form2/README.md      用法、换算表、四个坑、量化校验方法与实测数据
- README.md            目录表登记 form2/

文字改写:原文「聘请秦依康等2位研究生参与《观测数据驱动的渤海生态系统健康
评估关键技术研发》项目的研究工作。」改为「聘请xxx等x位研究生参与《xxx》
项目的研究工作。」,句式未动;其余内容一律 × 占位。

量化验收(pdftocairo -svg + pdftotext -bbox):
  表宽 150.137mm(目标 150.319,差 -0.18)
  表左  31.662mm(目标  31.700,差 -0.04)
  R0 11.172 / R1 5.668 / R2 49.646 / R3 22.159 / R4 11.172 mm 全部达标
  三个签字格标签基线、日期行基线完全重合
  编译零错误、零 Overfull / Underfull,输出 1 页

本次踩到并记录在 README 的四个坑:
1. ctex 默认 \linespread≈1.3 会把 \fontsize{14}{15.6} 放大成 20.28pt
2. 合并格 {c} 是 LR 模式,不折行而是撑宽整表;\hsize 也未重设
3. 合并格内容可用宽要补回 2*colsep*(n-1),否则长文本提前折行
4. \parbox[t] 与 tabularray 的 strut 叠加会每行多出 3.6pt
2026-10-26 16:18:58 +08:00
laoyang 565ec7c505 add form: 教职工年度考核登记表 LaTeX 模板
按学校下发的 Word 表逐项复刻,尺寸全部从 docx 的 OOXML 数值换算
(twips→mm/pt),不含真人信息。

- form/ouckhtb.sty          版式包:页面/字体/11 列宽/9 行高/表格环境
- form/年度考核登记表.tex   主文件:占位数据 + 表格 + 年度总结
- form/README.md            用法、版式数据来源、四个排版坑、校验方法

关键排版结论(sty 内均有注释):
- 合并格 cell{r}{c}={c=n}{c} 的 {c} 是不折行的 LR 模式,文字超宽会
  把列撑宽、整表超出版心(实测 448pt→559pt),故合并格一律包
  \khtbfit{跨度宽}{文字}
- 合并格里 \hsize 未被重设,长文本须用定宽 \parbox
- 跨度声明只有 {c=n}{c} 一种写法
- colspec/row{} 不能放宏(Unexpandable command)
- longtblr 须 stretch=0,且要清空四个 caption 模板去掉「表 0」

校验:零 Overfull/Underfull,2 页,表宽 157.96mm(目标 158.33mm)。
2026-10-23 12:01:32 +08:00
laoyang 47158f2add add exam: 试卷与参考答案及评分标准模板
- exam/oucexam.sty    试卷版式包(195x270mm 专用试卷纸)
- exam/ouckey.sty     答案与评分标准版式包(默认 A4,可选 exampaper)
- exam/试卷题型示例.tex        16 类题型,6 页
- exam/参考答案与评分标准示例.tex  8 大题 / 满分 100,3 页
- exam/README.md      用法与书写注意事项
- .gitignore          忽略 LaTeX 编译中间文件
2026-10-22 16:27:54 +08:00
laoyang c70c063915 Initial commit 2026-10-22 08:15:07 +00:00