Files

529 lines
23 KiB
TeX
Raw Permalink Normal View History

%======================================================================
% ouccourse.sty —— 中国海洋大学 本科课程教学执行大纲、教学日历
%
% 由学校下发的 .docx 复刻而来。版式尺寸全部从原文件的 OOXML 量出,
% 换算过程逐条写在对应位置。
%
% ⚠️ 编译: xelatex 课程执行大纲.tex (单次即可,无交叉引用)
% 需要 ctex + geometry + fontspec + xeCJK + tabularray
2026-11-01 09:29:00 +08:00
% 实际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. 页面
%
2026-11-01 09:29:00 +08:00
% 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}
2026-11-01 09:29:00 +08:00
\pagestyle{empty} % 无页眉页脚、无页码
%======================================================================
% 2. 字体
%
2026-11-01 09:29:00 +08:00
% 用到 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-11-01 09:29:00 +08:00
% 里没有这种空白,例如「××学部××学院」「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. 首页字段区
%
2026-11-01 09:29:00 +08:00
% 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
%
2026-11-01 09:29:00 +08:00
% ⚠️⚠️ 实际docx 这几行是【溢出】的,不能照抄:
% 制表位绝对位置 = 27.52(左边距)+ 123.81 = 141.33 mm,
% 而右侧内容【开课时间】 2026 学年 秋 季学期 宽 58.20 mm,
% ⇒ 行尾落在 199.53 mm,已越过版心右边界 187.07 mm 达 12.5 mm,
% 钻进了 22.93 mm 的右边距里。原文件靠负缩进硬塞,视觉上不易察觉。
%
% ⇒ 本包改为干净的两栏等宽布局,两栏都对齐、整体不溢出:
2026-11-01 09:29:00 +08:00
% 左栏宽 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。
2026-11-01 09:29:00 +08:00
% 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 —— 必须跨页!
2026-11-01 09:29:00 +08:00
% 这就是排成 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
%
2026-11-01 09:29:00 +08:00
% 实际校验(改前 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:" 题注、
2026-11-01 09:29:00 +08:00
% 页尾印 "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
2026-11-01 09:29:00 +08:00
% 实际只做 (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" 当表内容
2026-11-01 09:29:00 +08:00
% 印在表格第一行 —— 实际表头上出现了一串 "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