新增课程教学日历 LaTeX 模板(课程教学日历/,校级通用版 附件3) #8

Closed
opened 2026-10-27 00:06:46 +00:00 by laoyang · 5 comments
Owner

背景 / 诉求

用户提供原件(学校通用版):

C:\Users\Yongquan\SynologyDrive\授课\数字逻辑\2025\归档\附件3:中国海洋大学课程教学日历(理论课程).doc

要求「改成 latex」。用户明确要求:不要用里面真实的数据——原件里是数字逻辑课
的真实开课信息(开课号、任课教师姓名、学生人数、16 周真实日期与教学内容),
模板里必须全部换成虚构/占位内容,只复刻版式。

与已有 课程执行大纲/ 的关系

课程执行大纲/ 里也有一张「教学日历」表,但那是课程执行大纲这份文件内部的
表 1
(9pt 宋体、6 列、整份文件 5 页)。本次是学校下发的独立单张表格
(附件3,10.5pt、7 列、2 页、带院系负责人签字区),两者不是同一份东西,
不能并入,需新建独立模板目录 课程教学日历/。

涉及范围

  • 新建目录 课程教学日历/:
    • ouccal.sty —— 版式包
    • 课程教学日历.tex —— 正文入口(虚构课程填充)
    • 课程教学日历.pdf —— 成品样张
    • README.md —— 用法 / 版式参数 / 实测校验 / 踩坑记录
  • 根 README.md:模板清单加一行;「八个模板」改「九个模板」
  • 根 fonts.tex:头注释「八个模板」改「九个模板」

原件关键数据(已从 docx XML 提取)

项 原值 换算
纸张 pgSz 11906×16838 twips A4 210×297 mm
页边距 pgMar top/bottom 1440、left/right 1800 twips 25.40 mm / 31.75 mm
表宽 tblW 9900 twips 174.625 mm(比版心 146.5mm 宽 28mm)
表格负缩进 tblInd −792 twips −13.97 mm(表格左边界比版心左边界更靠左)
列数 tblGrid 7 列 900/1449/1029/2669/1366/1224/1263 twips 15.875 / 25.559 / 18.150 / 47.078 / 24.095 / 21.590 / 22.278 mm
内边距 tblCellMar left/right 108、top/bottom 0 twips 1.905 mm / 0
边框 w:sz=4 0.5 pt
表体字号 默认 w:sz=21(Normal 样式) 10.5 pt(PDF 实测 10.45 = 10.5×72/72.27)
表头/第一列 居中 jc=center
其余单元格 左对齐 jc=left
表头第 6/7 列 各 2 段 「课堂讨论内容 / 及其它教学环节」「课下作业及课后必读 / 教材或参考书章节」
正文行距 w:line=460 lineRule=exact 460 twips = 23.0 pt 固定行距
表格行高 全部未设 trHeight 随内容自适应(这点与附件1/2 的固定行高不同)

验收标准

  1. xelatex 课程教学日历.tex 编译通过,2 页,零警告(Overfull / Underfull / 缺字 = 0)。
  2. pymupdf 与原件 PDF 逐位对比:
    • 7 条竖线 x、表格横线 y:偏差 ≤ 0.05 mm
    • 字号 14 / 12 / 10.5 pt 全部精确(bp 单位)
    • 表格左边界落在 15.875 mm(= 31.75 − 15.875 的负缩进)
  3. 不得出现原件的任何真实数据:课程名(数字逻辑)、开课号(080502101231)、
    教师姓名(杨永全)、学生人数(75)、2021/2022 年份、16 周真实日期
    (9月20日至9月24日 …)、真实教学内容(第一章逻辑代数基础 …)、
    作业编号(1.1-1.6 …)——全部换成虚构内容。验收时 grep 确认零命中。
  4. 字体取公共字体包,原件「宋体 + Times New Roman」→ OUC Serif + TeX Gyre Termes。
  5. README 按 试卷归档目录/README.md 体例写。
