字体统一:建公共字体目录,全部改用开源可商用字体 (#6)
七个模板原先分两套做法:幻灯片/fonts(49MB 鸿蒙 18 个字重)与 科技报告/font(92MB,含 5 款方正商业字体),其余模板直接调系统 SimSun/SimHei/KaiTi/FangSong/Times New Roman。换机器就编不出来, 方正系列也不允许随仓库分发。 统一到仓库根的 fonts/ + fonts.tex: - OUC Serif(思源宋体 SC 子集) —— 宋体 - OUC Sans(思源黑体 SC 子集) —— 黑体 - OUC Kai(霞鹜文楷子集) —— 楷体 - Zhuque Fangsong(朱雀仿宋) —— 仿宋 - TeX Gyre Termes —— 西文 Times 等价(度量逐字相同) - HarmonyOS Sans —— 幻灯片/科技报告原有字体 fonts.tex 是唯一允许声明字体的地方,7 个模板全部 \input 它。 字体体积 141MB -> 49MB(去掉重复),全库共用一套最小集合。 几处踩过的坑(均已写进源码注释): - \newCJKfontfamily 与 ctex 默认 fontset 冲突会中断编译,改用 \setCJKfamilyfont + \def - \newfontfamily 缺粗体档会让 \bfseries 静默失效,四档必须全给 - UprightFont= 与主参数不能同时给,否则文件名被拼两次 - Path= 相对编译时工作目录,不是相对 .sty - ×/□/○ 等符号按 Unicode 区段被判成西文,需 \xeCJKDeclareCharClass - 中文斜体的 ItalicFont 与主字体不在同一目录,须在 ItalicFeatures 里单独写 Path/Extension(否则报 OUCKai-Regular cannot be found) 顺带: - 科技报告 report.tex 的字体演示正文改为新字体名(原文写着方正系列) - 试卷归档封面新模板并入本库 - 科技报告 shell 命令框底色改海大蓝(#5 遗留) 验证(7 个模板 8 个 PDF 全量重编 + 逐行 A/B 对照): - 错误 0,缺字 0 - 幻灯片 362 行逐行完全一致,零漂移 - 年度考核登记表 / 劳务发放说明表 / 试卷题型示例 / 参考答案 文本完全一致 - 课程执行大纲 仅 2 处断字连字符差异(throughout、processing), 1 条 6.39pt Overfull 已论证不可见(距纸张右边缘仍有 20.7mm) - 科技报告 内嵌字体方正归零,只剩 OUC Serif/Sans/Kai + Zhuque - 全库正文 857 个非 ASCII 字符,四款中文字体(含粗体)覆盖 100%
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
# 试卷归档封面 —— 信息科学与工程学部试卷归档封面(理论课)
|
||||
|
||||
信息科学与工程学部**试卷归档封面**的 XeLaTeX 模板。原文件是学院/学部下发的
|
||||
`.doc` 表格,本目录把它做成可直接编译的 LaTeX 版。
|
||||
|
||||
> **改名说明**:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」,
|
||||
> 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途,
|
||||
> 已统一改为 **学部 + 归档封面**:目录名、文件名、内文标题三处同步。
|
||||
|
||||
> 与 [`试卷/`](../试卷/) 的区别:`试卷/` 是**试卷正文 + 参考答案**(学校专用
|
||||
> 195×270mm 试卷纸、装订栏、成绩表);本目录是**随卷归档的封面单页**
|
||||
> (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。
|
||||
|
||||
## 文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|---|---|
|
||||
| `oucksfm.sty` | 版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程 |
|
||||
| `试卷归档封面.tex` | 填写入口,【第 1 节】改课程信息即可 |
|
||||
| `试卷归档封面.pdf` | 成品样张 |
|
||||
|
||||
## 编译
|
||||
|
||||
```bash
|
||||
xelatex 试卷归档封面.tex
|
||||
```
|
||||
|
||||
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
|
||||
本模板自包含,不依赖任何图片。
|
||||
|
||||
## 填表
|
||||
|
||||
只改 `试卷归档封面.tex` 的【第 1 节】:
|
||||
|
||||
```latex
|
||||
\newcommand{\sfmyear} {\ph{××××}年} % 学年
|
||||
\newcommand{\sfmterm} {\ph{×}季学期} % 学期
|
||||
\newcommand{\sfmcno} {080502101231} % 课程号(纯数字,14pt)
|
||||
\newcommand{\sfmsno} {25252029} % 选课号(纯数字,14pt)
|
||||
\newcommand{\sfmcourse}{\ph{××××}} % 考试课程名称
|
||||
\newcommand{\sfmtype} {\ph{×××}} % 课程类型
|
||||
\newcommand{\sfmmajor}{...} % 面向专业(多个用、隔开)
|
||||
\newcommand{\sfmgrade}{\ph{××××}} % 面向年级
|
||||
\newcommand{\sfmcount}{\ph{××}} % 试卷份数
|
||||
\newcommand{\sfmteacher}{\ph{×××}} % 授课教师
|
||||
\newcommand{\sfmdate}{...} % 日期
|
||||
```
|
||||
|
||||
填真实内容后把 `\ph{...}` 整个换掉,不要留下 `×`。
|
||||
|
||||
## 版式参数
|
||||
|
||||
全部照原 `.doc` 实测值,未做主观调整:
|
||||
|
||||
| 项目 | 值 | 来源 |
|
||||
|---|---|---|
|
||||
| 纸张 | A4 210×297mm | `pgSz` |
|
||||
| 页边距 | 左右 20mm、上下 25.01mm | `pgMar` 56.7 / 70.9 pt |
|
||||
| 表宽 | 170mm(= 版心宽) | `tblW` 100% |
|
||||
| 边框 | 0.5pt 实线 | `w:sz=4`(1/8pt 单位)|
|
||||
| 单元格内边距 | 左右 1.4993mm、上下 0 | `tblCellMar` 85 twips |
|
||||
| 列宽 | 51mm + 119mm(30% : 70%) | `col_widths_pct` |
|
||||
| 标题 | 黑体 18pt 加粗居中 | `w:sz=36` + `w:b` |
|
||||
| 左列标签 | 黑体 18pt | `w:sz=36` |
|
||||
| 右列值 | 18pt(学年/学期)/16pt(多数)/14pt(课程号、选课号) | `w:sz=36/32/28` |
|
||||
| 行高 | 11 行固定高,合计 185.95mm | 各行 `trHeight` + `hRule=exact` |
|
||||
|
||||
实测校验(pymupdf 读 PDF):
|
||||
|
||||
```
|
||||
表格 左=20.0mm 右=189.91mm 宽=169.9mm ← 应为 170mm ✓
|
||||
行高 15.19/15.18/15.54/14.66/14.75/15.18/33.02/15.19/18.80/15.19/15.19 mm
|
||||
表格总高 187.89mm ← 含线宽与取整,与 185.95+线宽 吻合
|
||||
标题 宽 94.89mm,单行不折(版心 170mm,余量充足)
|
||||
```
|
||||
|
||||
## 三个坑(改之前先看)
|
||||
|
||||
### 1. `×` 占位符曾跑到 Times New Roman(已在公共字体包根治)
|
||||
|
||||
xeCJK 按 Unicode 区段分类,`×`(U+00D7)落在 Latin-1,会被判成**西文**,
|
||||
交给 fontspec 的西文字体(Termes / Times)。`\heiti` / `\fangsong` 只切
|
||||
CJK 字体族,**管不到它** —— 包一层是没用的。TNR 的 × 宽度与汉字不一致,
|
||||
混排时基线也偏。
|
||||
|
||||
现在这行已上移到仓库公共字体包 [`../fonts.tex`](../fonts.tex),**全局生效**:
|
||||
|
||||
```latex
|
||||
\xeCJKDeclareCharClass{CJK}{"00D7} % × 乘号
|
||||
\xeCJKDeclareCharClass{CJK}{"2014} % — 破折号
|
||||
\xeCJKDeclareCharClass{CJK}{"25A1} % □ 方框(勾选框)
|
||||
```
|
||||
|
||||
本模板不再需要自己声明。
|
||||
|
||||
> ✅ [`年度考核登记表/`](../年度考核登记表/) 也有同样问题,**已随本次改造一并修好**
|
||||
> (原先那条注释说能修,但实测 PDF 里 × 仍落在 TNR —— 因为注释在、声明也写了,
|
||||
> 却没有真正作用到字符类)。现在已经实测确认:10 处 `×` 全部落在 OUC Sans 上。
|
||||
|
||||
### 2. 字体全部来自公共字体包
|
||||
|
||||
本模板原先用 SimHei / SimSun / FangSong + `AutoFakeBold` 描边,换台机器
|
||||
(尤其 Linux/macOS)就编不出来,而且这些字体都不允许随仓库分发。现改为
|
||||
`\input{../fonts.tex}`,字体文件在 `../fonts/` 下,来源与授权见
|
||||
[`../fonts/README.md`](../fonts/README.md)。
|
||||
|
||||
### 3. `\linespread` 会悄悄放大行高
|
||||
|
||||
ctex 默认 `\linespread` 约为 **1.3**,它会把 `\fontsize{18}{21.6}` 里的
|
||||
21.6 pt 行距放大到 **28 pt 以上**,逐行累积后整张表会顶出页面。
|
||||
|
||||
`oucksfm.sty` 的解法是在**每个** `\fontsize` 之后紧跟 `\linespread{1}\relax`,
|
||||
并且在 `\AtBeginDocument` 之后再设一次(ctex 会在 `\begin{document}` 时
|
||||
把 `\linespread` 重新设回 1.3,只在导言区设是无效的):
|
||||
|
||||
```latex
|
||||
\AtBeginDocument{\linespread{1}\selectfont}
|
||||
```
|
||||
|
||||
没有这一步,表高会比原卷高出一大截。
|
||||
@@ -0,0 +1,274 @@
|
||||
%======================================================================
|
||||
% oucksfm.sty — 信息科学与工程学部 试卷归档封面(理论课)版式包
|
||||
%
|
||||
% 依据:附件1:信息科学与工程学院试卷封面(理论课).doc
|
||||
% (SynologyDrive/授课/数字逻辑/2025/归档/)
|
||||
% 原名与内文标题写的是「学院」,按现行建制改为「学部」,
|
||||
% 模板标题相应为「信息科学与工程学部试卷归档封面」。
|
||||
% 目标:版式与原 .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{oucksfm}[2026/10/26 v1.0 OUC exam archive cover sheet]
|
||||
|
||||
\RequirePackage{geometry}
|
||||
\RequirePackage{fontspec}
|
||||
\RequirePackage{xeCJK}
|
||||
\RequirePackage{tabularray}
|
||||
|
||||
%======================================================================
|
||||
% 1. 页面与版心
|
||||
%
|
||||
% 原 .doc sectPr:
|
||||
% pgSz A4(595.3 × 841.9 pt = 210.0 × 297.0 mm)
|
||||
% pgMar top/bottom 70.9 pt = 25.01 mm
|
||||
% left/right 56.7 pt = 20.00 mm
|
||||
% header 42.55 pt = 15.01 mm / footer 49.6 pt = 17.50 mm
|
||||
%
|
||||
% 表宽 tblW = 100%(w:type="pct" w:w="5000"),即铺满版心:
|
||||
% 版心宽 = 210 − 2×20.00 = 170.00 mm
|
||||
%
|
||||
% ⇒ 这里让 totalwidth 恰等于 170mm:
|
||||
% · 表格天然与版心同宽,编译不刷 Overfull \hbox
|
||||
% · 表格在纸面上的绝对位置与 Word 完全一致(左右各 20mm)
|
||||
%======================================================================
|
||||
\geometry{
|
||||
paperwidth = 210mm,
|
||||
paperheight = 297mm,
|
||||
totalwidth = 170mm, % = 表宽,精确
|
||||
hmarginratio = 1:1, % 左右各 20mm
|
||||
top = 25.01mm,
|
||||
bottom = 25.01mm,
|
||||
headheight = 0pt,
|
||||
headsep = 0pt,
|
||||
footskip = 17.50mm,
|
||||
}
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\parskip}{0pt}
|
||||
\pagestyle{empty} % 原 .doc 无页眉页脚,故不排页码
|
||||
|
||||
%======================================================================
|
||||
% 2. 字体与字号
|
||||
%
|
||||
% 表外标题 黑体 18pt 加粗(w:sz=36 + w:b),jc=center
|
||||
% 左列标签 黑体 18pt (w:sz=36,全部 11 行一致)
|
||||
% 右列值 黑体 18pt (w:sz=36)—— 学年 / 学期
|
||||
% 黑体 16pt (w:sz=32)—— 考试课程名称 / 课程类型 /
|
||||
% 面向专业 / 面向年级 / 试卷份数 /
|
||||
% 授课教师 / 日期
|
||||
% 黑体 14pt (w:sz=28)—— 课程号 / 选课号(纯数字,字号小一档)
|
||||
%
|
||||
% ⚠️ 全文只有黑体一种字体,没有宋体/仿宋混排,比另两份表单简单。
|
||||
%
|
||||
% 字体全部来自仓库公共字体包 ../oucfonts.sty(文件在 ../fonts/ 下)。
|
||||
% 旧版这里写的是系统字体的 SimHei / SimSun / FangSong + AutoFakeBold,
|
||||
% 换台机器(尤其 Linux/macOS)就编不出来。现已全部换成随仓库分发的
|
||||
% 开源字体,并且粗体用字体自带的真粗体、不再算法描边。
|
||||
%======================================================================
|
||||
\input{../fonts.tex}
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
% ⚠️⚠️⚠️【最要命的一条,与 ouclw.sty 同源】
|
||||
% ctex 默认 \linespread 约 1.3,会把 \fontsize{18}{21.6} 的 21.6pt
|
||||
% 行距放大成 28pt 以上。
|
||||
%
|
||||
% \fontsize 的第二个参数【本来是】用来设 \baselineskip 的,但
|
||||
% \selectfont 时会再乘一次 \linespread,所以必须先把 \linespread 归 1。
|
||||
% 这一步不能省,也必须在 \AtBeginDocument 之后再设一次
|
||||
% (ctex 在 begin document 时会重设)。
|
||||
%----------------------------------------------------------------------
|
||||
\newcommand{\sfmbodyfont}{%
|
||||
\linespread{1}\relax
|
||||
\fontsize{18}{21.6}\selectfont}
|
||||
|
||||
% 三档字号(行距取字号的 1.2 倍,与原 .doc 单倍行距一致)
|
||||
\newcommand{\sfmbigfont}{\linespread{1}\relax\fontsize{18}{21.6}\selectfont}
|
||||
\newcommand{\sfmmidfont}{\linespread{1}\relax\fontsize{16}{19.2}\selectfont}
|
||||
\newcommand{\sfmsmlfont}{\linespread{1}\relax\fontsize{14}{16.8}\selectfont}
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
% ⚠️ xeCJK 陷阱:局部字体切换命令若紧邻 \par(或落在段落末尾),段末的
|
||||
% 字体状态会"溢出"到后面段落。故局部切换一律用带 \normalfont 收尾的包装。
|
||||
%----------------------------------------------------------------------
|
||||
\newcommand{\SFMHT}[1]{{\heiti #1\normalfont}}
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
% ⚠️⚠️⚠️【「×」占位符的坑 —— 在 年度考核登记表/ 里踩过,那里只是绕过去了,
|
||||
% 这里做了根治】
|
||||
%
|
||||
% 现象:写 {\heiti ×××} 后编译,PDF 里这些 × 实际用的是
|
||||
% Times New Roman(pymupdf 读 span 的 font=TimesNewRomanPSMT),
|
||||
% 不是黑体。§ 29 个 × 撑不满预期宽度,跟汉字混排时基线也偏。
|
||||
%
|
||||
% 原因:xeCJK 按 Unicode 区段分类。「×」是 U+00D7,落在 Latin-1 补充区,
|
||||
% xeCJK 把它判成【西文字符】⇒ 交给 fontspec 的西文字体(TNR)。
|
||||
% \heiti / \fangsong 只切换 CJK 字体,对这个字符【不起作用】。
|
||||
% 所以 {\fangsong ××} 这种写法看着像修好了,实际并没有
|
||||
% (年度考核登记表/ 的 PDF 里 × 至今仍是 TNR)。
|
||||
%
|
||||
% 正解:把 U+00D7 显式声明为 CJK 字符类,让它回到 CJK 字体族,
|
||||
% \heiti / \fangsong 才能真正管到它。全角宽度也就与汉字一致了。
|
||||
%
|
||||
% ⚠️ 这条只在本包内生效,不影响其它模板(年度考核登记表 若也要修,
|
||||
% 把这两行照抄过去即可)。
|
||||
%----------------------------------------------------------------------
|
||||
\xeCJKDeclareCharClass{CJK}{"00D7} % × 乘号 → 归 CJK,跟着 \heiti/\fangsong 走
|
||||
\xeCJKDeclareCharClass{CJK}{"2014} % — 破折号 → 归 CJK(学年区间「2025—2026」用得上)
|
||||
|
||||
%======================================================================
|
||||
% 3. 列的宽度模型
|
||||
%
|
||||
% 原 .doc tblGrid(2 个网格列,col_widths_pct = [30, 70]):
|
||||
% c1 = 170 × 30% = 51.000 mm
|
||||
% c2 = 170 × 70% = 119.000 mm
|
||||
%
|
||||
% cellMar:left/right = 85 twips = 1.4993 mm,top/bottom = 0
|
||||
% 边框 :w:sz = 4(单位 1/8 pt)⇒ 0.5 pt = 0.1764 mm
|
||||
%
|
||||
%----------------------------------------------------------------------
|
||||
% ⚠️ 与 ouclw.sty 一样,这里可以如实还原内边距(最窄列 51mm 远宽于两倍
|
||||
% 内边距 3.00mm,不像年度考核表那样被极窄列逼着取 colsep=0)。
|
||||
%
|
||||
% tabularray 的 colsep 计在每列【左右两侧】,故 2 列共 4×1.4993 = 5.9972mm;
|
||||
% 竖线 3 根(左边界 + 中间 + 右边界)× 0.1764mm = 0.5292mm。
|
||||
% 要让 Σwd + 5.9972 + 0.5292 = 170.000,需
|
||||
% Σwd = 163.4736 mm
|
||||
% 而 (gridCol − 2×1.4993) 之和为 164.0028 mm,两者差 0.5292 mm 正好是竖线宽,
|
||||
% 故每列再减 0.5292/2 = 0.2646 mm。
|
||||
%
|
||||
% ⚠️ 上式只是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
||||
% 实测需再微调(见 3.2 的实测标定值),否则一直报
|
||||
% "Table width is too small, need 0.45pt more!" 外加一条 Overfull \hbox。
|
||||
%======================================================================
|
||||
\newcommand{\sfmrule}{0.5pt} % 边框粗细(w:sz=4)
|
||||
\newcommand{\sfmcolsep}{1.4993mm} % 单元格左右内边距(85 twips)
|
||||
\newlength{\sfmtblw}
|
||||
\setlength{\sfmtblw}{170mm} % 表宽(含 3 根竖线与 4 处内边距)
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
% 3.1 各列宽(= gridCol − 2×colsep − 竖线分摊的理论值)
|
||||
% 与 sfmtable 环境里 colspec 的 wd 必须逐字一致。
|
||||
%----------------------------------------------------------------------
|
||||
\newcommand{\sfmwa}{47.7368mm} % c1 51.000 − 2.9986 − 0.2646
|
||||
\newcommand{\sfmwb}{115.7368mm} % c2 119.000 − 2.9986 − 0.2646
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
% 3.2 各列【内容可用宽】
|
||||
%
|
||||
% 单列单元格的内容宽 = wd(左右两半 colsep 已被 colspec 扣掉并计入表格宽)。
|
||||
% 本表全部是不跨列的单列格,没有"合并格回收内边距"的问题(ouclw.sty 的
|
||||
% \lwspanA / \lwspanB 那类坑在这里不存在)。
|
||||
%----------------------------------------------------------------------
|
||||
|
||||
%======================================================================
|
||||
% 4. 行高
|
||||
%
|
||||
% 原 .doc 每行都是 w:trHeight + w:hRule="exact"(固定行高,不是 atLeast):
|
||||
% R1 学年 42.55 pt = 15.011 mm
|
||||
% R2 学期 42.55 pt = 15.011 mm
|
||||
% R3 课程号 43.55 pt = 15.363 mm
|
||||
% R4 选课号 41.05 pt = 14.482 mm
|
||||
% R5 考试课程名称 41.30 pt = 14.570 mm
|
||||
% R6 课程类型 42.55 pt = 15.011 mm
|
||||
% R7 面向专业 93.10 pt = 32.844 mm ← 唯一高行,容 5 个专业名折行
|
||||
% R8 面向年级 42.55 pt = 15.011 mm
|
||||
% R9 试卷份数 52.80 pt = 18.627 mm
|
||||
% R10 授课教师 42.55 pt = 15.011 mm
|
||||
% R11 日期 42.55 pt = 15.011 mm
|
||||
% ────────────────────────────────────────
|
||||
% 合计 185.949 mm
|
||||
%
|
||||
% ⚠️ Word 的 exact 是"精确等于",内容超了会【被裁掉】。tabularray 的
|
||||
% ht= 是最小行高(内容多则自动长高),语义更安全。本表各行内容都远
|
||||
% 小于行高,两者结果相同,故直接写 ht=。
|
||||
%
|
||||
% ⚠️ 那几行 42.55 / 43.55 / 41.05 / 41.30 的零头不是随机的:Word 里
|
||||
% 它们是"字符高 + 段前段后"凑出来的实际测量值,照抄才能与原卷逐行对齐。
|
||||
%======================================================================
|
||||
|
||||
%======================================================================
|
||||
% 5. 表格环境
|
||||
%
|
||||
% ⚠️ 用 tblr 而非 longtblr:本表总高约 186 mm,一页装得下(版心高
|
||||
% 297 − 2×25.01 = 247 mm),不需要断页。
|
||||
%
|
||||
% ⚠️⚠️ colspec 与 row{} 必须字面写在这里,不能先存进宏再展开:
|
||||
% tabularray 的列类型解析在宏展开之外进行,会报
|
||||
% "Unexpandable command \xxx inside column type"。
|
||||
% (所以 3.1 节那些 \sfmwa… 只作文档用,不能拼进 colspec。)
|
||||
%
|
||||
% ⚠️ 选项里的宏名一律不带 @:tabularray 解析选项时 @ 不是字母。
|
||||
%======================================================================
|
||||
\newenvironment{sfmtable}{%
|
||||
\par\begingroup
|
||||
\begin{tblr}[label=none]{
|
||||
colspec={Q[c,m,wd=47.7368mm] Q[c,m,wd=115.7368mm]},
|
||||
colsep=1.4993mm, rowsep=0pt, stretch=0,
|
||||
hline{1-Z}={\sfmrule}, vline{1-Z}={\sfmrule},
|
||||
row{1}={ht=15.011mm}, row{2}={ht=15.011mm},
|
||||
row{3}={ht=15.363mm}, row{4}={ht=14.482mm},
|
||||
row{5}={ht=14.570mm}, row{6}={ht=15.011mm},
|
||||
row{7}={ht=32.844mm}, row{8}={ht=15.011mm},
|
||||
row{9}={ht=18.627mm}, row{10}={ht=15.011mm},
|
||||
row{11}={ht=15.011mm},
|
||||
}%
|
||||
}{%
|
||||
\end{tblr}\par\endgroup}
|
||||
|
||||
%======================================================================
|
||||
% 6. 单元格内容包装
|
||||
%
|
||||
% 本表全是单列格,tabularray 的 Q[c,m,wd=…] 已处理好居中与折行,
|
||||
% 不需要 ouclw.sty 那种定宽 \parbox。这里只提供两个语义化的标签宏,
|
||||
% 让 .tex 里不必反复写 \SFMHT{}。
|
||||
%======================================================================
|
||||
|
||||
% \sfmlabel{文字} —— 左列标签:黑体 18pt
|
||||
\newcommand{\sfmlabel}[1]{{\heiti\sfmbigfont #1\normalfont}}
|
||||
|
||||
% \sfmval{文字} —— 右列值(16pt,最常用)
|
||||
\newcommand{\sfmval}[1]{{\heiti\sfmmidfont #1\normalfont}}
|
||||
|
||||
% \sfmvalbig{文字} —— 右列值(18pt):学年 / 学期两行
|
||||
\newcommand{\sfmvalbig}[1]{{\heiti\sfmbigfont #1\normalfont}}
|
||||
|
||||
% \sfmvalsmall{文字} —— 右列值(14pt):课程号 / 选课号
|
||||
\newcommand{\sfmvalsmall}[1]{{\heiti\sfmsmlfont #1\normalfont}}
|
||||
|
||||
%======================================================================
|
||||
% 7. 表外标题
|
||||
%
|
||||
% 原 .doc 第 1 段:黑体、加粗、w:sz=36(18pt)、jc=center
|
||||
%
|
||||
% 原文标题是「信息科学与工程学院试卷」,按现行建制与文档实际用途已改为
|
||||
% 「信息科学与工程学部试卷归档封面」
|
||||
% 实测 18pt 下宽 94.89mm,版心宽 170mm,左右各余约 37mm,单行不折。
|
||||
% 再加长(比如后面挂"(理论课)")仍有余量,超过 170mm 才会折行。
|
||||
%
|
||||
% 标题与表格之间原 .doc 有 3 个空段落(idx 13/14/15),
|
||||
% 合计 3 × 21.6pt = 64.8pt = 22.86 mm。这里用 \sfmtitleskip 还原。
|
||||
%======================================================================
|
||||
\newlength{\sfmtitleskip}
|
||||
\setlength{\sfmtitleskip}{22.86mm}
|
||||
|
||||
\newcommand{\sfmtitle}[1]{%
|
||||
\par
|
||||
\begingroup
|
||||
\centering
|
||||
{\heiti\bfseries\sfmbigfont #1\par}%
|
||||
\endgroup
|
||||
\vspace{\sfmtitleskip}}
|
||||
|
||||
%======================================================================
|
||||
% 8. 表后空行
|
||||
%
|
||||
% 原 .doc 表格之后还有一个空段落(idx 212)。
|
||||
%======================================================================
|
||||
\newcommand{\sfmtail}{\par\null\par}
|
||||
|
||||
\AtBeginDocument{\sfmbodyfont}
|
||||
\endinput
|
||||
Binary file not shown.
@@ -0,0 +1,121 @@
|
||||
%======================================================================
|
||||
% 中国海洋大学 信息科学与工程学部 试卷归档封面(理论课)
|
||||
%
|
||||
% 编译: xelatex 试卷归档封面.tex
|
||||
%
|
||||
% 本模板不含真人信息:课程名、课程号、选课号、班级、教师姓名一律用
|
||||
% × 占位。填表时只改下面【第 1 节】。
|
||||
%
|
||||
% 版式来源:SynologyDrive/授课/数字逻辑/2025/归档/
|
||||
% 附件1:信息科学与工程学院试卷封面(理论课).doc
|
||||
% (原文件名与内文标题写的是「学院」,现按现行建制改为「学部」)
|
||||
% 所有尺寸已在 oucksfm.sty 内注明换算过程;要改版式请改 sty。
|
||||
%
|
||||
% 与原 .doc 的差异(有意为之):
|
||||
% · 原文件里的真实课程信息已全部换成 × 占位
|
||||
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
|
||||
% 「信息科学与工程学部试卷归档封面」
|
||||
% · 纸张、边距、表宽、行高、字号、字体一律照原值,未做任何调整
|
||||
%======================================================================
|
||||
\documentclass[UTF8,fontset=none]{ctexart}
|
||||
\usepackage{oucksfm}
|
||||
|
||||
%======================================================================
|
||||
% 1. 表内内容(填表时只改这一段)
|
||||
%
|
||||
% ⚠️ 左列标签是学部制式用语,一般不用改;只改右列的值。
|
||||
%======================================================================
|
||||
|
||||
%---- 左列标签(11 个,与学部原表的字一模一样,含字间空格)------------
|
||||
\newcommand{\sfmyearlabel} {学\quad 年} % 原文件用两个半角空格
|
||||
\newcommand{\sfmtermlabel} {学\quad 期}
|
||||
\newcommand{\sfmcnolabel} {课程号}
|
||||
\newcommand{\sfmsnolabel} {选课号}
|
||||
\newcommand{\sfmcourselabel}{考试课程名称}
|
||||
\newcommand{\sfmtypelabel} {课程类型}
|
||||
\newcommand{\sfmmajorlabel} {面向专业}
|
||||
\newcommand{\sfmgradelabel} {面向年级}
|
||||
\newcommand{\sfmcountlabel} {试卷份数}
|
||||
\newcommand{\sfmteacherlabel}{授课教师}
|
||||
\newcommand{\sfmdatelabel} {日\quad 期}
|
||||
|
||||
%---- 右列的值(填表时改这里)------------------------------------------
|
||||
%
|
||||
% ⚠️⚠️【必须看】占位符「×」一律用 \ph{} 包起来,不要裸写 ×。
|
||||
%
|
||||
% 原因(在 年度考核登记表/ 里踩过):字体的 ASCII 区段由 fontspec 交给
|
||||
% 西文字体(这里是 Times New Roman),而「×」U+00D7 属于 Latin-1,
|
||||
% 会被判成 ASCII ⇒ 用 TNR 的 ×,那是 1em 宽的数学乘号,
|
||||
% 与汉字的 1em 字宽【不一样】(TNR 的 × 略窄、位置也偏)。
|
||||
% 结果是一串 × 撑不满预期宽度,与汉字混排时基线也参差。
|
||||
%
|
||||
% \ph{} 把它强制交回黑体(全角),宽度才与汉字一致。
|
||||
% 本表全文黑体,所以用 \heiti 收尾即可。
|
||||
%
|
||||
% ⚠️ 填表时把 \ph{×××} 整体替换成真实内容(不要保留 × ):
|
||||
% 例如 \newcommand{\sfmcourse}{数字逻辑},一行的 \ph 都不要留。
|
||||
%----------------------------------------------------------------------
|
||||
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
|
||||
|
||||
% 学年。原文件写「2025年」,学期行写「秋季学期」。
|
||||
% ⚠️ 注意:学部原表是「学年」+「2025年」这种写法,不是「2025—2026」。
|
||||
% 若学校要求写成区间,改这里即可,行高涨一点不会溢出。
|
||||
\newcommand{\sfmyear} {\ph{××××}年}
|
||||
|
||||
% 学期:秋 / 春,或「秋季学期」「春季学期」
|
||||
\newcommand{\sfmterm} {\ph{×}季学期}
|
||||
|
||||
% 课程号 / 选课号:纯数字,14pt(比其余值小一档,原表如此)
|
||||
% ⚠️ 纯数字是真正的 ASCII,本来就该用 TNR,所以不用 \ph 包。
|
||||
\newcommand{\sfmcno} {080502101231}
|
||||
\newcommand{\sfmsno} {25252029}
|
||||
|
||||
% 考试课程名称
|
||||
\newcommand{\sfmcourse}{\ph{××××}}
|
||||
|
||||
% 课程类型:专业课 / 公共基础课 / 通识课 …
|
||||
\newcommand{\sfmtype} {\ph{×××}}
|
||||
|
||||
% 面向专业。多个专业之间用「、」隔开。
|
||||
% ⚠️⚠️ 这一格是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
|
||||
% 专业名超过 3 行会自动把行撑高,整表就顶出版心了——届时请把
|
||||
% oucksfm.sty 里 row{7} 的 ht 改大,或者把专业名精简。
|
||||
\newcommand{\sfmmajor}{%
|
||||
\ph{××××××××}、\ph{××××}、\ph{××××××}、\ph{××××××}、\ph{××××××}}
|
||||
|
||||
% 面向年级
|
||||
\newcommand{\sfmgrade}{\ph{××××}}
|
||||
|
||||
% 试卷份数
|
||||
\newcommand{\sfmcount}{\ph{××}}
|
||||
|
||||
% 授课教师
|
||||
\newcommand{\sfmteacher}{\ph{×××}}
|
||||
|
||||
% 日期
|
||||
\newcommand{\sfmdate}{\ph{××××}年\ph{××}月\ph{××}日星期\ph{×}}
|
||||
|
||||
%======================================================================
|
||||
% 2. 正文
|
||||
%======================================================================
|
||||
\begin{document}
|
||||
|
||||
\sfmtitle{信息科学与工程学部试卷归档封面}
|
||||
|
||||
\begin{sfmtable}
|
||||
\sfmlabel{\sfmyearlabel} & \sfmvalbig{\sfmyear} \\
|
||||
\sfmlabel{\sfmtermlabel} & \sfmvalbig{\sfmterm} \\
|
||||
\sfmlabel{\sfmcnolabel} & \sfmvalsmall{\sfmcno} \\
|
||||
\sfmlabel{\sfmsnolabel} & \sfmvalsmall{\sfmsno} \\
|
||||
\sfmlabel{\sfmcourselabel} & \sfmval{\sfmcourse} \\
|
||||
\sfmlabel{\sfmtypelabel} & \sfmval{\sfmtype} \\
|
||||
\sfmlabel{\sfmmajorlabel} & \sfmval{\sfmmajor} \\
|
||||
\sfmlabel{\sfmgradelabel} & \sfmval{\sfmgrade} \\
|
||||
\sfmlabel{\sfmcountlabel} & \sfmval{\sfmcount} \\
|
||||
\sfmlabel{\sfmteacherlabel} & \sfmval{\sfmteacher} \\
|
||||
\sfmlabel{\sfmdatelabel} & \sfmval{\sfmdate} \\
|
||||
\end{sfmtable}
|
||||
|
||||
\sfmtail
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user