Files
ouc_latex_template/课程大纲
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
..

课程大纲

中国海洋大学本科生课程大纲 LaTeX 模板。

来源

版式取自学校下发的 课程大纲模板-数字逻辑-2024版.docx (2025-01-02 修订,45 段落 + 6 表格),所有尺寸从 OOXML 量出。

编译

cd 课程大纲
xelatex 课程大纲.tex        # 单次即可,无交叉引用

或在仓库根:

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 列表):

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 & {} \\
% 渲染得 A / B / C / D,位置正确

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

例外:c=n 放在行末(直接 \\,后面不接 &)也能正确渲染, 这种写法更易读,本模板 R0/R1 用的就是它。

已知偏离

位置 原 docx 本模板 原因
「六、成绩评定」字号 10.5pt 12pt 原文件此处与其余七章不一致,是复制粘贴漏改
行距 由 Word 自动 12pt/19pt 与原文件观感一致,未逐行卡死
表 0 的竖线 逐行不同 统一 6 等分 tabularray 限制,见上

脱敏

责任教师等姓名一律为虚构(张远航),与仓库其他模板一致。 真实内容不进仓库。