## 背景 / 诉求 用户提供原件(学校通用版): ``` C:\Users\Yongquan\SynologyDrive\授课\数字逻辑\2025\归档\附件3:中国海洋大学课程教学日历(理论课程).doc ``` 要求「改成 latex」。用户明确要求:**不要用里面真实的数据**——原件里是数字逻辑课 的真实开课信息(开课号、任课教师姓名、学生人数、16 周真实日期与教学内容), 模板里必须全部换成虚构/占位内容,只复刻版式。 ## 与已有 `课程执行大纲/` 的关系 `课程执行大纲/` 里也有一张「教学日历」表,但那是**课程执行大纲这份文件内部的 表 1**(9pt 宋体、6 列、整份文件 5 页)。本次是**学校下发的独立单张表格** (附件3,10.5pt、7 列、2 页、带院系负责人签字区),两者不是同一份东西, 不能并入,需新建独立模板目录 `课程教学日历/`。 ## 涉及范围 - 新建目录 `课程教学日历/`: - `ouccal.sty` —— 版式包 - `课程教学日历.tex` —— 正文入口(虚构课程填充) - `课程教学日历.pdf` —— 成品样张 - `README.md` —— 用法 / 版式参数 / 实测校验 / 踩坑记录 - 根 `README.md`:模板清单加一行;「八个模板」改「九个模板」 - 根 `fonts.tex`:头注释「八个模板」改「九个模板」 ## 原件关键数据(已从 docx XML 提取) | 项 | 原值 | 换算 | |---|---|---| | 纸张 | `pgSz` 11906×16838 twips | A4 210×297 mm | | 页边距 | `pgMar` top/bottom 1440、left/right 1800 twips | 25.40 mm / 31.75 mm | | 表宽 | `tblW` 9900 twips | 174.625 mm(**比版心 146.5mm 宽 28mm**) | | 表格负缩进 | `tblInd` **−792 twips** | **−13.97 mm**(表格左边界比版心左边界更靠左) | | 列数 | `tblGrid` 7 列 900/1449/1029/2669/1366/1224/1263 twips | 15.875 / 25.559 / 18.150 / 47.078 / 24.095 / 21.590 / 22.278 mm | | 内边距 | `tblCellMar` left/right 108、top/bottom 0 twips | 1.905 mm / 0 | | 边框 | `w:sz=4` | 0.5 pt | | 表体字号 | 默认 `w:sz=21`(Normal 样式) | 10.5 pt(PDF 实测 10.45 = 10.5×72/72.27) | | 表头/第一列 | 居中 | `jc=center` | | 其余单元格 | 左对齐 | `jc=left` | | 表头第 6/7 列 | 各 2 段 | 「课堂讨论内容 / 及其它教学环节」「课下作业及课后必读 / 教材或参考书章节」 | | 正文行距 | `w:line=460 lineRule=exact` | 460 twips = 23.0 pt 固定行距 | | 表格行高 | 全部**未设** `trHeight` | 随内容自适应(这点与附件1/2 的固定行高不同) | ## 验收标准 1. `xelatex 课程教学日历.tex` 编译通过,**2 页,零警告**(Overfull / Underfull / 缺字 = 0)。 2. pymupdf 与原件 PDF 逐位对比: - 7 条竖线 x、表格横线 y:**偏差 ≤ 0.05 mm** - 字号 14 / 12 / 10.5 pt 全部精确(`bp` 单位) - 表格左边界落在 **15.875 mm**(= 31.75 − 15.875 的负缩进) 3. **不得出现原件的任何真实数据**:课程名(数字逻辑)、开课号(080502101231)、 教师姓名(杨永全)、学生人数(75)、2021/2022 年份、16 周真实日期 (9月20日至9月24日 …)、真实教学内容(第一章逻辑代数基础 …)、 作业编号(1.1-1.6 …)——全部换成虚构内容。验收时 grep 确认零命中。 4. 字体取公共字体包,原件「宋体 + Times New Roman」→ OUC Serif + TeX Gyre Termes。 5. README 按 `试卷归档目录/README.md` 体例写。
Author
Owner

已完成并推送

