重写全部 README,只保留使用说明
17 个 README 统一改成使用说明书,去掉来源、踩坑、需求过程等内容。 只保留: - 怎么编译、跑几遍 - 文件结构 - 要改哪些参数(逐项列出宏名与含义) - 用到的命令(表格) - 版式参数 删除: - 原文件来源、抽取过程 - 踩坑记录、最小复现、实测数据 - 用户需求、工单号、历史沿革 - 改造前后对比 行数 4185 → 2261。 全库 16/16 编译通过。
This commit is contained in:
+112
-93
@@ -1,123 +1,142 @@
|
||||
# 试卷归档封面 —— 信息科学与工程学部试卷归档封面(理论课)
|
||||
# 试卷归档封面
|
||||
|
||||
信息科学与工程学部**试卷归档封面**的 XeLaTeX 模板。原文件是学院/学部下发的
|
||||
`.doc` 表格,本目录把它做成可直接编译的 LaTeX 版。
|
||||
信息科学与工程学部试卷归档封面(理论课),A4 单页。
|
||||
|
||||
> **改名说明**:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」,
|
||||
> 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途,
|
||||
> 已统一改为 **学部 + 归档封面**:目录名、文件名、内文标题三处同步。
|
||||
## 编译
|
||||
|
||||
> 与 [`试卷/`](../试卷/) 的区别:`试卷/` 是**试卷正文 + 参考答案**(学校专用
|
||||
> 195×270mm 试卷纸、装订栏、成绩表);本目录是**随卷归档的封面单页**
|
||||
> (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。
|
||||
```bash
|
||||
cd 试卷归档封面
|
||||
xelatex 试卷归档封面.tex
|
||||
```
|
||||
|
||||
或仓库根:`bash build.sh 试卷归档封面`
|
||||
|
||||
## 文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|---|---|
|
||||
| `oucksfm.sty` | 版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程 |
|
||||
| `试卷归档封面.tex` | 填写入口,【第 1 节】改课程信息即可 |
|
||||
| `试卷归档封面.pdf` | 成品样张 |
|
||||
| `试卷归档封面.tex` | 主文件,填内容改这里 |
|
||||
| `oucksfm.sty` | 版式包,一般不改 |
|
||||
|
||||
## 编译
|
||||
## 填写参数
|
||||
|
||||
```bash
|
||||
xelatex 试卷归档封面.tex
|
||||
```
|
||||
|
||||
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
|
||||
本模板自包含,不依赖任何图片。
|
||||
|
||||
## 填表
|
||||
|
||||
只改 `试卷归档封面.tex` 的【第 1 节】。下面注释里的值是**样张实际用的虚构值**
|
||||
(与 `课程教学日历/`、`成绩构成说明/`、`试卷/` 同为《数字逻辑》2025 秋):
|
||||
全部在 `\begin{document}` 之前定义:
|
||||
|
||||
```latex
|
||||
\newcommand{\sfmyear} {\ph{2025}年} % 学年
|
||||
\newcommand{\sfmterm} {\ph{秋}季学期} % 学期
|
||||
\newcommand{\sfmcno} {080502101231} % 课程号(纯数字,14pt)
|
||||
\newcommand{\sfmsno} {25252029} % 选课号(纯数字,14pt)
|
||||
\newcommand{\sfmcourse}{\ph{数字逻辑}} % 考试课程名称
|
||||
\newcommand{\sfmtype} {\ph{专业课}} % 课程类型
|
||||
\newcommand{\sfmmajor}{...} % 面向专业(多个用、隔开)
|
||||
\newcommand{\sfmgrade}{\ph{2023}级} % 面向年级
|
||||
\newcommand{\sfmcount}{\ph{86}} % 试卷份数
|
||||
\newcommand{\sfmteacher}{\ph{张远航}} % 授课教师
|
||||
\newcommand{\sfmdate}{...} % 日期
|
||||
\newcommand{\sfmyear} {\ph{2025}年} % 学年
|
||||
\newcommand{\sfmterm} {\ph{秋}季学期} % 学期
|
||||
\newcommand{\sfmcno} {080502101231} % 课程号
|
||||
\newcommand{\sfmsno} {25252029} % 选课号
|
||||
\newcommand{\sfmcourse}{\ph{数字逻辑}} % 考试课程名称
|
||||
\newcommand{\sfmtype} {\ph{专业课}} % 课程类型
|
||||
\newcommand{\sfmmajor}{% % 面向专业
|
||||
\ph{计算机科学与技术}、\ph{软件工程}、\ph{智能科学与技术}}
|
||||
\newcommand{\sfmgrade} {\ph{2023}级} % 面向年级
|
||||
\newcommand{\sfmcount} {\ph{86}} % 试卷份数
|
||||
\newcommand{\sfmteacher}{\ph{张远航}} % 授课教师
|
||||
\newcommand{\sfmdate} {\ph{2025}年\ph{01}月\ph{08}日星期\ph{三}} % 日期
|
||||
```
|
||||
|
||||
⚠️ **换内容时保留 `\ph{}`**,只是把它里面的字换掉,别把宏本身删了 ——
|
||||
「×」和半角数字会被 fontspec 判成 ASCII 交给西文字体,宽度与汉字不一致,
|
||||
全表的字就会参差不齐(原因见 `.tex` 里的长注释)。
|
||||
| 参数 | 说明 |
|
||||
|---|---|
|
||||
| `\sfmyear` | 学年,写成「2025年」这种形式 |
|
||||
| `\sfmterm` | 学期,秋 / 春,或「秋季学期」 |
|
||||
| `\sfmcno` | 课程号,纯数字,14pt |
|
||||
| `\sfmsno` | 选课号,纯数字,14pt |
|
||||
| `\sfmcourse` | 考试课程名称 |
|
||||
| `\sfmtype` | 课程类型:专业课 / 公共基础课 / 通识课 |
|
||||
| `\sfmmajor` | 面向专业,多个用「、」隔开 |
|
||||
| `\sfmgrade` | 面向年级 |
|
||||
| `\sfmcount` | 试卷份数 |
|
||||
| `\sfmteacher` | 授课教师 |
|
||||
| `\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),**全局生效**:
|
||||
`\ph{文字}` 把内容排成黑体(表示可填写的占位值)。定义在 tex 里:
|
||||
|
||||
```latex
|
||||
\xeCJKDeclareCharClass{CJK}{"00D7} % × 乘号
|
||||
\xeCJKDeclareCharClass{CJK}{"2014} % — 破折号
|
||||
\xeCJKDeclareCharClass{CJK}{"25A1} % □ 方框(勾选框)
|
||||
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
|
||||
```
|
||||
|
||||
本模板不再需要自己声明。
|
||||
要改占位值的字体,改这一行。纯数字(课程号、选课号)本来该用西文字体,
|
||||
不用 `\ph` 包。
|
||||
|
||||
> ✅ [`年度考核登记表/`](../年度考核登记表/) 也有同样问题,**已随本次改造一并修好**
|
||||
> (原先那条注释说能修,但实测 PDF 里 × 仍落在 TNR —— 因为注释在、声明也写了,
|
||||
> 却没有真正作用到字符类)。现在已经实测确认:10 处 `×` 全部落在 OUC Sans 上。
|
||||
### 面向专业这一格
|
||||
|
||||
### 2. 字体全部来自公共字体包
|
||||
`\sfmmajor` 是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
|
||||
专业名超过 3 行会自动把行撑高,整表会超出版心。届时:
|
||||
|
||||
本模板原先用 SimHei / SimSun / FangSong + `AutoFakeBold` 描边,换台机器
|
||||
(尤其 Linux/macOS)就编不出来,而且这些字体都不允许随仓库分发。现改为
|
||||
`\input{../fonts.tex}`,字体文件在 `../fonts/` 下,来源与授权见
|
||||
[`../fonts/README.md`](../fonts/README.md)。
|
||||
1. 精简专业名,或
|
||||
2. 把 `oucksfm.sty` 里 `row{7}` 的 `ht` 改大
|
||||
|
||||
### 3. `\linespread` 会悄悄放大行高
|
||||
## 表格结构
|
||||
|
||||
ctex 默认 `\linespread` 约为 **1.3**,它会把 `\fontsize{18}{21.6}` 里的
|
||||
21.6 pt 行距放大到 **28 pt 以上**,逐行累积后整张表会顶出页面。
|
||||
| 行 | 内容 |
|
||||
|---|---|
|
||||
| 1 | 学年 + 学期 |
|
||||
| 2 | 课程号 + 选课号 |
|
||||
| 3 | 考试课程名称 |
|
||||
| 4 | 课程类型 |
|
||||
| 5 | 面向专业(高行) |
|
||||
| 6 | 面向年级 |
|
||||
| 7 | 试卷份数 |
|
||||
| 8 | 授课教师 |
|
||||
| 9 | 日期 |
|
||||
|
||||
`oucksfm.sty` 的解法是在**每个** `\fontsize` 之后紧跟 `\linespread{1}\relax`,
|
||||
并且在 `\AtBeginDocument` 之后再设一次(ctex 会在 `\begin{document}` 时
|
||||
把 `\linespread` 重新设回 1.3,只在导言区设是无效的):
|
||||
## 标签文字
|
||||
|
||||
表左侧的标签默认是:
|
||||
|
||||
```latex
|
||||
\AtBeginDocument{\linespread{1}\selectfont}
|
||||
\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 期}
|
||||
```
|
||||
|
||||
没有这一步,表高会比原卷高出一大截。
|
||||
字号不一致的标签用 `\quad` 补空格对齐。
|
||||
|
||||
## 正文
|
||||
|
||||
```latex
|
||||
\begin{document}
|
||||
\sfmtitle{信息科学与工程学部试卷归档封面}
|
||||
\begin{sfmtable}
|
||||
\sfmlabel{\sfmyearlabel} & \sfmvalbig{\sfmyear} \\
|
||||
...
|
||||
\end{sfmtable}
|
||||
```
|
||||
|
||||
`\sfmlabel` 排标签,`\sfmval` / `\sfmvalbig` / `\sfmvalsmall` 排值(三档字号)。
|
||||
|
||||
### 其他命令
|
||||
|
||||
| 命令 | 用途 |
|
||||
|---|---|
|
||||
| `\sfmtitle{标题}` | 表外标题 |
|
||||
| `\sfmlabel{文字}` | 左列标签 |
|
||||
| `\sfmval{值}` | 中号值 |
|
||||
| `\sfmvalbig{值}` | 大号值 |
|
||||
| `\sfmvalsmall{值}` | 小号值 |
|
||||
| `\sfmtail{文字}` | 表尾文字 |
|
||||
| `\sfmrule` | 横线 |
|
||||
|
||||
## 版式
|
||||
|
||||
```
|
||||
A4,单页
|
||||
标签黑体,值黑体(\ph),纯数字用西文
|
||||
表格行高按原表设定,第 5 行(面向专业)为高行
|
||||
```
|
||||
|
||||
## 注意
|
||||
|
||||
示例内容为虚构数据,使用时全部替换成自己的课程。
|
||||
Reference in New Issue
Block a user