成绩构成说明:表格格线全画 + 签字栏去掉年份占位 #9
用户反馈:中间表格要把线都画上,中间空白容易看错行;最后的年月日
也不要带 20xx。
① 表格格线全画
hline{1,Z}+hline{2}+vline{1,Z} → hline{1-Z}+vline{1-Z}
只画外框时数据行之间、列之间全空,跨行格与单行格的分界看不出。
连带必须改列宽:画上 5 条内部竖线后表宽多 2.5pt,报
Overfull 2.47554pt,末列 30.28mm → 29.40mm 补回。
连带暴露出被掩盖的缺陷:「理论课」左跨 2 行,右格「平时成绩
(作业20%、点名10%)」只占 row2 一行、在 26mm 列里折 3 行,
自然高 54.73pt —— row2 被撑到 54.73pt,文字上下零留白,末行
「10%)」墨迹底离行线仅 0.90pt(0.32mm),其他行是 4.97pt。
画满格线前那里本来没有线,缺陷完全看不到。
治法 row{2}={ht=22mm}。关键是 ht 为最小高度、须大于内容高才生效:
先试 12.5mm(35.4pt < 54.73pt)无反应,22mm(62.4pt)才把行撑到
62.86pt,末行墨迹间隙 4.08pt(1.44mm),与其他行同量级。
② 签字栏去掉年份
20××~年 月 日 → 年 月 日。签名文件的年份由签字人当场手写,
模板预留占位符反而占掉手写空间。
③ 修掉 3 处真实数据泄漏(本单上一版遗留)
README 引用原件全文处、README「真实数据零泄漏」一节(这一节
为了证明零泄漏反而把真实课程名/学年/教师名原样列出)、
.tex 的「闭卷笔试」。已复查 10 个关键词零命中。
验收:1 页、零 Overfull/Underfull/Missing character;格线逐条清点
(跨行格内无中线、合计行跨 6 列无内部竖线);逐字符交叉校验越列 0
处、越行 0 处;内容底 764.71pt vs 版心底 769.89pt,余量 5.18pt。
This commit is contained in:
+49
-9
@@ -82,7 +82,7 @@ xelatex 成绩构成说明.tex
|
||||
|
||||
```
|
||||
成绩构成说明
|
||||
数字逻辑 2025学年 秋季学期 期末考试
|
||||
×××× 20××学年 ×季学期 期末考试
|
||||
理论课成绩占总成绩的80%。理论课成绩包括平时成绩、期末考试成绩。
|
||||
平时成绩占30%(作业占20%,点名占10%),期末考试成绩占70%。
|
||||
实验成绩占总成绩的20%。由实验课老师提供。
|
||||
@@ -125,7 +125,11 @@ xelatex 成绩构成说明.tex
|
||||
**这是用户明确要求补的。** 没有任课教师签字的成绩构成说明,在教务
|
||||
归档时不被认作有效文件。
|
||||
|
||||
**改法**:右下角落款,含签字线与「20×× 年 月 日」。
|
||||
**改法**:右下角落款,含签字线与「年 月 日」三个手写填空位。
|
||||
|
||||
⚠️ **「年 月 日」不印年份**。成绩构成说明是学期末签署的文件,年份
|
||||
由签字人当场手写;模板里预留 `20××` 反而会占掉手写空间、并诱导
|
||||
使用者去改占位符。所以这一行只有三个字 + 两处 `\hspace` 间距。
|
||||
|
||||
### 另外新增(可关闭)
|
||||
|
||||
@@ -215,13 +219,35 @@ TeX 默认 pt 是 1/72.27 in,差 0.36%。写 `14pt` 实测输出 14.05。
|
||||
| 细分项目 | 26.00mm | 平时成绩 / 期末 |
|
||||
| 占本类 | 14.00mm | 30% |
|
||||
| 占总成绩 | 17.00mm | 24% |
|
||||
| 评定依据 | 30.28mm | 作业 + 出勤 |
|
||||
| 评定依据 | 29.40mm | 作业 + 出勤 |
|
||||
|
||||
**Σwd 为什么是 123.64 而不是 146.50**:`Q[wd=...]` 是内容区宽度,
|
||||
不含 `colsep`。每列实际占位 = `wd + 2×colsep`,6 列共多占
|
||||
`6×2×1.905 = 22.86mm`。所以
|
||||
`Σwd = 146.50 − 22.86 = 123.64mm`。
|
||||
|
||||
⚠️ **画满全格线之后每列还要再扣 0.5pt**。只画外框时表宽里不含内部
|
||||
竖线;一旦 `vline{1-Z}` 把 5 条内部竖线都画上,表宽就多出
|
||||
`5×0.5 = 2.5pt`,编译报 `Overfull \hbox (2.47554pt too wide)`。
|
||||
所以最后一列从 30.28mm 收到 29.40mm(−2.5pt)补回来。
|
||||
|
||||
### 行高:`ht` 是最小值,且跨行格不会自己长高
|
||||
|
||||
这两点一起踩过,都表现为"字贴着格线":
|
||||
|
||||
| `ht` 是否小于内容高 | 结果 |
|
||||
| :-- | :-- |
|
||||
| 是(如 `ht=7.5mm` < 54.73pt) | 行被内容撑到 54.73pt,**上下零留白**,末行墨迹底离行线只剩 0.90pt(0.32mm),其他行是 4.97pt(1.75mm)—— 一眼看出挤 |
|
||||
| 否(`ht=22mm` = 62.4pt) | 行高 62.86pt,上下各留约 3.8pt,末行墨迹底离行线 4.08pt(1.44mm),与其他行同量级 |
|
||||
|
||||
所以 **`ht` 给了不等于生效,必须大于内容自然高度**。本例「平时成绩
|
||||
(作业 20%、点名 10%)」在 26mm 列里折 3 行,自然高 54.73pt
|
||||
(= 2×17bp + 盒高),要撑开就得给到 22mm。
|
||||
|
||||
`ht` 按**表格行号**给,不是按逻辑块:`row{1}` 是表头、`row{2}` 是
|
||||
「理论课/平时成绩」那一行。抬高 `row{3}`(「期末」行)只会移动中间
|
||||
那条线,对跨行块的高度没有影响。
|
||||
|
||||
## 五个坑
|
||||
|
||||
### 坑 1:`.tex` 里写带 `@` 的宏名
|
||||
@@ -246,6 +272,22 @@ catcode 已经退化,宏名在 `@` 处断开。
|
||||
|
||||
**规矩**:`hline` / `vline` 的线宽写字面值,别用宏包一层。
|
||||
|
||||
⚠️ 关于 `1-Z` 与 `1,Z`:
|
||||
|
||||
| 写法 | 含义 | 效果 |
|
||||
| :-- | :-- | :-- |
|
||||
| `hline{1,Z}` | 第 1 条 + 最后 1 条 | 只有顶框和底框 |
|
||||
| `hline{1-Z}` | 第 1 条到末条(全部) | 每条行线都画 |
|
||||
|
||||
本模板用 `1-Z`:**所有格线都画满**。只画外框时,跨行格(理论课)
|
||||
与单行格的分界、以及数据行之间全是空白,非常容易看错行。这是
|
||||
用户明确要求改掉的点。
|
||||
|
||||
代价是每列要再扣 0.5pt 表宽(见上文「画满全格线之后每列还要再扣」
|
||||
一节),并且暴露出一个原本被掩盖的缺陷:跨行格里的第 3 行字一直
|
||||
是贴着格线的(详见上文「行高」一节)。**画满格线会让所有"零留白"
|
||||
的排版问题显形** —— 这是好事,但要预留调 `ht` 的时间。
|
||||
|
||||
### 坑 3:签字栏被挤到第 2 页
|
||||
|
||||
试过四种写法,只有最后一种同时满足「一页」+「不出界」:
|
||||
@@ -290,12 +332,10 @@ minipage 里的行末会被拉伸到满宽,12pt 的字出现夸张字距 —
|
||||
原件是**填过的实例**(真实课程名、学年、教师姓名、全部比例)。
|
||||
本模板把这些逐项换成占位符。
|
||||
|
||||
已 grep 确认以下关键词在 `oucgrade.sty` 与 `成绩构成说明.tex` 中
|
||||
**零命中**(含注释):
|
||||
|
||||
```
|
||||
数字逻辑 2025 秋季 杨永全 80% 30% 20% 10% 70%
|
||||
```
|
||||
已 grep 确认以下关键词在 `oucgrade.sty`、`成绩构成说明.tex` 与 `README.md`
|
||||
中**零命中**(含注释):原件实例的课程名、学生人数、开课号、教师姓名、
|
||||
单位名称,以及原件出现过的具体年份。本 README 不列出这些原文,
|
||||
避免「为了证明零泄漏而把真实信息写进来」。
|
||||
|
||||
注意:`80`/`20`/`30` 这些纯数字作为**默认占位值**是存在的(宏定义里),
|
||||
但它们不代表原件真实比例,替换时改掉即可。真正需要保证零命中的是
|
||||
|
||||
Reference in New Issue
Block a user