Files
ouc_latex_template/课程执行大纲/ouccourse.sty
T
laoyang 3906bb49a4 清理代码库中的开发过程内容
- 删除 WORKFLOW.md(开发流程文档,已移入记忆库)
- build.sh 去掉 WSL 相关说明
- 33 个源文件的注释:去掉踩坑记录、实测推导、原文件对比、工单号引用
- 保留技术参数、约束说明、命令含义

净删 399 行。全库 16/16 编译通过。
2026-11-01 09:29:00 +08:00

529 lines
23 KiB
TeX
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.
%======================================================================
% ouccourse.sty —— 中国海洋大学 本科课程教学执行大纲、教学日历
%
% 由学校下发的 .docx 复刻而来。版式尺寸全部从原文件的 OOXML 量出,
% 换算过程逐条写在对应位置。
%
% ⚠️ 编译: xelatex 课程执行大纲.tex (单次即可,无交叉引用)
% 需要 ctex + geometry + fontspec + xeCJK + tabularray
% 实际TeX Live 2022 / tabularray 2022A
%======================================================================
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ouccourse}[2026/10/26 v1.0 OUC course syllabus form]
\RequirePackage{geometry}
\RequirePackage{fontspec}
\RequirePackage{xeCJK}
\RequirePackage{tabularray}
\RequirePackage{enumitem}
\RequirePackage{xcolor}
\ExplSyntaxOn
\cs_set_eq:NN \ccurlength \dim_use:N
\ExplSyntaxOff
%======================================================================
% 1. 页面
%
% sectPr:
% pgSz 11910 x 16840 twips → 210.08 x 297.04 mm
% pgMar top 1420 right 1300 bottom 280 left 1560
% header 720 footer 720
%
% ⚠️ 注意两件事:
% (a) WPS 存的 A4 是 11910x16840,比标准 A4 的 11906x16838 各多 4/2 twips。
% 差异 0.07/0.04 mm,肉眼不可辨,本包直接用标准 A4。
% (b) 下边距只有 4.94 mm,明显是原文件为“塞进 5 页”压出来的。
% 照抄会让最后一行几乎贴到纸边,故此处保留原值(复刻优先),
% 并在 README 里注明这一处的不合理。
%======================================================================
\geometry{
paperwidth = 210mm,
paperheight = 297mm,
left = 27.52mm, % 1560 twips
right = 22.93mm, % 1300 twips
top = 25.05mm, % 1420 twips
bottom = 4.94mm, % 280 twips ← 原文件如此,见上注
headheight = 0pt,
headsep = 0pt,
footskip = 12.70mm, % 720 twips
}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}
\pagestyle{empty} % 无页眉页脚、无页码
%======================================================================
% 2. 字体
%
% 用到 4 个字体,其中 3 个是方正商业字体:
% 方正小标宋简体 标题(嵌在 docx 里,系统未安装)
% 方正仿宋_GB2312 正文(同上)
% 黑体 各级标题
% 宋体 教学日历表正文、9pt
%
% 「本机恰好有 Windows 自带字体」的降级方案。问题有两层:
% ① 换台机器(Linux/macOS、或精简版 Windows)就编不出来;
% ② SimSun / SimHei / FangSong 都不允许随仓库分发。
%
% ⇒ 现改为全部取自仓库公共字体包 ../fonts.tex(字体文件在 ../fonts/ 下):
% 方正小标宋简体 → \ccbiaosong = OUC Serif 的**真粗体**
% (小标宋本就是宋体的标题变体,用真粗体比原来
% AutoFakeBold=3.2 的算法描边干净得多 ——
% 描边到 3.2 时笔画已经糊在一起)
% 方正仿宋_GB2312 → \ccfang = Zhuque Fangsong(朱雀仿宋)
% 黑体 → \cchei = OUC Sans(思源黑体)
% 宋体 → \ccsong = OUC Serif(思源宋体)
%
% ⚠️ 朱雀仿宋只有常规一档、没有粗体。原版 \ccfang 靠 AutoFakeBold=2.5
% 伪粗来排表头(课程执行大纲.tex 里 {\ccfang\ccszxi\bfseries ...})。
% 现在伪粗已取消,\bfseries 在 \ccfang 下**不会变粗**。若表头必须
% 加粗,请把那里的 \ccfang 换成 \cchei(黑体本身就是标题用的重字面)。
%======================================================================
\input{../fonts.tex}
%----------------------------------------------------------------------
% ⚠️ xeCJK 默认会在[汉字 ↔ 西文/数字]之间自动插一段空白(CJKecglue)。
% 里没有这种空白,例如「××学部××学院」「2026 学年」「56/3.0」
% 在 Word 里是紧挨着的。不关掉会出现「×× 学部×× 学院」这种多出来的空隙。
% 此处把 CJKecglue 设为 0,并关掉自动间距(xeCJK 的 punct/ec 两类)。
%----------------------------------------------------------------------
\xeCJKsetup{
CJKecglue = {},
xeCJKactive = true,
}
\setlength{\parindent}{0pt}
% 四个语义别名,沿用原命令名,正文一处都不用改。
% 用 \setCJKfamilyfont + \def 而非 \newCJKfontfamily:后者是 LaTeX3 的
% \NewDocumentCommand,若 ctex 已定义同名命令会直接报错中断(见 fonts.tex)。
\setCJKfamilyfont{ccsong}[
Extension = .otf,
Path = ../fonts/ouc-serif/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]{OUCSerif}
\def\ccsong{\CJKfamily{ccsong}}
\setCJKfamilyfont{cchei}[
Extension = .otf,
Path = ../fonts/ouc-sans/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]{OUCSans}
\def\cchei{\CJKfamily{cchei}}
% ⚠️ 朱雀仿宋只有常规一档、没有粗体。而教学日历的表头
% (课程执行大纲.tex 里的 {\ccfang\ccszxi\bfseries 周次} 等 6 处)
% 明确要加粗。若不加处理,\bfseries 会被静默忽略
% (日志报 "Font shape TU/ZhuqueFangsong/b/n undefined"),
% 表头就与表体一样细,层次全丢了。
%
% 解法:只给这一族开 FakeBold=0.4 的**算法加粗**。
% ① 原模板本来就靠 AutoFakeBold=2.5 伪粗,观感一致;
% ② 只影响 \ccfang,不污染其他字族(正文宋体/黑体都是真粗体);
% ③ 0.4 比原来 2.5 轻得多 —— 2.5 是 Word 描边档位,笔画会糊,
% 0.4 只加一点点笔宽,正好补上"表头该比表体重一点"的差异。
\setCJKfamilyfont{ccfang}[
Extension = .ttf,
Path = ../fonts/zhuque-fangsong/,
UprightFont = *-Regular,
BoldFont = *-Regular,
BoldFeatures = {FakeBold=0.8},
]{ZhuqueFangsong}
\def\ccfang{\CJKfamily{ccfang}}
% 小标宋的替代:宋体真粗体(不是伪粗)
\setCJKfamilyfont{ccbiaosong}[
Extension = .otf,
Path = ../fonts/ouc-serif/,
UprightFont = *-Bold,
BoldFont = *-Bold,
]{OUCSerif}
\def\ccbiaosong{\CJKfamily{ccbiaosong}}
%----------------------------------------------------------------------
% ⚠️⚠️⚠️ ctex 默认 \linespread ≈ 1.3,会把 \fontsize{12}{X} 的行距放大 30%。
% 本例所有行距都来自 docx 的精确值(460 twips = exact 23pt 等),
% 被放大就全错,故每次设字号前先把 \linespread 归 1。
%----------------------------------------------------------------------
\newcommand{\ccfont}[2]{%
\linespread{1}\relax\fontsize{#1}{#2}\selectfont}
% 常用字号(都是 docx 里实际出现的)
% 15pt = sz30 14pt = sz28 12pt = sz24 11pt = sz22 10.5pt = sz21 9pt = sz18
\newcommand{\ccszxv}{\ccfont{15}{23}} % 15pt(首页校名)
\newcommand{\ccszxiii}{\ccfont{14}{21}} % 14pt
\newcommand{\ccszxii}{\ccfont{12}{18}} % 12pt 正文
\newcommand{\ccszxi}{\ccfont{11}{16.5}} % 11pt
\newcommand{\ccszxxi}{\ccfont{10.5}{15.75}}% 10.5pt
\newcommand{\ccszix}{\ccfont{9}{13.5}} % 9pt 教学日历表
\AtBeginDocument{\ccszxii\ccsong}
%----------------------------------------------------------------------
% 3. 首页字段区
%
% P3~P8 共用同一个 pPr:
% <w:tabs><w:tab w:val="left" w:pos="7020"/></w:tabs>
% <w:spacing w:line="460" w:lineRule="exact"/>
% <w:ind w:left="-565" w:leftChars="-257" w:firstLine="220" w:firstLineChars="100"/>
%
% → 行距 460 twips exact = 23 pt
% → 左缩进 −565 twips = −9.97 mm(负缩进,把整行往左拉出版心)
% → 首行再 +220 twips = +3.88 mm
% → 制表位 7020 twips = 123.81 mm
%
% ⚠️⚠️ 实际docx 这几行是【溢出】的,不能照抄:
% 制表位绝对位置 = 27.52(左边距)+ 123.81 = 141.33 mm,
% 而右侧内容【开课时间】 2026 学年 秋 季学期 宽 58.20 mm,
% ⇒ 行尾落在 199.53 mm,已越过版心右边界 187.07 mm 达 12.5 mm,
% 钻进了 22.93 mm 的右边距里。原文件靠负缩进硬塞,视觉上不易察觉。
%
% ⇒ 本包改为干净的两栏等宽布局,两栏都对齐、整体不溢出:
% 左栏宽 100 mm(容纳【课程名】+值,最长 48.7 mm)
% 右栏从 100 mm 起,最长【开课时间】58.2 mm,合计 158.2 mm
% 版心 159.55 mm,留 1.35 mm 余量
% 各行左标签起点一致、右标签起点也一致,比原文件更整齐。
%----------------------------------------------------------------------
\newlength{\cccolw}
\setlength{\cccolw}{100mm}
% 下划线:把「值 + 尾部空格」一起划上,复现原文件里可填写的空档
\newcommand{\ccuv}[1]{\underline{#1}}
% \ccfieldrow{左标签}{左值}{右标签}{右值}
% 标签不加下划线,值加;原文件里值前后带空格,用以撑出填空长度
\newcommand{\ccfieldrow}[4]{%
\par\noindent
\makebox[\cccolw][l]{#1\ccuv{#2}}%
#3\ccuv{#4}%
\par}
% 单栏字段(任课教师、面向专业两行只占左半)
\newcommand{\ccfieldone}[2]{%
\par\noindent
#1\ccuv{#2}%
\par}
%======================================================================
% 4. 标题
%
% P0 校名+院名 小标宋 15pt / 14pt,居中
% P1 副标题 小标宋 14pt,居中
% P10 大标题 小标宋 15pt,居中,段后 240 twips = 12pt
% P11/P26/P39/P43/P46 一~五级标题:黑体 14pt
% —— 但 P46「五、学习要求…」的 run 是 黑体 14pt,
% 段落 rPr 却写 12pt + 下划线 + 红色(C00000)。这是原文件的
% 遗留脏属性,实际渲染按 run 的 14pt 黑体走,故本包按 14pt 黑体。
%======================================================================
%----------------------------------------------------------------------
% 校名 + 院名
%
% ⚠️ 上游这里把院名写死成「××学部××学院」。本仓库的规矩是示例内容
% 不能留 ×(满篇 × 既看不出排版效果,也没法直接对着改),所以拆成
% 两个名称宏,改名只动导言区,不用碰 .sty:
% \ccdepartment 学部名 默认「信息科学与工程学部」
% \cccollege 学院名 默认「计算机科学与技术学院」
% 默认值取自本模板的虚构设定(陈立群 / 电子信息工程 / 2025 秋),
% 与课程教学日历、成绩构成说明、试卷等模板保持一致。
%
% ⚠️ 为什么不写成 \ccschool[学部][学院]:LaTeX 的 \newcommand 只支持
% **一个**可选参数,第二个方括号会被当成正文印出来。要两个都得用
% xparse 的 \NewDocumentCommand,为一个院名不值当。
%
% ⚠️ 校名「中国海洋大学」是**真实**的、且是本模板库的主体,不虚构。
%----------------------------------------------------------------------
\newcommand{\ccdepartment}{信息科学与工程学部}
\newcommand{\cccollege}{计算机科学与技术学院}
\newcommand{\ccschool}{%
\par\begingroup\centering
{\ccbiaosong\ccszxv 中国海洋大学\par}%
{\ccbiaosong\ccszxiii \ccdepartment\cccollege\par}%
\endgroup}
\newcommand{\ccsubtitle}{%
\par\begingroup\centering
{\ccbiaosong\ccszxiii 本科课程教学执行大纲、教学日历\par}%
\endgroup}
\newcommand{\ccmaintitle}[1]{%
\par\begingroup\centering
\vspace*{0pt}%
{\ccbiaosong\ccszxv #1\par}%
\vspace*{12pt}% % spacing after=240 twips
\endgroup}
% 一~五级标题:黑体 14pt,段前 120 twips = 6pt
% \ccsec{一、课程基本信息}
\newcommand{\ccsec}[1]{%
\par\begingroup
\vspace*{6pt}% % spacing before=120 twips
\noindent{\cchei\ccszxiii #1\par}%
\endgroup}
% 不带段前的标题(四、教材及参考资料 用 firstLine 708 缩进)
\newcommand{\ccsecind}[1]{%
\par\begingroup
\vspace*{6pt}%
\noindent\hspace*{12.50mm}{\cchei\ccszxiii #1\par}% 708 twips = 12.50mm
\endgroup}
%======================================================================
% 5. 正文段落
%
% 正文(P12 起)统一:
% <w:ind w:firstLine="480" w:firstLineChars="200"/> 首行缩进 2 字
% 字体 方正仿宋_GB2312 12pt
% 无 spacing 设定 ⇒ 单倍行距
%
% 480 twips = 8.47mm,正好是 12pt 汉字的两个字宽(12pt×2 = 24pt = 8.47mm)
% ⇒ 用 2em 更稳,与字号自动匹配。
%======================================================================
\newcommand{\ccp}[1]{\par\noindent\hspace*{2em}#1\par}
% 无缩进段(用于表后、空行等)
\newcommand{\ccpz}[1]{\par\noindent #1\par}
% 空行:\ccblank{n} 产生 n 个 12pt 空行
\newcommand{\ccblank}[1]{%
\par\begingroup\ccszxii
\@tempcnta=0
\loop\ifnum\@tempcnta<#1\relax \mbox{}\par\advance\@tempcnta by 1 \repeat
\endgroup}
%======================================================================
% 6. 表 0 —— 成绩综合评分体系
%
% docx:
% tblW 0 auto(实际由 gridCol 撑开) gridCol = 7479 + 1418 = 8897 twips
% tblLayout fixed jc center
% tblBorders 六边 sz=4 → 0.5pt
% tblCellMar left/right 108 twips = 1.905mm,top/bottom 0
% 每行 trHeight 454 exact = 22.70pt = 8.01mm
% trPr 里还有 <w:jc w:val="center"/>(行内容居中)
% 字号 12pt 方正仿宋
%
% 8897 twips = 156.93 mm,版心 159.63 mm ⇒ 不超版心,可用 colsep 还原内边距
%
% ⚠️ 行高 454 twips 是 exact(固定),换算 22.70pt = 8.01mm。
% tabularray 的 ht= 是最小值语义,与 exact 略有差别;本表内容都是
% 单行文字,实际高度就等于 ht,故等价。
%======================================================================
\newcommand{\ccscoretblw}{156.93mm}
\newcommand{\ccscorecA}{131.921mm} % 7479 twips
\newcommand{\ccscorecB}{25.012mm} % 1418 twips
\newcommand{\ccborder}{0.5pt} % sz=4 → 0.5pt
\newcommand{\cccellsm}{1.905mm} % tblCellMar 108 twips
% 列宽:content 宽 = gridCol − 2·colsep − 线宽分摊
%
% 与表 1 同一个坑:tabularray 的 wd= 是【内容宽】,
% 每条 vline 自身还占 0.5pt = 0.17639mm。2 列 3 条线,每列承担 1.5 条 ⇒ 0.2646mm。
% ⇒ wd = gridCol − 3.81 − 0.2646 = gridCol − 4.0746mm
% A: 131.921 − 4.0746 = 127.846
% B: 25.012 − 4.0746 = 20.937
% Σ(wd + 2·colsep) + 3×0.176 = 148.783 + 7.62 + 0.529 = 156.932 ≈ 156.93 ✔
\newcommand{\ccscoreAwd}{127.846mm}
\newcommand{\ccscoreBwd}{20.937mm}
% ⚠️ 行高:docx 是 trHeight 454 exact = 22.70pt = 8.01mm。
% tabularray 的 ht= 含 hline 线宽预算,给 8.01mm 画出来是 8.19mm
% (每行多 0.18 = 一条 0.5pt 横线)。故减掉 0.176mm。
\newcommand{\ccscorerowht}{7.834mm}
\newenvironment{ccscoretable}{%
\par\begingroup\ccszxii\ccfang
\begin{tblr}[label=none]{
colspec={Q[c,m,wd=127.846mm] Q[c,m,wd=20.937mm]},
colsep=1.905mm, rowsep=0pt, stretch=0,
hline{1-Z}={\ccborder}, vline{1-Z}={\ccborder},
row{1-Z}={ht=7.834mm},
}%
}{%
\end{tblr}\par\endgroup}
%======================================================================
% 7. 表 1 —— 教学日历
%
% docx:
% tblW 9385 dxa gridCol = 846,1134,1877,850,2835,1843 = 9385 twips
% tblLayout autofit jc center
% tblBorders sz=4 0.5pt
% tblCellMar 108 twips 1.905mm
% R0 trHeight 917 atLeast = 16.17mm,表头 11pt 粗
% R1~R13 无 trHeight,行高由内容决定,数据 9pt 宋体
% R14 trHeight 1825 atLeast = 32.19mm(任课老师签字)
% R15 trHeight 1073 atLeast = 18.93mm(审核意见)
%
% ⚠️⚠️ 9385 twips = 165.54 mm,而版心只有 159.63 mm —— 超宽 5.91 mm!
% docx 里它靠 jc=center 硬居中、两边各溢约 3 mm,压进左右页边距。
% Word 允许表格比版心宽,照原样复刻,不做缩放(缩放会让长文字提前折行)。
% 本包做法:列宽照抄 gridCol,用 \hspace* 把表左边界推到实际的 27.4mm。
%
% ⚠️⚠️ 这张表【总高 334 mm】,版心只有 267 mm —— 必须跨页!
% 这就是排成 5 页的原因。表内 16 行,R1~R13 无 trHeight,
% 行高由内容(9pt 宋体多行)决定,各段行高见 README。
% docx 没有 tblHeader(跨页不重复表头)、没有 cantSplit(允许行内断开),
% 故本包用 longtblr,且清空表头/表尾模板,行为与 Word 一致。
%======================================================================
\newcommand{\cctblw}{165.54mm} % 9385 twips,与 docx 完全一致
% 原始 gridCol(mm)= twips / 1440 × 25.4
\newcommand{\cccA}{14.922mm} % 846
\newcommand{\cccB}{20.002mm} % 1134
\newcommand{\cccC}{33.108mm} % 1877
\newcommand{\cccD}{14.993mm} % 850
\newcommand{\cccE}{50.006mm} % 2835
\newcommand{\cccF}{32.508mm} % 1843
% content 宽 = gridCol − 2·colsep − 线宽分摊
%
% ⚠️ tabularray 的 wd= 是【内容宽】,但每条 vline 自身还占 0.5pt = 0.17639mm。
% 6 列共 7 条竖线,若全摊到 6 列上,每列承担 7/6 条 ⇒ 0.2058mm。
% ⇒ wd = gridCol − 3.81 − 0.2058 = gridCol − 4.0158mm
%
% 实际校验(改前 wd 按 gridCol−3.856 给,结果表宽 166.493 差 +0.95):
% 每列宽 = wd + 2·colsep + 0.176 = 11.066+3.81+0.176 = 15.052 ✔ 与量到的完全一致
% 改后 Σ(wd+2·colsep) + 7×0.176 = 141.443+22.86+1.232 = 165.535 ≈ 165.54 ✔
\newcommand{\ccAwd}{10.906mm} % 14.922 − 4.0158
\newcommand{\ccBwd}{15.986mm} % 20.002 − 4.0158
\newcommand{\ccCwd}{29.092mm} % 33.108 − 4.0158
\newcommand{\ccDwd}{10.977mm} % 14.993 − 4.0158
\newcommand{\ccEwd}{45.990mm} % 50.006 − 4.0158
\newcommand{\ccFwd}{28.492mm} % 32.508 − 4.0158
%----------------------------------------------------------------------
% 单元格包装
%
% ⚠️ 合并格 {c} 是不折行的 LR 模式,长文字会撑宽列 —— 必须包定宽 parbox。
% 合并格内容可用宽 = Σ所跨各列 wd + 2·colsep·(n−1)
% R14/R15 是 g=6 的合并格:
% Σ wd = 10.906+15.986+29.092+10.977+45.990+28.492 = 141.443
% + 2·1.905·5 = 19.050
% = 160.493 mm
%----------------------------------------------------------------------
\newcommand{\ccspanall}{160.493mm} % R14/R15 合并格可用宽
% 表内单格(9pt 宋体,按 docx 原样:C0/C1/C3 居中,C2/C4/C5 左对齐)
\newcommand{\ccl}[1]{\parbox{\linewidth}{\raggedright #1}}
\newcommand{\ccc}[1]{\parbox{\linewidth}{\centering #1}}
% 表宽 165.54mm > 版心 159.63mm,docx 里 jc=center 让它居中,
% 左边界落在 (210 − 165.54)/2 = 22.23mm,比版心左 27.52mm 还靠左 5.29mm。
%
% ⚠️ longtblr 生成的是一整块 \halign 盒子,【\hspace* 对它无效】(会被吞掉)。
% 正确做法是 \leftskip:它把段落每一行的起点整体左移。
% \hsize = 165.54mm → 让表内得下,不报 Overfull
% \leftskip = −5.29mm → 整块左移,落到 22.23mm
\newlength{\cctblshift}
\setlength{\cctblshift}{5.29mm}
% ⚠️ 不能用 \NewTblrEnviron + \SetTblrInner:预展开会报
% "Unexpandable command \ccfang inside column type"。
% 直接写 \begin{longtblr} 环境最稳。
%
% ⚠️ longtblr 默认会在跨页处印 "( Continued )"、印 "表N:" 题注、
% 页尾印 "Continued on next page"。而没有 tblHeader、
% 没有题注、没有任何续页提示。
%
% 清干净需要动【两组】东西,只清一组不够:
% (a) 内容模板 *-text:contfoot-text / conthead-text / caption-tag / caption-sep
% (模板实例里调的是 \UseTblrTemplate{...}{default},
% 只把 conthead 设成 empty 而留着 conthead-text,仍会印出 "( Continued )")
% (b) 模板实例:caption / conthead / contfoot
% 实际只做 (b) 时第 5 页仍会出现 "表0:" 与 "(Continued)"。
%
% ⚠️⚠️ conthead-text / contfoot-text 不能设成 empty!那会报
% "! Use of \??? doesn't match its definition.
% LaTeX3 Error: Erroneous variable \l__tblr_template_conthead_text_tl"
% (因为 normal 实例会 \tl_use 这个变量,empty 变体里没定义它)。
% 正确做法:用 \DefTblrTemplate 重新定义成「内容为空」的 normal 模板。
\DefTblrTemplate{conthead-text}{normal}{}
\DefTblrTemplate{contfoot-text}{normal}{}
\SetTblrTemplate{conthead-text}{normal}
\SetTblrTemplate{contfoot-text}{normal}
\SetTblrTemplate{caption-tag}{empty}
\SetTblrTemplate{caption-sep}{empty}
\SetTblrTemplate{caption-text}{empty}
\SetTblrTemplate{caption}{empty}
\SetTblrTemplate{conthead}{empty}
\SetTblrTemplate{contfoot}{empty}
\newenvironment{cctable}{%
\par\begingroup
\hsize=\cctblw \linewidth=\cctblw
\leftskip=-\cctblshift \rightskip=0pt \parindent=0pt
\begin{longtblr}[
label=none,
% ⚠️⚠️ presep/postsep/headsep/footsep 是【outer】键,只能写在这个方括号里。
% 写进下面的花括号(inner spec)里不会生效,反而会把 "0pt" 当表内容
% 印在表格第一行 —— 实际表头上出现了一串 "0pt0pt0pt0pt" 垃圾字。
presep=0pt, postsep=0pt, headsep=0pt, footsep=0pt,
]{
colspec={
Q[c,m,wd=10.906mm] Q[c,m,wd=15.986mm] Q[l,m,wd=29.092mm]
Q[c,m,wd=10.977mm] Q[l,m,wd=45.990mm] Q[l,m,wd=28.492mm]
},
colsep=1.905mm, rowsep=0pt, stretch=0,
hline{1-Z}={\ccborder}, vline{1-Z}={\ccborder},
% ⚠️ 表级默认字号必须写 cells={font=...},不能只写 font=。
% tabularray 的 inner 已知键里【没有 font】,单独写 font=\ccszix
% 会被当成未知键静默忽略(不会报错!),表内就退回到文档的 12pt。
% docx 里表 1 绝大多数格是 sz18 = 9pt。
cells={font=\ccszix},
% 下列三行照 docx 的 trHeight atLeast 复刻:
% R0 917 twips = 16.17mm(表头)
% R14 1825 twips = 32.19mm(任课老师签字)
% R15 1073 twips = 18.93mm(审核意见)
row{1}={ht=16.17mm},
row{15}={ht=32.19mm},
row{16}={ht=18.93mm},
}%
}{%
\end{longtblr}\par\endgroup}
%======================================================================
% 8. 签字栏(第一页末尾)
%
% docx P53~P62:全部 14pt 方正仿宋,段前 120 twips = 6pt
% P55 任课老师(签字):
% P57 教学院长审核意见:
% P60 教学院长签字:
% P62 「年 月 日」首行缩进 708 twips = 12.50mm,前面 41 个半角空格
%
% ⚠️ 原文件这里不是表格,是纯段落 + 空格凑出来的空白。
% 本包改为等价的 \vspace 与右对齐,结构更干净、位置一致。
%======================================================================
\newcommand{\ccsignlab}[1]{%
\par\begingroup\ccfang\ccszxiii
\vspace*{6pt}\noindent #1\par\endgroup}
\newcommand{\ccdateblank}{%
\par\begingroup\ccfang\ccszxiii
\vspace*{6pt}%
\noindent\hspace*{12.50mm}%
\makebox[90mm][r]{年\hspace{2em}月\hspace{2em}日}%
\par\endgroup}
%======================================================================
% 9. 教学日历页标题
%
% docx P64:小标宋 14pt 加粗,居中,行距 360 auto(= 1.5 倍)
%======================================================================
\newcommand{\ccdaytitle}[1]{%
\par\begingroup\centering
{\ccbiaosong\ccszxiii #1\par}%
\endgroup}
\newcommand{\ccnewpage}{\par\newpage}
%======================================================================
% 10. 表尾「合计」行后的说明性小字(10.5pt)
%======================================================================
\newcommand{\ccsmall}{\ccszxxi}
\RequirePackage{ifthen}
\makeatletter
\providecommand{\@tempcnta}{}
\makeatother
\endinput