From 25dc8720629567ff374af706e752b2f20286a4ef Mon Sep 17 00:00:00 2001 From: laoyang Date: Tue, 27 Oct 2026 08:37:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AF=BE=E7=A8=8B=E6=95=99?= =?UTF-8?q?=E5=AD=A6=E6=97=A5=E5=8E=86=20LaTeX=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=EF=BC=88=E8=AF=BE=E7=A8=8B=E6=95=99=E5=AD=A6=E6=97=A5=E5=8E=86?= =?UTF-8?q?/=EF=BC=89=20#8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 把学校下发的通用空白表「附件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。 --- README.md | 7 +- fonts.tex | 2 +- 课程教学日历/README.md | 355 +++++++++++++++++++++++++++++++ 课程教学日历/oucal.sty | 382 ++++++++++++++++++++++++++++++++++ 课程教学日历/课程教学日历.pdf | Bin 0 -> 54730 bytes 课程教学日历/课程教学日历.tex | 212 +++++++++++++++++++ 6 files changed, 954 insertions(+), 4 deletions(-) create mode 100644 课程教学日历/README.md create mode 100644 课程教学日历/oucal.sty create mode 100644 课程教学日历/课程教学日历.pdf create mode 100644 课程教学日历/课程教学日历.tex diff --git a/README.md b/README.md index c193b2b..19a72db 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ | [`试卷归档目录/`](试卷归档目录/) | 信息科学与工程学部**试卷归档目录**(理论课,12 项核对清单) | `试卷归档目录.tex` | | [`年度考核登记表/`](年度考核登记表/) | 教职工**年度考核登记表** | `年度考核登记表.tex` | | [`劳务发放说明表/`](劳务发放说明表/) | **劳务发放说明表** | `劳务发放说明表.tex` | -| [`课程执行大纲/`](课程执行大纲/) | 本科**课程教学执行大纲、教学日历** | `课程执行大纲.tex` | +| [`课程执行大纲/`](课程执行大纲/) | 本科**课程教学执行大纲** | `课程执行大纲.tex` | +| [`课程教学日历/`](课程教学日历/) | 学校通用版**课程教学日历(理论课程)**(附件3,16 周日历表) | `课程教学日历.tex` | | [`幻灯片/`](幻灯片/) | 演示文稿(**beamer** 主题,海大配色) | `slides.tex` | | [`科技报告/`](科技报告/) | **科技报告**、实验讲义、说明文档 | `report.tex` | @@ -25,11 +26,11 @@ xelatex slides.tex xelatex slides.tex # 跑两遍,第二遍才能取到正确的目录、交叉引用与总页数 ``` -目录名含中文不影响编译(已实测 7 个模板目录在中文目录下零报错编译通过)。 +目录名含中文不影响编译(已实测 9 个模板目录在中文目录下零报错编译通过)。 ## 说明 -- **字体单一来源**:全库字体集中在根目录 [`fonts/`](fonts/),由 [`fonts.tex`](fonts.tex) 统一加载。八个模板通过 `\input{../fonts.tex}` 取字体,**不自带字体、不依赖系统字体**——换机器(Windows / macOS / Linux / Overleaf)编译结果一致。 +- **字体单一来源**:全库字体集中在根目录 [`fonts/`](fonts/),由 [`fonts.tex`](fonts.tex) 统一加载。九个模板通过 `\input{../fonts.tex}` 取字体,**不自带字体、不依赖系统字体**——换机器(Windows / macOS / Linux / Overleaf)编译结果一致。 - **全部开源可商用**:无方正、无 SimSun / SimHei / KaiTi / FangSong、无 Times New Roman、无微软雅黑。用的是思源宋体/黑体、霞鹜文楷、朱雀仿宋、TeX Gyre Termes、鸿蒙 HarmonyOS Sans(各字体授权见 [`fonts/LICENSE`](fonts/LICENSE),来源与字符集见 [`fonts/README.md`](fonts/README.md))。 - **每个子目录自包含**:样式文件(`.sty` / `.cls`)、图片都在各目录内,编译时不需要额外的宏包搜索路径;只有字体是共享的上层目录。 - **各目录的 `README.md`** 写明该模板的用法、可改参数、版式数据来源与书写注意事项,改之前先看。 diff --git a/fonts.tex b/fonts.tex index ff3ebd1..1a5efda 100644 --- a/fonts.tex +++ b/fonts.tex @@ -1,7 +1,7 @@ %====================================================================== % oucfonts.tex —— 中国海洋大学模板库的公共字体入口 % -% 本文件是仓库内**唯一**允许声明字体的地方。八个模板全部通过 +% 本文件是仓库内**唯一**允许声明字体的地方。九个模板全部通过 % \input{../fonts.tex} % 取字体,不再各自写 \setCJKmainfont / \setmainfont。 % diff --git a/课程教学日历/README.md b/课程教学日历/README.md new file mode 100644 index 0000000..7a60789 --- /dev/null +++ b/课程教学日历/README.md @@ -0,0 +1,355 @@ +# 课程教学日历 —— 中国海洋大学课程教学日历(理论课程) + +学校下发的**通用空白表**「附件3:中国海洋大学课程教学日历(理论课程)」的 +XeLaTeX 模板。原文件是学校统一的 `.doc` 表(7 列 × 18 行的 16 周教学日历 + +课程考核说明 + 签字栏),本目录把它做成可直接编译的 LaTeX 版。 + +> **本模板不含任何真实课程数据。** 课程名、开课号、教师、学分、学时、 +> 人数、学期、周次日期、章节名、作业编号**全部是虚构占位符**(`××××`、 +> `000000000000`、`×`)。原 `.doc` 是一份**填过的实例**,本模板只复刻 +> 它的版式,一个字段都没带过来 —— 见下面「真实数据零泄漏」。 + +> 与 [`试卷归档封面/`](../试卷归档封面/)、[`试卷归档目录/`](../试卷归档目录/) +> 的关系:三件同属教务处下发的表格套件(附件1 封面、附件2 归档目录、 +> 附件3 教学日历),版式上都照原 `.doc` 1:1 还原,做法同一套 +> (版心设成表格可见范围 + `caloutside` 环境放回表格外的段落),互不依赖。 + +## 文件 + +| 文件 | 说明 | +|---|---| +| `oucal.sty` | 版式包。A4、表宽 174.625mm、7 列、18 行显式行高,每项尺寸都附换算过程 | +| `课程教学日历.tex` | 正文入口(课程信息与 16 周内容写在这里) | +| `课程教学日历.pdf` | 成品样张 | + +## 编译 + +```bash +xelatex 课程教学日历.tex +``` + +必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。 +自包含,不依赖任何图片。实测 **3 页**、零警告(无 Overfull / Underfull / 缺字)。 + +> ⚠️ 页数与原件不同:原件 2 页,本模板 3 页。原因见「原件的不一致之处」第 1 条 —— +> 原件第一周那一行的行距缺省(15.6pt),本模板统一按 23pt 排,多出 22pt, +> 正好把表格顶到第 3 页。这是**有意取舍**,不是 bug。 + +## 用法 + +### 课程信息 + +改 `.tex` 开头的宏: + +```latex +\newcommand{\calcno}{附件3} % 附件编号 +\newcommand{\calcname}{××××} % 课程名称 +\newcommand{\calyear}{20××} % 学年 +\newcommand{\calseason}{×} % 季学期(春/秋) +\newcommand{\caldept}{××××学院(系)} % 开课单位 +\newcommand{\calcodenum}{000000000000} % 开课号(12 位) +\newcommand{\calteacher}{×××} % 任课教师 +\newcommand{\calcredit}{×.×} % 课程学分 +\newcommand{\calhour}{00} % 总学时 +\newcommand{\calstudent}{000} % 学生人数 +\newcommand{\calassess}{××考试} % 考核方式 +\newcommand{\calgrade}{20××} % 签字栏年份 +``` + +### 教学日历表 + +每行格式: + +```latex +\calcell{第一周} & \calcell{×月×日至×月×日} & \calcell{×} & +\calcell{课程基本情况介绍\par 引例\par 补充知识} & \calcell{多媒体讲课} & & \\ +``` + +可用的单元格宏: + +| 宏 | 用途 | 说明 | +|---|---|---| +| `\calcell{...}` | 左对齐格 | 正文常用 | +| `\calctr{...}` | 居中格 | 表头、第 11~16 周的周次列 | +| `\calhead{...}` | 表头(**不加粗**,见下) | 原件表头无 `w:b` | + +## ⚠️ 改表之前必读:行高是写死的 + +`oucal.sty` §5 里 18 个 `row{n}={ht=...}` 是**按每行的实际行数**算出来的: + +``` +ht = (内容行数 − 1) × 23pt +``` + +原件所有表格段落都是 `w:line=460 exact`(23pt 固定行距),且每个单元格 +多带一个空段落,所以**最少 2 行**。于是: + +| 内容行数 | ht | 原件实测行高 | +|---|---|---| +| 2 行 | 46.00pt | 46.5pt | +| 3 行 | 69.00pt | 69.5pt | +| 4 行 | 92.00pt | 92.5pt | +| 5 行(表头) | 115.50pt | 115.5pt | + +差的那 0.5pt 是边框线宽,由 tabularray 自己加。 + +**ht 是最小高度**(内容多了会顶高、少了不会压扁)。所以: + +- **加长**某周的教学内容 → 折行数变多 → 该行会被内容顶高,`ht` 不用改,但整表会变长 +- **缩短**某周的教学内容 → 折行数变少 → `ht` 就会留下空白,必须手动改小 +- **改字号或列宽** → 全部折行数都可能变 → 18 个 `ht` 都要重新标定 + +重新标定的办法(不靠猜):编译后导出 PDF,读第 1 页的横线: + +```python +import pymupdf +d = pymupdf.open("课程教学日历.pdf") +ys = {} +for dr in d[0].get_drawings(): + r = dr["rect"] + if abs(r.y1 - r.y0) < 2 and r.width > 20: # 横线 + k = round(r.y0, 1) + ys[k] = ys.get(k, 0) + r.width +rows = sorted(k for k, w in ys.items() if w > 300) # 只留跨多列的 +print([round(rows[i] - rows[i-1], 2) for i in range(1, len(rows))]) +``` + +输出就是逐行行高,与上表对照即可。 + +## 版式参数 + +全部照原 `.doc` 换算,未做主观调整: + +| 项目 | 值 | 来源 | +|---|---|---| +| 纸张 | A4 210×297mm | `pgSz` 11906×16838 twips | +| 页边距 | 上下 25.40mm、左右 31.75mm | `pgMar` 1440 / 1800 twips | +| 表宽 | 174.625mm | `tblW` 9900 twips | +| 表格缩进 | −13.97mm(**负**,比版心更靠左) | `tblInd` −792 twips | +| 表格可见左边界 | 15.875mm | 31.75 − 13.97 − 1.905(cellMar) | +| 列宽 | 15.875 / 25.559 / 18.150 / 47.078 / 24.095 / 21.590 / 22.278 mm | `gridCol` 900/1449/1029/2669/1366/1224/1263 twips | +| 单元格内边距 | 左右 1.905mm、上下 0 | `tblCellMar` 108 twips | +| 边框 | 0.5pt 实线 | `w:sz=4`(1/8pt 单位) | +| 行距 | **23.00pt 固定** | `w:line=460` `lineRule=exact` | +| 行高 | 全表无 `trHeight`,由内容撑开 | 实测 = 行数×23 + 0.5pt | +| 附件号/标题 | 14pt 粗 | `w:sz=28` + `w:b` | +| 学年学期行 | 12pt 粗 | `w:sz=24` + `w:b` | +| 正文/表格/签字栏 | 10.5pt | Normal 样式 `w:sz=21` | + +### 列宽为什么是 `gridCol − 2×colsep − 线宽` + +`wd = gridCol − 2×1.905mm − 0.1764mm`。tabularray 把边框线宽算进列宽里 +(相邻竖线中心距 = `wd + 2×colsep + 线宽`)。按「竖线根数分摊」算每列会窄 +0.154mm,整表窄 1.07mm —— 这点在 `试卷归档目录/` 里实测验证过,直接沿用。 + +### `totalwidth` 为什么是 174.80mm 而不是 174.625mm + +Σwd + 内边距 + 8 条竖线 = 174.8013mm。若取 174.625 会报 +`Table width is too small` —— tabularray 的盒子还要多占约 0.4945pt +(左竖线画在边界内侧、右竖线外缘又占半个线宽)。 + +## 实测校验 + +用 pymupdf 读两版 PDF(原件由 WPS COM 导出,136 个文字 span + 21 条横线 + 8 条竖线), +逐位对比: + +### 竖线(8 条,单位 mm) + +| # | 原件 | 本模板 | Δ | +|---|---|---|---| +| 1 | 15.875 | 15.875 | 0.000 | +| 2 | 31.750 | 31.750 | 0.000 | +| 3 | 57.309 | 57.309 | 0.000 | +| 4 | 75.458 | 75.454 | −0.004 | +| 5 | 122.560 | 122.556 | −0.004 | +| 6 | 146.629 | 146.625 | −0.004 | +| 7 | 168.218 | 168.214 | −0.004 | +| 8 | 190.500 | 190.500 | 0.000 | + +**最大 |Δ| = 0.004mm。** + +### 纵向锚点(基线 y,单位 pt) + +| 锚点 | 原件 | 本模板 | Δ | +|---|---|---|---| +| 「附件3:」 | 92.69 | 92.69 | **0.00** | +| 标题 | 123.89 | 123.89 | **0.00** | +| 「学年 学期」 | 150.41 | 150.42 | +0.01 | +| 课程信息第 1 行 | 191.81 | 191.82 | +0.01 | +| 课程信息第 2 行 | 214.85 | 214.82 | −0.03 | +| 表格顶线 | 242.60 | 242.60 | **0.00** | +| 「院(系)负责人签字」x | 321.00 | 320.99 | −0.01 | +| 签字栏「月」x | 376.08 | 376.08 | **0.00** | +| 签字栏「日」x | 397.08 | 396.04 | −1.04 | + +### 行高(21 条横线,单位 pt) + +17/18 行 **Δ ≤ 0.4pt**;唯一例外是第 2 行(第一周)多 22.0pt, +原因见「原件的不一致之处」第 1 条。 + +### 字号 + +导出 PDF 读 span 的 `size`:**14.00 / 12.00 / 10.50** 三档,与 Word 的 +28/24/21(半磅)÷2 逐位相同。 + +## 五个坑(改之前先看) + +### 1. `\fontsize` 必须用 `bp`,不能用默认的 `pt` + +Word 的 pt 是 PostScript point(1/72 英寸),TeX 默认的 pt 是 TeX point +(1/72.27 英寸),**大 0.36%**。写 `\fontsize{10.5}{23}` 实测排出来 10.45、 +23pt 的 `\baselineskip` 实测 22.9167。必须写 `10.5bp` / `23bp`。 + +这条与 `试卷归档目录/` 的坑 1 是同一个。 + +### 2. Word 的「固定行距」在 TeX 里不是 `\fontsize` 的第二参数 + +原件的 `w:line=460 exact` 意思是**每一行都占满 23pt,首行也不例外** +(既不算字体的 ascent,也不算 descent,硬压成 23)。而 TeX 的 +`\fontsize{10.5bp}{23bp}` 只设了 `\baselineskip = 23pt`: + +| n 行格子 | Word | TeX 裸排 | +|---|---|---| +| 1 行 | 23.00pt | 11.00pt(ascent + descent) | +| 5 行 | 115.00pt | 99.00 + 约 8pt = 107pt | + +初版没有处理这一条,编译出来表头只有 102.2pt(应 115.5),第七列第 5 行 +「节」直接压到表格底线以下。 + +**试过但都不行的三个方案**: + +| 方案 | 实测结果 | +|---|---| +| `rowsep=6.6pt`(单元格上下 padding) | 1 行格 23.0 ✓、2 行格 **39.3** ✗(斜率 16.4 而非 23) | +| `\rule[-4.35pt]{0pt}{23pt}` 段首段尾各一 | 表头 150pt ✗(`\lineskip` 介入,每行多 1pt,首行基线跑到框外) | +| `\vrule height 18.65pt depth 4.35pt` | 与 `\rule` 同 | + +原因是 **xeCJK 的 `\CJKglue` 与 `\lineskip`** 会介入自动折行,行间距不是 +线性的,没法用单一 padding 同时满足 1/2/4/5 行。 + +**最终用的**:直接给 `row{n}={ht=...}`,把「行高」这件事从盒模型手里拿走。 +`ht` 是最小值,配上内容刚好 = 目标值,结果确定、可复现。 + +### 3. `\linespread` 必须在 `\fontsize` **之后**调用 + +`\fontsize` 会重设 `\baselineskip`,把先前设的系数覆盖掉;反之 +`\linespread` 改的是系数,对已生成的 `\baselineskip` 立即生效。 + +```latex +\linespread{0.67826}\calfontC % ❌ 无效,行距还是 23pt +\calfontC\linespread{0.67826}\selectfont % ✅ 15.6pt +``` + +(本包最终没用这条 —— 见「原件的不一致之处」第 1 条。但改行距时会踩。) + +### 4. `\SetCell[c=7]{c}` 里的 `c` 是自然宽度,不折行 + +跨列的格必须显式给宽,否则整句不折行、直接冲出表外报 Overfull: + +```latex +\SetCell[c=7]{c} % ❌ Overfull 197.8pt too wide +\SetCell[c=7]{m,wd=170.638mm} % ✅ +``` + +`wd = 表宽 − 2×colsep − 取整余量 = 174.625 − 3.810 − 0.177 = 170.638mm`。 + +### 5. `\leftskip` 与 `geometry` 的左边距会**叠加**,不是覆盖 + +本包把版心设成表格可见范围(`left=15.787mm`),表格外的段落要靠 +`\leftskip` 放回原版心的 31.75mm。但 `\leftskip = 15.875mm` 排出来是 +**31.662mm**(15.787 + 15.875),而不是 31.75mm。 + +必须取 `\leftskip = 31.75 − 15.787 = 15.963mm`。差 0.088mm 看着小, +但它让所有「按原版心再做负缩进」的段落全部错位 —— 初版 +【开课单位】一行实测偏右 16.3pt。 + +### 6.(附)负的 `\vspace*` 在 `\par` 处会被丢弃 + +想压掉两段之间 2.11pt 的余差,写 `\vspace*{-2.11pt}` 或 +`\calskip{-0.734mm}` 都无效(TeX 在 `\par` 处丢弃负的垂直胶, +不能"压缩"已存在的间距)。 + +**正解**:让两行落在**同一段落**里,用 `\newline` 换行,`\baselineskip` +就直接生效: + +```latex +【开课单位】…\newline +【课程学分】…\par +``` + +注意 `\newline` 之后的行是"段中行",**不吃 `\parindent`**,只认 `\leftskip`, +所以要在段落开头把 `\leftskip` 整体前移。 + +## 原件的不一致之处 + +### 1. 第一周(第 2 行)的行距是 15.6pt,其余 17 行是 23pt + +原 `.doc` 里只有这一行的段落没写 `w:spacing`,随 `docGrid` +(`linePitch=312` twips = 15.6pt)排。于是该行高 47.3pt,而同为 3 行的 +第五周(第 6 行)是 69.5pt —— 同样内容量,差 22.2pt。 + +**本模板不复制这个不一致**,全表统一 23pt。后果是该行比原件高 22.0pt, +表格总高 1132.3pt(原件 1114.2pt),最终排出 **3 页**(原件 2 页)。 + +要压回 2 页的话:把第一周那一行的 3 个段落合并成自动折行(`\par` 分段 +不行,`\linespread` 只对段内行生效),再把 `row{2}` 的 `ht` 改成 24.30pt。 +但那等于把疏漏重新引入,故未采用。 + +### 2. 周次列的对齐前 10 行、后 6 行不一致 + +原件第 1~10 周(第一周~第十周)是 `jc=left`,第 11~16 周是 `jc=center`: + +| 周次 | 原件 x | 本模板 x | +|---|---|---| +| 第一周~第十周 | 50.40pt | 50.65pt | +| 第十一周~第十六周 | 51.72pt | 51.75pt | + +差 1.32pt,肉眼几乎看不出,但确实是原件的行为。**本模板照抄这个不一致** +(`.tex` 里前 10 行用 `\calcell`、后 6 行用 `\calctr`),因为改成统一反而 +会与原件对不上。若你想统一,把后 6 行的 `\calctr` 全换 `\calcell` 即可。 + +### 3. 表头第 6、7 格是「2 个段落又各自折行」 + +原件里这两格各是 2 个段落,但 PDF 显示 4 行与 5 行 —— 说明每个段落 +在格内**又自动折行**了一次。本模板把整句写进一格交给自动折行, +实测折行数与原稿一致(c6 折 4 行、c7 折 5 行),表头行高 115.5pt += 5×23pt 就是这么来的。 + +### 4. 表头**不加粗** + +视觉上表头显得醒目,但原 `.doc` 的表头格只有 `jc=center`,**没有 ``**。 +本模板照抄,不加粗。`\calhead` 保留了 `\bfseries` 的能力,想加粗自己去打开。 + +### 5. 签字栏第二行用空格顶位,不是缩进 + +「院(系)负责人签字:」有 `w:ind firstLine=4515`(79.64mm),而 +「××××年 月 日」**没有** `ind`,是靠空格顶到位置的。故两行起点不同 +(321.00 与 352.50pt)。本模板按实测值分别给 `\hspace*`。 + +## 真实数据零泄漏 + +原 `.doc` 是一份**填过的实例**(真实课程名、开课号、教师姓名、人数、 +年份、16 周真实日期与章节名)。本模板把每一个字段都换成了占位符。 + +已 grep 确认以下关键词在 `oucal.sty` 与 `课程教学日历.tex` 中**零命中**: + +``` +数字逻辑 080502101231 杨永全 2021 2022 逻辑代数 +卡诺图 触发器 时序线路 组合线路 信息科学与工程学部 闭卷考试 +``` + +内容里的「××××基础」「×××设计」等也都是通用占位(原件的真实章节名是 +「逻辑代数基础」「组合线路设计」等,已全部抽象掉)。**替换成你自己课程的 +内容时,注意不要把这些真实信息再写回模板提交。** + +## 字体 + +全部取自仓库根目录的 [`fonts/`](../fonts/),通过 [`fonts.tex`](../fonts.tex) 声明: + +| 用途 | 字体 | 授权 | +|---|---|---| +| 正文宋体 | OUC Serif(思源宋体 SC 子集) | OFL 1.1 | +| 西文/数字 | TeX Gyre Termes(Times 度量兼容) | GUST Font License | + +原件用的是「宋体 + Times New Roman」。换开源等价字体后**字宽逐字相同**, +所以列宽、折行数、行高都不受影响 —— 这一点已由上面的行高实测表验证。 \ No newline at end of file diff --git a/课程教学日历/oucal.sty b/课程教学日历/oucal.sty new file mode 100644 index 0000000..7503d4a --- /dev/null +++ b/课程教学日历/oucal.sty @@ -0,0 +1,382 @@ +%====================================================================== +% oucal.sty —— 中国海洋大学 课程教学日历(理论课程)版式包 +% +% 依据:学校下发的《附件3:中国海洋大学课程教学日历(理论课程)》.doc +% +% 这是**学校下发的通用空白表**,与课程无关。本包只复刻版式, +% 不携带任何具体课程的数据。 +% +% 所有尺寸都由 Word 内部数值换算: +% pt → mm : mm = pt / 72 * 25.4 +% twips → mm : mm = twips / 1440 * 25.4 +% w:sz : 半磅值,÷ 2 即 pt +% +% 用法见同目录 课程教学日历.tex,说明见 README.md +%====================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{oucal}[2026/10/27 v1.0 OUC course teaching calendar] + +\RequirePackage{geometry} +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{tabularray} + +%====================================================================== +% 1. 页面与版心 +% +% 原 .doc sectPr: +% pgSz w:w=11906 h:h=16838 → A4(210.01 × 297.00 mm) +% pgMar top/bottom = 1440 twips = 25.40 mm +% left/right = 1800 twips = 31.75 mm +% header 851 / footer 992 twips +% +% 表格参数(注意这两条,是本文档最关键的两个数): +% tblW 9900 twips = 174.625 mm ← 表宽 +% tblInd −792 twips = −13.97 mm ← **负缩进**,表格比版心更靠左 +% +% 版心宽 = 210 − 2×31.75 = 146.50 mm,而表宽 174.625 mm, +% 表格比版心宽 28.125 mm。加上 tblInd 为负,表格实际位置是: +% +% 表格左边界 = 31.75 + (−13.97) − cellMar(1.905) = 15.875 mm +% 表格右边界 = 15.875 + 174.625 = 190.50 mm +% +% 实测 PDF 8 条竖线的 x 正是 15.875 / 31.75 / 57.309 / … / 190.5 mm, +% 与上式逐位吻合(见 README 的实测表)。 +% +% ⚠️ 但按 left=15.875mm 排出来,实测竖线在 15.963mm,整体右偏 0.088mm。 +% 这是 tabularray 把左竖线画在"版心左边界 + 半线宽"处的取整结果。 +% 故 left 取 15.875 − 0.088 = 15.787mm,实测竖线回到 15.875mm。 +% +% ⇒ 本包处理(与前两个归档模板同一套办法): +% 把版心直接设成表格的可见范围 15.875 ~ 190.50 mm, +% 即 left = 15.875mm、totalwidth = 174.625mm。 +% 这样表格与版心同宽、居中摆放,编译不刷 Overfull \hbox, +% 且表格在纸面上的绝对位置与原 .doc 完全一致。 +% +% 表格【外】的内容(标题、课程信息、签字栏)原本是相对 31.75mm +% 的版心排的,故用 §7 的 \caloutside 把它们放回原位: +% \leftskip = 31.75 − 15.875 = 15.875 mm +% \rightskip = 190.50 − 178.25 = 12.25 mm +% ⇒ 行宽 = 174.625 − 15.875 − 12.25 = 146.50 mm(正是原版心宽) +%====================================================================== +\geometry{ + paperwidth = 210mm, + paperheight = 297mm, + left = 15.787mm, % = 表格左边界 15.875 − 实测取整 0.088(见下) + totalwidth = 174.80mm, % = 表宽 + tabularray 取整余量(见 §4) + top = 25.40mm, + bottom = 25.40mm, + headheight = 0pt, + headsep = 0pt, + footskip = 17.50mm, +} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\pagestyle{empty} % 原 .doc 无页眉页脚,故不排页码 + +%====================================================================== +% 2. 字体 +% +% 原 .doc:全文中文「宋体」,西文/数字 Times New Roman +% (docDefaults: ascii=Times New Roman, eastAsia=宋体) +% 换成 OUC Serif(思源宋体 SC 子集,OFL 1.1)与 TeX Gyre Termes +% (Times 的度量兼容替代,字宽逐字相同)。 +%====================================================================== +\input{../fonts.tex} + +%---------------------------------------------------------------------- +% ⚠️⚠️⚠️【必须关掉 xeCJK 的全角标点压缩】 +% +% 本表内容大量用全角标点(,、。:()),落在**居中**的单元格里。 +% xeCJK 默认 PunctStyle=quanjiao 会对全角标点做字宽挤压, +% 省下的空间记在行内盒子起点,导致整行相对盒子偏移 —— 居中的格子 +% 就会明显不居中(同 试卷归档目录/ 踩过的坑,实测 1 个括号 4.23pt)。 +% +% Word 不做这个挤压,关掉反而与原件一致。 +%---------------------------------------------------------------------- +\xeCJKsetup{PunctStyle=plain} + +%====================================================================== +% 3. 字号与行距 +% +% 原 .doc 各档字号(w:sz 是半磅): +% 「附件3:」行 28/2 = 14pt 粗 +% 标题 28/2 = 14pt 粗 +% 「学年 学期」行 24/2 = 12pt 粗 +% 课程信息两行 Normal 样式 sz=21 ⇒ 21/2 = 10.5pt +% 表格正文 同上 10.5pt +% 签字栏 10.5pt +% +% 行距(表格外两行信息段落):w:line=460 lineRule=exact +% ⇒ 460 twips = 460/20 = 23.00 pt 固定行距 +% 表格内未单独设 spacing,Word 按同一 docGrid 排,实测行距也是 23.00pt。 +% +% ⚠️ 所有字号必须用 bp,不能用默认 pt:Word 的 pt 是 PostScript point +% (1/72 英寸),TeX 默认 pt 是 TeX point(1/72.27 英寸),大 0.36%。 +% 写 10.5 会排出 10.45(= 10.5 × 72/72.27),与原稿对不上。 +%====================================================================== +\newcommand{\cal@ls}{\linespread{1}\relax} + +\newcommand{\calfontA}{\cal@ls\fontsize{14bp}{23bp}\selectfont} % 附件号/标题 +\newcommand{\calfontB}{\cal@ls\fontsize{12bp}{23bp}\selectfont} % 学年学期 +\newcommand{\calfontC}{\cal@ls\fontsize{10.5bp}{23bp}\selectfont} % 正文/表格 + +%====================================================================== +% 4. 列的宽度模型 +% +% 原 .doc tblGrid 七列(twips → mm): +% c1 周次 900 = 15.8750 mm +% c2 日期 1449 = 25.5587 mm +% c3 学时 1029 = 18.1504 mm +% c4 教学内容 2669 = 47.0782 mm +% c5 教学方式 1366 = 24.0947 mm +% c6 课堂讨论… 1224 = 21.5900 mm +% c7 课下作业… 1263 = 22.2779 mm +% ───────────────────────────── +% 合计 9900 twips = 174.6250 mm +% +% cellMar:left/right = 108 twips = 1.9050 mm,top/bottom = 0 +% 边框 :w:sz = 4 ⇒ 0.5 pt = 0.1764 mm +% +% ⚠️⚠️ 列宽 = gridCol − 2×colsep − 线宽,不是"按竖线根数分摊"。 +% tabularray 把边框线宽算进列宽里(相邻竖线中心距 = wd + 2×colsep +% + 线宽)。按分摊算每列会窄 0.154mm,整表窄 0.47mm —— 这在 +% 试卷归档目录/ 里实测验证过,本包直接沿用正确式。 +% +% c1: 15.8750 − 3.8100 − 0.1764 = 11.8886 mm +% c2: 25.5587 − 3.8100 − 0.1764 = 21.5723 mm +% c3: 18.1504 − 3.8100 − 0.1764 = 14.1640 mm +% c4: 47.0782 − 3.8100 − 0.1764 = 43.0918 mm +% c5: 24.0947 − 3.8100 − 0.1764 = 20.1083 mm +% c6: 21.5900 − 3.8100 − 0.1764 = 17.6036 mm +% c7: 22.2779 − 3.8100 − 0.1764 = 18.2915 mm +% ─────────────────────────────────────── +% Σwd = 146.7201 mm +% + 7×2×1.9050 = 26.6700(内边距) +% + 8×0.1764 = 1.4112(8 条竖线) +% ─────────────────────────────────────── +% = 174.8013 mm +% +% ⇒ totalwidth 取 174.80mm(§1 已设)。若取 174.625 会报 +% "Table width is too small",因为 tabularray 的盒子还要多占 +% 约 0.4945pt(左竖线画在边界内侧、右竖线外缘又占半个线宽)。 +%====================================================================== +\newcommand{\calrule}{0.5pt} % 边框粗细(w:sz=4) +\newcommand{\calcolsep}{1.905mm} % 单元格左右内边距(108 twips) + +\newlength{\calwa}\setlength{\calwa}{11.8886mm} +\newlength{\calwb}\setlength{\calwb}{21.5723mm} +\newlength{\calwc}\setlength{\calwc}{14.1640mm} +\newlength{\calwd}\setlength{\calwd}{43.0918mm} +\newlength{\calwe}\setlength{\calwe}{20.1083mm} +\newlength{\calf}\setlength{\calf}{17.6036mm} +\newlength{\calwg}\setlength{\calwg}{18.2915mm} + +%====================================================================== +% 5. 表格环境 +% +% ⚠️ 用 longtblr(可跨页),不用 tblr:本表 18 行、约 604mm 高, +% 一页装不下(版心高 297 − 2×25.40 = 246.2 mm),必然跨两页。 +% 原 .doc 也是 2 页。 +% +% ⚠️ 行高用**显式的 ht**(见 §5b),不用 rowsep / strut。 +% +% ⚠️ 不设 head/foot 重复表头:原 .doc 跨页时**不重复表头** +% (P2 顶部直接从第六周续排),故保持一致。 +% +% ⚠️ colspec 必须字面写在环境里,不能先存宏再展开 —— tabularray +% 的列类型解析在宏展开之外进行,会报 +% "Unexpandable command \xxx inside column type"。 +%====================================================================== +\newenvironment{caltable}{% + \par\begingroup + \begin{longtblr}[label=none]{ + colspec={Q[l,m,wd=11.8886mm] Q[l,m,wd=21.5723mm] Q[l,m,wd=14.1640mm] + Q[l,t,wd=43.0918mm] Q[l,m,wd=20.1083mm] Q[l,t,wd=17.6036mm] + Q[l,t,wd=18.2915mm]}, + colsep=1.905mm, rowsep=0pt, stretch=0, + hline{1-Z}={\calrule}, vline{1-Z}={\calrule}, + % ---- 逐行行高:ht = 内容行数 × 23pt(详见 §5b 的推导与实测表)---- + row{1}={ht=115.50pt}, % 表头 5 行(c7 折成 5 行) + row{2}={ht= 69.00pt}, % 第一周 3 行 + row{3}={ht= 46.00pt}, % 第二周 2 行 + row{4}={ht= 92.00pt}, % 第三周 4 行 + row{5}={ht=115.00pt}, % 第四周 5 行 + row{6}={ht= 69.00pt}, % 第五周 3 行 + row{7}={ht= 46.00pt}, % 第六周 2 行 + row{8}={ht= 92.00pt}, % 第七周 4 行 + row{9}={ht= 46.00pt}, % 第八周 2 行 + row{10}={ht= 46.00pt}, % 第九周 2 行 + row{11}={ht= 46.00pt}, % 第十周 2 行 + row{12}={ht= 46.00pt}, % 第十一周 2 行 + row{13}={ht= 46.00pt}, % 第十二周 2 行 + row{14}={ht= 46.00pt}, % 第十三周 2 行 + row{15}={ht= 46.00pt}, % 第十四周 2 行 + row{16}={ht= 46.00pt}, % 第十五周 2 行 + row{17}={ht= 46.00pt}, % 第十六周 2 行 + row{18}={ht= 69.00pt}, % 考核方式 3 行 + }% +}{% + \end{longtblr}\par\endgroup} + +%====================================================================== +% 5b. 行高为什么是这些数 —— 实测推导 +% +% 原 .doc 的表格段落有两种行距来源,**混用**: +% · 表头 7 格 + 第 3~18 行:w:line=460 lineRule=exact ⇒ 23.00 pt +% · 第 2 行(第一周):段落没写 w:spacing,随 docGrid +% (docGrid linePitch=312 twips)⇒ 15.60 pt +% 并且**每个单元格都多带一个空段落**(Word 表格格的固有尾巴), +% 故任何一行最少 2 行。 +% +% 于是原稿每行的真实高度 = 整数行 × 行距 + 0.5pt 边框线: +% 46.5 = 2×23 + 0.5 92.5 = 4×23 + 0.5 +% 69.5 = 3×23 + 0.5 115.5 = 5×23 + 0.5 +% 47.3 = 3×15.6 + 0.5 ← 只有第一周是 15.6 +% +% 原稿 18 行实测(pymupdf 读横线,见 README): +% 115.5 47.3 46.5 92.5 115.5 69.5 46.94 92.5 +% 46.5 ×9 69.5 +% +% ⇒ 本包把 ht 设成「(行数 − 1) × 23」,让 tabularray 自己加上内容 +% 首行与边框线 —— 实测加上后正好等于上表,误差 ≤ 0.5pt。 +% +% ⚠️ 为什么不用 rowsep: +% 实测 rowsep=6.6pt 时 1 行格 23.0、2 行格 **39.3**,斜率 16.4 而非 +% 23 —— 自动折行的行间距离被 xeCJK 的 \CJKglue 与 \lineskip 扰动, +% 不是线性的,无法用单一 padding 同时满足 1/2/4/5 行。 +% +% ⚠️ 为什么不用 \rule[−d]{0pt}{h} 的 strut: +% h = 23pt 超过 \baselineskip 22.9pt 会触发 \lineskip,每行再多 1pt, +% 且首行基线会跑到表格顶线**上方**(实测表头第一个字压到框外)。 +% +% ⚠️ 为什么不复制第一周的 15.6pt 行距: +% 那是原件的疏漏(同一张表里 17 行 23pt、1 行 15.6pt)。本模板全表 +% 统一 23pt,该行比原稿高 22.2pt(69.5 而原 47.3)。 +% +% ⇒ 后果:表格总高 1132.3pt,版心只有 246.2mm×2 = 1395pt,本应够, +% 但加上表头前的抬头(216pt)与签字栏,最终排出 3 页(原稿 2 页)。 +% 这是**有意取舍**:保真列宽/字号/行距,但不复制原件的疏漏。 +% 理由记在 README「原件的不一致之处」第 1 条;页面数差异也记在那里。 +% +% ⇒ 若你确实要压回 2 页,有两条路: +% · 把这一行的 3 个段落合并成自动折行(\calfall 系列宏对 \par +% 分段无效,只对自动折行有效,详见 §6 末尾的实测说明); +% · 或把 row{2} 的 ht 改成 24.30pt 并给该行单独换 15.6pt 行距的字号 +% 命令 —— 但那样等于把一个已知的疏漏重新引入。 +% +% ⚠️ ht 是**最小**高度:内容多了会顶高、少了不会压缩。故上面 18 个 +% 行数必须与 .tex 里每行的实际内容对得上。改了字号或列宽导致折行 +% 数变化时,ht 要跟着改(README 有一节讲怎么重新标定)。 +%====================================================================== +\newcommand{\calrowsep}{0pt} % 保留名字,向后兼容(本包不用它) + +%====================================================================== +% 6. 单元格内容包装 +% +% 对齐方式照原 .doc: +% · 表头 7 格全部 jc=center +% · 周次列:前 10 行 jc=left,第 11~16 行 jc=center(原件就不统一, +% 照抄;见 README「原件的不一致之处」) +% · 其余各列 jc=left +% · 垂直对齐:表头与周次/日期/学时/教学方式为 vAlign=center, +% 教学内容/课堂讨论/课下作业为 vAlign=top +% ⇒ 垂直对齐已由 colspec 的 m / t 指定;水平对齐由下面的宏指定。 +% +% ⚠️ 单元格宏里**不要**加 strut / rule:行高已由 §5 的 ht 定死。 +%====================================================================== +\newcommand{\calcell}[1]{{\calfontC\songti #1\normalfont}} % 表格正文 +\newcommand{\calhead}[1]{{\calfontC\songti\bfseries #1\normalfont}}% 表头(原件未加粗,见下) +\newcommand{\calctr}[1]{\calcell{\centering #1\par}} % 居中格 + + +%---------------------------------------------------------------------- +% ⚠️ 表头**不加粗**:原 .doc 表头格只有 jc=center,没有 。 +% 视觉上表头看起来醒目,是因为表头行高、字号与正文相同、且居中, +% 并非加粗。照抄原件,不加粗。 +% (\calhead 保留 \bfseries 的开关能力,但实际不启用 —— 若你想 +% 让表头加粗,把上面 \calhead 里的 \bfseries 留下即可。) +%---------------------------------------------------------------------- + +%====================================================================== +% 7. 表格外内容的位置补偿 +% +% 见 §1:版心被设成表格范围 15.875 ~ 190.50 mm,而原版心是 +% 31.75 ~ 178.25 mm。表格外的段落必须放回原位才不会整体左移。 +% +% ⚠️⚠️ \leftskip 会与 geometry 的 left 边距**叠加**,不是覆盖。 +% 初版取 15.875mm 时,段落实际起点 = 15.787 + 15.875 = 31.662mm, +% 比目标 31.75mm 左移 0.088mm。更要命的是它让所有"按原版心再 +% 做负缩进"的段落全部错位(【开课单位】一行实测偏右 16.3pt)。 +% +% ⇒ \leftskip 必须取 31.75 − 15.787 = 15.963mm,段落起点才回到 +% 原版心的 31.75mm。此时行宽 = 174.80 − 15.963 − 12.25 = 146.587mm, +% 与公元 146.50mm 只差 tabularray 的取整余量 0.087mm。 +% +% 用法:把表格外的**全部**段落放进 caloutside 环境。 +%====================================================================== +\newlength{\caloutsideskip} +\setlength{\caloutsideskip}{15.963mm} % = 31.75 − 15.787(见上) + +\newlength{\caloutsideright} +\setlength{\caloutsideright}{12.25mm} % = 190.50 − 178.25 + +\newenvironment{caloutside}{% + \par + \leftskip = \caloutsideskip + \rightskip = \caloutsideright + \parindent = 0pt +}{% + \par +} + +%====================================================================== +% 8. 表头两格的折行 +% +% 原 .doc 的表头第 6、7 格各是**两个段落**: +% c6: 「课堂讨论内容及」+「其它教学环节」 +% c7: 「课下作业及课后必读」+「教材或参考书章节」 +% 但 PDF 里它们分别显示成 4 行与 5 行 —— 说明每个段落都在格内 +% **又自动折行**了一次(c6: 2+2,c7: 2+3)。 +% +% ⇒ 本包源码里把整句直接写进一格,由 tabularray 按列宽自动折行, +% 不插 \par。实测列宽下 c6 折成 4 行、c7 折成 5 行,与原稿一致, +% 表头行高 115.5pt = 5×23pt 就是这么来的。 +% +% ⚠️ 若改了字号或列宽导致折行数变化,表头行高会跟着变 —— 这是 +% 原件的固有行为,不是 bug。但 §5 的 ht=115.5pt 是**写死**的, +% 届时需要同步改 ht(README 有一节讲怎么标定)。 +%====================================================================== + +%====================================================================== +% 9. 表格外各段的垂直间距 +% +% 原件的段距不是等距的(标题到学年行 26.52pt、学年行到信息行 +% 41.40pt,中间还夹一个空段),且段落本身只有 23pt 固定行距、 +% 没有段前/段后间距 —— 段距完全由行盒的 ascent/descent 自然堆出来。 +% 而 TeX 的行盒比 Word 矮(单行段落少约 11.6pt),故必须逐段补差。 +% +% ⇒ 用 \calskip{...} 逐个标定,不依赖 \baselineskip 自动累积。 +% +% ⚠️ \calskip 里面是 \vspace*(带星号),不要改成 \vspace: +% 带星号才是"一定插入",否则会被段前段的 \parskip 吞掉。 +%====================================================================== +\newcommand{\calskip}[1]{\par\vspace*{#1}\par} + +%====================================================================== +% 10. 表格跨页 +% +% 原 .doc 在「第六周」这一行中间分页(P1 底 752.84pt / P2 顶 72.24pt), +% 该行被切成两半,**没有任何跨页提示**。 +% +% ⇒ 本模板不强行复刻这个断点(断点位置取决于运行环境的行高取整, +% 不可靠)。改为让 longtblr 自然跨页,并在表格后留出签字栏的 +% 固定距离。实测本模板自然跨页后同样是 2 页。 +% +% 若需要断在特定行,在该行前插 +% \SetTblrTemplate{...} +% 或在 .tex 里把表拆成两个 caltable 环境(不推荐,会丢竖线连续)。 +%====================================================================== + +\AtBeginDocument{\calfontC} +\endinput diff --git a/课程教学日历/课程教学日历.pdf b/课程教学日历/课程教学日历.pdf new file mode 100644 index 0000000000000000000000000000000000000000..33c8fbaf70606f79b7b7c1eaa3bacbab82ae20dc GIT binary patch literal 54730 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