Files
ouc_latex_template/课程大纲/README.md
T
laoyang dc5e9337e8 新增《本科生课程大纲》LaTeX 模板 #23
源文件:SynologyDrive\授课\数字逻辑\教学大纲\课程大纲模板-数字逻辑-2024版.docx
(2025-01-02 修订,是同目录 17 个文件里最新的一个)。所有尺寸从 OOXML 量出。

## 新增文件

   课程大纲/oucSyllabus.sty   版式包
   课程大纲/课程大纲.tex      示例(数字逻辑,已脱敏)
   课程大纲/README.md         用法

## 版式参数(实测)

   页面    A4 210×297mm
   边距    上下左右均 25.4mm(正好 1 英寸)
   正文    12pt      大标题 15pt 居中      表格 9~10pt
   原 docx 字体:Times/宋体/黑体/仿宋_GB2312/微软雅黑

字体全部取自 ../fonts.tex(OUC Serif + OUC Sans),无系统字体依赖。
仿宋_GB2312 与微软雅黑是商业字体,不能随仓库分发(#17 的规矩)。

## 还原的 6 个表格

   表0  课程基本信息   6 行,不规则(各行列跨度不同)
   表1  课程目标×指标点  6×6 打勾矩阵
   表2  目标×教学内容    6×3
   表3  教学进度         8×5(主要大表)
   表4  成绩与能力对应   6×4
   表5  成绩评分体系     5×2

## 踩坑记录(都写进代码注释了)

### 1. tabularray 的 \SetCell 会吞掉下一格,且不报错

`\SetCell[c=2]{c} 内容 & 下一格` → **下一格连同内容一起消失**。

最小复现(6 列表):
    A & \SetCell[c=2]{c} B & C & \SetCell[c=2]{c} D \\
渲染只得 A / B / D,C 没了。**没有报错,没有任何警告。**

✅ 正确写法:跨 n 列后用 n-1 个 `{}` 占位
    A & \SetCell[c=2]{c} B & {} & C & \SetCell[c=2]{c} D & {} \\

⇒ 规律:`&` 总数固定为「列数-1」,与是否跨列无关。
   跨列只是把内容摊到多格上,被摊掉的格要用 `{}` 顶住。

这个坑让「责任教师」「课程性质」「总课时」三个标签凭空消失了三轮,
每次都要靠 pymupdf 逐行数文字才发现。README 里也记了。

### 2. xeCJK 带缩进的段落会多排一个字,但也不报 Overfull

A4、左右 25.4mm、\linewidth=452.97pt、版心右界 523.28bp 下实测:

    无缩进的纯中文段落     右缘 523.28  ✅
    带 2em 缩进(三种写法) 右缘 530.53  ❌ 超 7.25bp

三种失败的写法:
    ① \par\noindent\hspace*{2em}#1\par
    ② \par\setlength{\parindent}{2em}\indent #1\par
    ③ \parbox{\linewidth}{\setlength{\parindent}{2em}\indent #1}

根因:xeCJK 算断行点时仍按「整行可用宽度」,比应停的位置多放一个字。

✅ 正解:把 \hsize 也减掉缩进量
    \setlength{\hsize}{\dimexpr\linewidth-2em\relax}
    \setlength{\parindent}{2em}
实测右缘 502.28bp,落在版心内。

⚠️ 同样**不报 Overfull** —— TeX 认为这行"刚好"。

### 3. 表 0 列宽不能用固定值

课程代码「080502101231」12 位数字,10.5pt 下宽约 22mm + 内边距 3.81mm。
标签列 26.5mm → Overfull 10.26pt;24mm → 3.14pt;22mm → 0。
22mm 是下限(再窄「课程名称」自己折行)。

## 验证

全库 14/14 通过(新增第 14 项,已加入 verify_all.sh TARGETS):

   课程大纲  6 页  err=0 over=0

逐页越界检查:6 页最右 499.37~514.48bp,全部在版心 523.3bp 内。
内容核查:标题、12 项基本信息、八章标题、7 个关键段落、签字栏,
共 17 项全部命中。

双端一致:
   WSL TeX Live 2025    6 页 err=0 over=0
   Windows TeX Live 2022 6 页 err=0 over=0

## 偏离原文件的地方(README 有表)

1. 「六、成绩评定」原 docx 是 10.5pt,与其余七章 12pt 不一致
   (复制粘贴漏改),本模板统一 12pt。
2. 表 0 的竖线按 6 等分统一,原 docx 逐行不同(tabularray 限制)。

## 脱敏

责任教师等真实姓名换成虚构的「张远航」,与仓库其他模板一致。
2026-10-30 13:45:19 +08:00

126 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 课程大纲
中国海洋大学本科生课程大纲 LaTeX 模板。
## 来源
版式取自学校下发的 `课程大纲模板-数字逻辑-2024版.docx`
(2025-01-02 修订,45 段落 + 6 表格),所有尺寸从 OOXML 量出。
## 编译
```bash
cd 课程大纲
xelatex 课程大纲.tex # 单次即可,无交叉引用
```
或在仓库根:
```bash
bash build.sh 课程大纲
```
## 换课程改哪里
只有三处:
1. **文首的课程基本信息**(`\sylnamecn` 等 12 个宏)—— 对应表 0
2. **各章节正文** —— 一至八章
3. **四个表格的内容**
## 文件
| 文件 | 作用 |
|---|---|
| `oucSyllabus.sty` | 版式包(页面、字体、表格环境) |
| `课程大纲.tex` | 示例,用数字逻辑的真实内容(已脱敏) |
| `README.md` | 本文件 |
## 版式参数(实测)
```
页面 A4 210 × 297 mm
边距 上下左右均 25.4 mm(正好 1 英寸)
正文字号 12pt
大标题 15pt 居中
表格 9~10pt
```
## 字体
全部取自仓库 `../fonts.tex`,**无系统字体依赖**:
| 用途 | 字体 |
|---|---|
| 中文正文 | OUC Serif(思源宋体子集) |
| 章节标题 | OUC Sans(思源黑体子集) |
| 西文数字 | 默认西文族(`\TNR{}` 可局部切换) |
⚠️ 原 docx 用了「仿宋_GB2312」和「微软雅黑」,都是商业字体,
不能随仓库分发,且换机器编不出来。这是 #17 脱敏时定下的规矩。
## 结构说明
一章一节对照:
| 章节 | 内容 | 表格 |
|---|---|---|
| 表 0 | 课程基本信息 | 6 行,不规则(见下) |
| 一 | 课程介绍 | — |
| 二 | 课程目标 | 表 1(打勾矩阵)、表 2(目标×内容) |
| 三 | 学习要求 | — |
| 四 | 教学进度 | 表 3(8×5) |
| 五 | 参考教材 | — |
| 六 | 成绩评定 | 表 4(成绩对应)、表 5(评分体系) |
| 七 | 学术诚信 | — |
| 八 | 大纲审核 | — |
### 表 0 是不规则表
四行的列跨度不同:
```
R0 课程名称 | (中文)xxx ← 值跨 5 列
R1 课程名称 | (英文)xxx ← 值跨 5 列
R2 课程代码 | 值 | 责任教师 | 值 ← 4 格
R3 课程属性 | 值 | 课程性质 | 值 ← 4 格
R4 学分 | 值 | 总课时 | 值 ← 4 格
R5 理论课时 | 值 | 实践课时 | 值 | 课外学时 | 值 ← 6 格
```
### ⚠️ tabularray 的 `\SetCell` 陷阱(重要)
**`\SetCell[c=n]{c} 内容 & 下一格` 会吞掉下一格,内容消失,且不报错。**
最小复现(6 列表):
```latex
A & \SetCell[c=2]{c} B & C & \SetCell[c=2]{c} D \\
% 渲染只得 A / B / D —— C 消失了
```
正确写法:跨 n 列后用 n-1 个 `{}` 占位
```latex
A & \SetCell[c=2]{c} B & {} & C & \SetCell[c=2]{c} D & {} \\
% 渲染得 A / B / C / D,位置正确
```
**规律:`&` 总数固定为「列数 - 1」,与是否跨列无关。**
跨列只是把内容摊到多格上,被摊掉的格要用 `{}` 顶住。
例外:`c=n` 放在行末(直接 `\\`,后面不接 `&`)也能正确渲染,
这种写法更易读,本模板 R0/R1 用的就是它。
## 已知偏离
| 位置 | 原 docx | 本模板 | 原因 |
|---|---|---|---|
| 「六、成绩评定」字号 | 10.5pt | 12pt | 原文件此处与其余七章不一致,是复制粘贴漏改 |
| 行距 | 由 Word 自动 | 12pt/19pt | 与原文件观感一致,未逐行卡死 |
| 表 0 的竖线 | 逐行不同 | 统一 6 等分 | tabularray 限制,见上 |
## 脱敏
责任教师等姓名一律为虚构(`张远航`),与仓库其他模板一致。
真实内容不进仓库。