提交 25dc872(commit 信息带 #8),已 push 到 origin/main。

新增文件

文件 说明
课程教学日历/oucal.sty 版式包,每项尺寸都附换算过程
课程教学日历/课程教学日历.tex 正文入口(课程信息 + 16 周 + 考核说明 + 签字栏)
课程教学日历/课程教学日历.pdf 成品样张(3 页)
课程教学日历/README.md 用法、版式参数表、实测校验、6 个坑、原件 5 处不一致

同步改了根 README.md(模板清单加一行、七→九)与 fonts.tex(头注释)。

真实数据零泄漏(用户明确要求)

原 .doc 是一份填过的实例,模板把所有字段换成占位符。已 grep 确认
oucal.sty 与 课程教学日历.tex 中以下关键词零命中:

数字逻辑   080502101231   杨永全   2021   2022   逻辑代数
卡诺图     触发器         时序线路  组合线路   信息科学与工程学部   闭卷考试

正文里的「××××基础」「×××设计」也是抽象过的占位(原件的真实章节名
「逻辑代数基础」「组合线路设计」等已全部去掉)。

实测校验(pymupdf 读两版 PDF 逐位对比)

  • 8 条竖线 x:最大 |Δ| = 0.004mm
  • 纵向锚点:「附件3:」92.69 = 92.69、标题 123.89 = 123.89、
    表格顶线 242.60 = 242.60,Δ 均为 0.00pt;课程信息两行 Δ ≤ 0.03pt;
    签字栏「院(系)负责人签字」x=321.00→320.99
  • 行高:18 行中 17 行 Δ ≤ 0.4pt
  • 字号:14.00 / 12.00 / 10.50 精确(全用 bp)
  • 警告:0(无 Overfull / Underfull / 缺字)
  • 可复现:git clone 到干净目录重编,3 页像素级完全一致

三个需要说明的取舍

1. 页数 3 页(原件 2 页)

原件第一周(第 2 行)的段落没写 w:spacing,随 docGrid
(linePitch=312 twips = 15.6pt)排,而行高 47.3pt;同为 3 行的第五周
是 69.5pt。同一张表 17 行 23pt、1 行 15.6pt —— 这是原件的疏漏。

本模板不复制这个不一致,全表统一 23pt,故该行高 69.3pt(多 22.0pt),
总高 1132.3pt(原件 1114.2pt),正好顶到第 3 页。已记进 README 与 sty 注释。

2. 表头不加粗

视觉上表头醒目,但原 .doc 表头格只有 jc=center、没有 <w:b/>。
照抄原件,不加粗。

3. 周次列对齐前后不一致(照抄)

原件第 110 周 jc=left(x=50.40pt),第 1116 周 jc=center
(x=51.72pt)。本模板 x=50.65 / 51.75,保留这个不一致,
因为改成统一反而与原件对不上。

README 记录的技术坑(供后续模板复用)

  1. \fontsize 必须用 bp(Word 的 pt 是 PostScript pt,差 0.36%)
  2. Word 的 w:line=460 exact 不等于 TeX 的 \baselineskip——
    前者连首行也硬压成 23pt,后者首行只占字体 ascent。实测 rowsep
    与 \rule 两个方案都不可行,最终用显式 ht(附三种方案的实测数据)
  3. \linespread 必须在 \fontsize 之后调用,否则被覆盖
  4. \SetCell[c=7]{c} 里的 c 是自然宽度不折行,跨列必须显式给 wd
  5. \leftskip 与 geometry 的左边距叠加而非覆盖(多算了 16.3pt)
  6. (附)负的 \vspace* 在 \par 处会被丢弃,要靠 \newline 让两行
    落在同一段落里让 \baselineskip 生效

清理

临时目录 _conv3/(WPS 转换中间产物、标定脚本)与仓库内实验文件
(_exp/、_t.tex)已删除,仓库里只留 .sty / .tex / .pdf / README.md。

## 已完成并推送 提交 `25dc872`(commit 信息带 `#8`),已 push 到 `origin/main`。 ### 新增文件 | 文件 | 说明 | |---|---| | `课程教学日历/oucal.sty` | 版式包,每项尺寸都附换算过程 | | `课程教学日历/课程教学日历.tex` | 正文入口(课程信息 + 16 周 + 考核说明 + 签字栏) | | `课程教学日历/课程教学日历.pdf` | 成品样张(3 页) | | `课程教学日历/README.md` | 用法、版式参数表、实测校验、6 个坑、原件 5 处不一致 | 同步改了根 `README.md`(模板清单加一行、七→九)与 `fonts.tex`(头注释)。 ### 真实数据零泄漏(用户明确要求) 原 `.doc` 是一份填过的实例,模板把所有字段换成占位符。已 grep 确认 `oucal.sty` 与 `课程教学日历.tex` 中以下关键词**零命中**: ``` 数字逻辑 080502101231 杨永全 2021 2022 逻辑代数 卡诺图 触发器 时序线路 组合线路 信息科学与工程学部 闭卷考试 ``` 正文里的「××××基础」「×××设计」也是抽象过的占位(原件的真实章节名 「逻辑代数基础」「组合线路设计」等已全部去掉)。 ### 实测校验(pymupdf 读两版 PDF 逐位对比) - **8 条竖线 x**:最大 |Δ| = 0.004mm - **纵向锚点**:「附件3:」92.69 = 92.69、标题 123.89 = 123.89、 表格顶线 242.60 = 242.60,Δ 均为 **0.00pt**;课程信息两行 Δ ≤ 0.03pt; 签字栏「院(系)负责人签字」x=321.00→320.99 - **行高**:18 行中 17 行 Δ ≤ 0.4pt - **字号**:14.00 / 12.00 / 10.50 精确(全用 `bp`) - **警告**:0(无 Overfull / Underfull / 缺字) - **可复现**:`git clone` 到干净目录重编,3 页**像素级完全一致** ### 三个需要说明的取舍 **1. 页数 3 页(原件 2 页)** 原件第一周(第 2 行)的段落没写 `w:spacing`,随 `docGrid` (`linePitch=312` twips = 15.6pt)排,而行高 47.3pt;同为 3 行的第五周 是 69.5pt。同一张表 17 行 23pt、1 行 15.6pt —— 这是原件的疏漏。 本模板**不复制这个不一致**,全表统一 23pt,故该行高 69.3pt(多 22.0pt), 总高 1132.3pt(原件 1114.2pt),正好顶到第 3 页。已记进 README 与 sty 注释。 **2. 表头不加粗** 视觉上表头醒目,但原 `.doc` 表头格只有 `jc=center`、**没有 `<w:b/>`**。 照抄原件,不加粗。 **3. 周次列对齐前后不一致(照抄)** 原件第 1~10 周 `jc=left`(x=50.40pt),第 11~16 周 `jc=center` (x=51.72pt)。本模板 x=50.65 / 51.75,**保留这个不一致**, 因为改成统一反而与原件对不上。 ### README 记录的技术坑(供后续模板复用) 1. `\fontsize` 必须用 `bp`(Word 的 pt 是 PostScript pt,差 0.36%) 2. Word 的 `w:line=460 exact` 不等于 TeX 的 `\baselineskip`—— 前者连首行也硬压成 23pt,后者首行只占字体 ascent。实测 `rowsep` 与 `\rule` 两个方案都不可行,最终用**显式 `ht`**(附三种方案的实测数据) 3. `\linespread` 必须在 `\fontsize` **之后**调用,否则被覆盖 4. `\SetCell[c=7]{c}` 里的 `c` 是自然宽度不折行,跨列必须显式给 `wd` 5. `\leftskip` 与 `geometry` 的左边距**叠加**而非覆盖(多算了 16.3pt) 6. (附)负的 `\vspace*` 在 `\par` 处会被丢弃,要靠 `\newline` 让两行 落在同一段落里让 `\baselineskip` 生效 ### 清理 临时目录 `_conv3/`(WPS 转换中间产物、标定脚本)与仓库内实验文件 (`_exp/`、`_t.tex`)已删除,仓库里只留 .sty / .tex / .pdf / README.md。
Author
Owner

缺陷修正:签字栏「年 月 日」三个字重叠

用户反馈:最下面的年月日怎么都重合在一起了。

现象

第 3 页底部签字栏第二行,20×× 与「年」「月」挤成一团墨迹,「月」几乎完全压在「年」上。

原第 2 行写法(从原件空格反推得到):

\hspace*{92.604mm}\calfontC \calgrade~年\hspace{-8.35mm}月\hspace{3.34mm}日

根因

反查原件 PDF 的 span 坐标后确认:

字 原件 x 说明
年 355.08 字形左边界
月 376.08 距「年」10.55pt
日 397.08 距「月」10.50pt

原件里年份是空的 —— 原文就是「 年」+两个空格+「月」,
留白给老师手写签日期。\hspace*{92.604mm} 是按「 年」的实际位置
反解出来的偏移量。

我在填空模板里加了 \calgrade(20××,约 31.5pt 宽)插在「年」前面,
整串被推后到 x=399.74;后面再用 \hspace{-8.35mm} 去拽「月」,
负 kern 只减「年」「月」之间的空隙,空隙减成负数就变成重叠。

两层原因:

  1. 原件无年份文字,偏移量基准与实际排版不符;
  2. 负 \hspace 不能把已经排出去的「年」收回来,只能压缩后续盒子间距。

修正

改成让年份右对齐到「年」的左边界,而不是让「月」去追年份:

\hspace*{81.49mm}%
{\calfontC\makebox[34.16pt][r]{\calgrade}年}%   ← 年份右对齐,盒右界 = 355.08
\hspace*{10.60pt}%
\calfontC 月\hspace*{10.60pt}日\par

盒宽 34.16pt = 355.53 − 321.37(盒左与上行「院(系)」321.00 对齐),
装得下 20××(2 半角 10.5 + 2 全角 21 ≈ 31.5pt)。

实测校验(修正后)

锚点 原件 修正后 Δ
「院(系)负责人签字」x 321.00 320.99 −0.01
「年」字形 x 355.08 355.53 +0.45
「月」x 376.08 376.08 0.00
「日」x 397.08 397.14 +0.06

三个字完全分开,无重叠,且全部与原件对齐。

其他

  • 编译仍为 3 页、零警告(Overfull / Underfull / Missing character 全为 0)
  • 干净克隆重编,第 1、2 页 md5 与修改前完全一致,仅第 3 页变化 —— 改动未波及表格与抬头
  • README.md 更新:签核栏验收表补「年」锚点、修正「日」的原误差值
    (原记 −1.04pt 是旧写法的问题,现为 +0.06pt);「原件的不一致之处」
    第 5 条重写为「签字栏的『年 月 日』必须给年份一个定宽盒子」,
    附完整的踩坑复盘与失败方案
  • 真实数据复查:13 个关键词在 oucal.sty、课程教学日历.tex 中仍为
    零命中(闭卷、开卷 原本出现在 \calassess 的注释说明里,已一并改掉)
## 缺陷修正:签字栏「年 月 日」三个字重叠 用户反馈:**最下面的年月日怎么都重合在一起了**。 ### 现象 第 3 页底部签字栏第二行,`20××` 与「年」「月」挤成一团墨迹,「月」几乎完全压在「年」上。 原第 2 行写法(从原件空格反推得到): ```latex \hspace*{92.604mm}\calfontC \calgrade~年\hspace{-8.35mm}月\hspace{3.34mm}日 ``` ### 根因 反查原件 PDF 的 span 坐标后确认: | 字 | 原件 x | 说明 | |---|---|---| | 年 | 355.08 | 字形左边界 | | 月 | 376.08 | 距「年」10.55pt | | 日 | 397.08 | 距「月」10.50pt | **原件里年份是空的** —— 原文就是「` 年`」+两个空格+「`月`」, 留白给老师手写签日期。`\hspace*{92.604mm}` 是按「` 年`」的实际位置 反解出来的偏移量。 我在填空模板里加了 `\calgrade`(`20××`,约 31.5pt 宽)插在「年」前面, 整串被推后到 x=399.74;后面再用 `\hspace{-8.35mm}` 去拽「月」, 负 kern 只减「年」「月」之间的空隙,空隙减成负数就变成重叠。 两层原因: 1. **原件无年份文字**,偏移量基准与实际排版不符; 2. **负 `\hspace` 不能把已经排出去的「年」收回来**,只能压缩后续盒子间距。 ### 修正 改成让**年份右对齐到「年」的左边界**,而不是让「月」去追年份: ```latex \hspace*{81.49mm}% {\calfontC\makebox[34.16pt][r]{\calgrade}年}% ← 年份右对齐,盒右界 = 355.08 \hspace*{10.60pt}% \calfontC 月\hspace*{10.60pt}日\par ``` 盒宽 34.16pt = 355.53 − 321.37(盒左与上行「院(系)」321.00 对齐), 装得下 `20××`(2 半角 10.5 + 2 全角 21 ≈ 31.5pt)。 ### 实测校验(修正后) | 锚点 | 原件 | 修正后 | Δ | |---|---|---|---| | 「院(系)负责人签字」x | 321.00 | 320.99 | −0.01 | | 「年」字形 x | 355.08 | 355.53 | +0.45 | | 「月」x | 376.08 | **376.08** | **0.00** | | 「日」x | 397.08 | 397.14 | +0.06 | 三个字完全分开,无重叠,且全部与原件对齐。 ### 其他 - 编译仍为 **3 页、零警告**(Overfull / Underfull / Missing character 全为 0) - 干净克隆重编,第 1、2 页 md5 与修改前**完全一致**,仅第 3 页变化 —— 改动未波及表格与抬头 - `README.md` 更新:签核栏验收表补「年」锚点、修正「日」的原误差值 (原记 −1.04pt 是旧写法的问题,现为 +0.06pt);「原件的不一致之处」 第 5 条重写为「签字栏的『年 月 日』必须给年份一个定宽盒子」, 附完整的踩坑复盘与失败方案 - 真实数据复查:13 个关键词在 `oucal.sty`、`课程教学日历.tex` 中仍为 零命中(`闭卷`、`开卷` 原本出现在 `\calassess` 的注释说明里,已一并改掉)
laoyang reopened this issue 2026-10-27 00:48:19 +00:00
Author
Owner

缺陷修正:签字栏「年 月 日」三个字重叠 → 已修复并推送

提交 3b67659 修复签字栏年月日重叠:年份改用定宽右对齐盒子 #8
已推送 origin/main

根因

反查原件 PDF 的 span 坐标确认:原件里年份是空的,原文就是
「 年」+两个空格+「月」,留白给老师手写签日期。
\hspace*{92.604mm} 是按「 年」的实际位置反解出来的。

我在模板里加了 \calgrade(20××,约 31.5pt)插在「年」前面,
整串被推到 x=399.74;后面用 \hspace{-8.35mm} 去拽「月」,
负 kern 只减「年」「月」之间的空隙,减成负数就成了重叠。

关键认识

负 \hspace 不能把已经排出去的「年」收回来,只能压缩后续间距。
正确做法是让年份右对齐到「年」的左边界,而不是让「月」去追年份:

\hspace*{81.49mm}%
{\calfontC\makebox[34.16pt][r]{\calgrade}年}%   盒右界 = 355.08
\hspace*{10.60pt}\calfontC 月\hspace*{10.60pt}日\par

唯一能让「年」位置固定的写法:把年份塞进定宽 \makebox,
让盒宽吸收占位符长度变化。用户换成 2026 或 2026 年 10 月
都不会再动「月」「日」的位置。

实测(修正后)

锚点 原件 修正后 Δ
「院(系)负责人签字」x 321.00 320.99 −0.01
「年」字形 x 355.08 355.53 +0.45
「月」x 376.08 376.08 0.00
「日」x 397.08 397.14 +0.06

三字完全分开,零重叠。

验收

  • 编译 3 页、零警告(Overfull / Underfull / Missing character 全 0)
  • 干净克隆重编:第 1、2 页 md5 与修改前完全一致,仅第 3 页变化
    → 改动未波及表格与抬头
  • 真实数据 13 个关键词零命中(闭卷/开卷 原在 \calassess 注释里,已改掉)
  • README.md 同步更新验收表 + 「原件的不一致之处」第 5 条重写为
    完整踩坑复盘(含失败方案)

文档改善

README 里这一节现在写清了为什么要定宽盒子,不只是怎么写。
下次有人换年份格式时能看懂约束,不会又把三个字叠回去。

## 缺陷修正:签字栏「年 月 日」三个字重叠 → 已修复并推送 **提交** `3b67659` 修复签字栏年月日重叠:年份改用定宽右对齐盒子 #8 **已推送** `origin/main` ### 根因 反查原件 PDF 的 span 坐标确认:**原件里年份是空的**,原文就是 「` 年`」+两个空格+「`月`」,留白给老师手写签日期。 `\hspace*{92.604mm}` 是按「` 年`」的实际位置反解出来的。 我在模板里加了 `\calgrade`(`20××`,约 31.5pt)插在「年」前面, 整串被推到 x=399.74;后面用 `\hspace{-8.35mm}` 去拽「月」, 负 kern 只减「年」「月」之间的空隙,减成负数就成了重叠。 ### 关键认识 **负 `\hspace` 不能把已经排出去的「年」收回来**,只能压缩后续间距。 正确做法是让**年份右对齐到「年」的左边界**,而不是让「月」去追年份: ```latex \hspace*{81.49mm}% {\calfontC\makebox[34.16pt][r]{\calgrade}年}% 盒右界 = 355.08 \hspace*{10.60pt}\calfontC 月\hspace*{10.60pt}日\par ``` 唯一能让「年」位置固定的写法:把年份塞进**定宽 `\makebox`**, 让盒宽吸收占位符长度变化。用户换成 `2026` 或 `2026 年 10 月` 都不会再动「月」「日」的位置。 ### 实测(修正后) | 锚点 | 原件 | 修正后 | Δ | |---|---|---|---| | 「院(系)负责人签字」x | 321.00 | 320.99 | −0.01 | | 「年」字形 x | 355.08 | 355.53 | +0.45 | | 「月」x | 376.08 | **376.08** | **0.00** | | 「日」x | 397.08 | 397.14 | +0.06 | 三字完全分开,零重叠。 ### 验收 - 编译 **3 页、零警告**(Overfull / Underfull / Missing character 全 0) - 干净克隆重编:第 1、2 页 md5 与修改前**完全一致**,仅第 3 页变化 → 改动未波及表格与抬头 - 真实数据 13 个关键词零命中(`闭卷`/`开卷` 原在 `\calassess` 注释里,已改掉) - `README.md` 同步更新验收表 + 「原件的不一致之处」第 5 条重写为 完整踩坑复盘(含失败方案) ### 文档改善 README 里这一节现在写清了**为什么**要定宽盒子,不只是**怎么**写。 下次有人换年份格式时能看懂约束,不会又把三个字叠回去。
laoyang reopened this issue 2026-10-27 00:55:33 +00:00
Author
Owner

签字栏去掉年份占位符,只留「年 月 日」

用户要求:20××年 这个地方不用填了,直接就是「年 月 日」。

改动

删除 \calgrade 宏(以及它在签字栏的 \makebox 包装),签字栏第二行改为:

\hspace*{93.517mm}\calfontC 年\hspace*{10.55pt}月\hspace*{10.55pt}日\par

现在是纯空白填空位,打印出来就是「年  月  日」,老师手写签日期。

逐字符实测(与原件印刷位置对齐)

反查原件 PDF 的逐字符坐标时发现一个重要事实:原件那一行其实印着
4 个半角数字
(x=331.44~352.50),只是在 span 级过滤时被漏掉了 ——
之前误以为「原件年份是空的」。数字后跟一个空格,再是「年」。

字 原件 x 现在 x Δ
年 355.08 355.09 +0.01
月 376.08 376.09 +0.01
日 397.08 397.10 +0.02

三个字与学校原表逐字重合,只是年份那段留白了。

偏移量的来历(可复现)

目标 x = 355.09pt = 125.23mm。caloutside 的 \leftskip 是 15.963mm、
geometry left 是 15.787mm,叠加后排版起点在 31.75mm,故
125.23 − 31.75 = 93.48mm。实测 93.48mm 落在 354.98(偏左 0.10pt),
加 0.037mm 微调到 93.517mm,实测 355.09(偏右 0.01pt)。

关键认识(已写入 README)

问题不是排版技巧不够,而是那行本来就不该有年份。

上一版为了塞进 20×× 占位符,用 \hspace{-8.35mm} 去拽「月」,
结果三字重叠 —— 因为负 \hspace 只能压缩后续间距,减到负数就是重叠,
不能把已经排出去的字符收回来。

去掉占位符后,这一行只有三个中文字,宽度恒定,位置永远稳定,
不存在任何漂移风险。

验收

  • 编译 3 页、零警告(Overfull / Underfull / Missing character / undefined 全 0)
  • 干净克隆重编:三页 md5 全部一致(98e5fa9edbbb),完全可复现
  • 第 1、2 页 md5 与上一版相同 → 改动只在签字栏,未波及表格与抬头
  • 真实数据 12 个关键词零命中。顺带修掉了注释里的真实年份
    (原写作「年份位印着 "2022"」,已改为「印着 4 个半角数字」)
  • README.md:删掉 \calgrade 一行;验收表更新为新坐标;
    「原件的不一致之处」第 5 条重写为「是手写填空位,不要填年份」,
    附偏移量推导、踩坑复盘,以及如需预填年份时的正确写法
    (\hspace*{81.52mm}{\calfontC\makebox[34.0pt][r]{2026}年}...,已实测)

提交

88b3e08 签字栏去掉年份占位符,只保留手写填空位「年 月 日」 #8

## 签字栏去掉年份占位符,只留「年 月 日」 用户要求:**`20××年` 这个地方不用填了,直接就是「年 月 日」**。 ### 改动 删除 `\calgrade` 宏(以及它在签字栏的 `\makebox` 包装),签字栏第二行改为: ```latex \hspace*{93.517mm}\calfontC 年\hspace*{10.55pt}月\hspace*{10.55pt}日\par ``` 现在是纯空白填空位,打印出来就是「年  月  日」,老师手写签日期。 ### 逐字符实测(与原件印刷位置对齐) 反查原件 PDF 的**逐字符**坐标时发现一个重要事实:原件那一行其实**印着 4 个半角数字**(x=331.44~352.50),只是在 span 级过滤时被漏掉了 —— 之前误以为「原件年份是空的」。数字后跟一个空格,再是「年」。 | 字 | 原件 x | 现在 x | Δ | |---|---|---|---| | 年 | 355.08 | **355.09** | +0.01 | | 月 | 376.08 | **376.09** | +0.01 | | 日 | 397.08 | **397.10** | +0.02 | 三个字与学校原表**逐字重合**,只是年份那段留白了。 ### 偏移量的来历(可复现) 目标 x = 355.09pt = 125.23mm。`caloutside` 的 `\leftskip` 是 15.963mm、 geometry `left` 是 15.787mm,叠加后排版起点在 31.75mm,故 `125.23 − 31.75 = 93.48mm`。实测 93.48mm 落在 354.98(偏左 0.10pt), 加 0.037mm 微调到 **93.517mm**,实测 355.09(偏右 0.01pt)。 ### 关键认识(已写入 README) **问题不是排版技巧不够,而是那行本来就不该有年份。** 上一版为了塞进 `20××` 占位符,用 `\hspace{-8.35mm}` 去拽「月」, 结果三字重叠 —— 因为负 `\hspace` 只能压缩后续间距,减到负数就是重叠, 不能把已经排出去的字符收回来。 去掉占位符后,这一行只有三个中文字,**宽度恒定,位置永远稳定**, 不存在任何漂移风险。 ### 验收 - 编译 **3 页、零警告**(Overfull / Underfull / Missing character / undefined 全 0) - 干净克隆重编:**三页 md5 全部一致**(`98e5fa9edbbb`),完全可复现 - 第 1、2 页 md5 与上一版相同 → 改动只在签字栏,未波及表格与抬头 - 真实数据 12 个关键词**零命中**。顺带修掉了注释里的真实年份 (原写作「年份位印着 "2022"」,已改为「印着 4 个半角数字」) - `README.md`:删掉 `\calgrade` 一行;验收表更新为新坐标; 「原件的不一致之处」第 5 条重写为「是手写填空位,不要填年份」, 附偏移量推导、踩坑复盘,以及**如需预填年份**时的正确写法 (`\hspace*{81.52mm}{\calfontC\makebox[34.0pt][r]{2026}年}...`,已实测) ### 提交 `88b3e08` 签字栏去掉年份占位符,只保留手写填空位「年 月 日」 #8
laoyang reopened this issue 2026-10-27 01:15:22 +00:00
Author
Owner

删除表格末尾的「课程考核及评价方式」行

用户要求:教学日历中,考核方式那一块去掉吧。因为有单独的成绩构成
说明文件,那个就不需要了。

改动

原表格 18 行(表头 + 16 周 + 考核方式),现 17 行(表头 + 16 周)。

  • 课程教学日历.tex:删掉跨 7 列的 \SetCell[c=7]{m,wd=142.34mm} 大格及其两段文字
  • oucal.sty:删掉 row{18}={ht=69.00pt}

表头上方课程信息里的【考核方式】字段(\calassess)保留 ——
那是一个字段占位,不占用一整行,与「单独的说明文件」不重复。
若你连这个也要去掉,删掉 .tex 第 85 行的 \hfill 【考核方式】~\calassess 即可。

附带效果:页数从 3 页回到 2 页

删掉这一行后总高减少 69.5pt,表格不再顶到第 3 页,正好 2 页,
与学校原件页数一致。之前 README 里记的「3 页(原件 2 页)」这个取舍
现在不需要了 —— 那个取舍的起因是「第一周行距照原件会多 22pt」,
现在整个表短了 69pt,这个差额被吸收了。

留了恢复说明

.tex 里保留了一段注释,写明若要恢复该行需要:

  1. 在 sty 的 colspec 后补回 row{18}={ht=69.00pt},
  2. 在最后一个 \\ 后加回跨列格(必须显式给 wd,否则报 Overfull)

验收

  • 2 页、零警告(Overfull / Underfull / Missing character 全 0)
  • 其余 17 行行高、竖线位置、表头折行均未受影响
  • 干净克隆重编可复现

提交

a458913 教学日历删掉表格末尾的「课程考核及评价方式」行(另有独立成绩构成说明) #8

## 删除表格末尾的「课程考核及评价方式」行 用户要求:**教学日历中,考核方式那一块去掉吧。因为有单独的成绩构成 说明文件,那个就不需要了。** ### 改动 原表格 18 行(表头 + 16 周 + 考核方式),现 17 行(表头 + 16 周)。 - `课程教学日历.tex`:删掉跨 7 列的 `\SetCell[c=7]{m,wd=142.34mm}` 大格及其两段文字 - `oucal.sty`:删掉 `row{18}={ht=69.00pt}` 表头上方课程信息里的【考核方式】字段(`\calassess`)**保留** —— 那是一个字段占位,不占用一整行,与「单独的说明文件」不重复。 若你连这个也要去掉,删掉 `.tex` 第 85 行的 `\hfill 【考核方式】~\calassess` 即可。 ### 附带效果:页数从 3 页回到 2 页 删掉这一行后总高减少 69.5pt,表格不再顶到第 3 页,**正好 2 页**, 与学校原件页数一致。之前 README 里记的「3 页(原件 2 页)」这个取舍 现在不需要了 —— 那个取舍的起因是「第一周行距照原件会多 22pt」, 现在整个表短了 69pt,这个差额被吸收了。 ### 留了恢复说明 `.tex` 里保留了一段注释,写明若要恢复该行需要: 1. 在 sty 的 colspec 后补回 `row{18}={ht=69.00pt},` 2. 在最后一个 `\\` 后加回跨列格(必须显式给 `wd`,否则报 Overfull) ### 验收 - **2 页、零警告**(Overfull / Underfull / Missing character 全 0) - 其余 17 行行高、竖线位置、表头折行均未受影响 - 干净克隆重编可复现 ### 提交 `a458913` 教学日历删掉表格末尾的「课程考核及评价方式」行(另有独立成绩构成说明) #8
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/ouc_latex_template#8