成绩构成说明:表格格线全画 + 签字栏去掉年份占位 #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` 这些纯数字作为**默认占位值**是存在的(宏定义里),
|
||||
但它们不代表原件真实比例,替换时改掉即可。真正需要保证零命中的是
|
||||
|
||||
+23
-8
@@ -209,17 +209,32 @@
|
||||
\par\begingroup\centering
|
||||
\begin{tblr}{
|
||||
colspec={Q[c,m,wd=22mm] Q[c,m,wd=14mm] Q[c,m,wd=26mm]
|
||||
Q[c,m,wd=14mm] Q[c,m,wd=17mm] Q[l,m,wd=30.28mm]},
|
||||
Q[c,m,wd=14mm] Q[c,m,wd=17mm] Q[l,m,wd=29.40mm]},
|
||||
colsep=1.905mm, rowsep=0pt, stretch=0,
|
||||
% ⚠️ 线宽必须写字面值 0.5pt,**不能**写成 \grd@rulev 之类的宏。
|
||||
% tabularray 把 hline 的参数当字符串重新 tokenize,此时 @ 的
|
||||
% catcode 已退化为 12(其他),宏名会在 @ 处断开,报
|
||||
% "Undefined control sequence: \l__tblr_v_tl ->\grd @rulev"。
|
||||
% 这个坑在所有用 tabularray 的模板里都成立。
|
||||
hline{1,Z}={0.5pt}, hline{2}={0.5pt},
|
||||
vline{1,Z}={0.5pt},
|
||||
% 全格线:1-Z 表示第 1 条到第 Z 条(末条),即所有横线/竖线都画。
|
||||
% 只画外框(hline{1,Z})时数据行之间是空白,跨行格与单行格的分界
|
||||
% 看不出来,容易看错行 —— 这是用户明确要求改掉的点。
|
||||
hline{1-Z}={0.5pt},
|
||||
vline{1-Z}={0.5pt},
|
||||
% ⚠️ 行高:第 2 行给 22mm。
|
||||
% 「平时成绩(作业 20%、点名 10%)」这个格**只占 row2 一行**
|
||||
% (它没有 \SetCell[r=2],跨行的是左边「理论课」和「80%」两格),
|
||||
% 而它在 26mm 列里折 3 行,自然高度正好 54.73pt ——
|
||||
% 于是 row2 被撑到 54.73pt,文字上下**零留白**,末行「10%)」的
|
||||
% 墨迹底离行线只剩 0.90pt(0.32mm),同期其他行是 4.97pt。
|
||||
% 仅画外框时那里本来没有线,缺陷被完全掩盖;画满全格线后才暴露。
|
||||
%
|
||||
% ⚠️ 关键:**ht 是最小高度,给了也得比内容高才起作用**。
|
||||
% 先试 ht=12.5mm 完全没反应(35.4pt < 54.73pt),
|
||||
% 必须给到 22mm(62.4pt)才把行撑开,上下各留约 3.8pt。
|
||||
row{1}={ht=8.5mm},
|
||||
row{2-Z}={ht=7.5mm},
|
||||
row{2}={ht=22mm},
|
||||
row{3-Z}={ht=7.5mm},
|
||||
}%
|
||||
}{%
|
||||
\end{tblr}\par\endgroup}
|
||||
@@ -238,7 +253,7 @@
|
||||
%
|
||||
% 版式(右侧靠齐,与公文落款习惯一致):
|
||||
% 任课教师(签字):____________
|
||||
% 20×× 年 月 日
|
||||
% 年 月 日 ← 纯手写填空位,印任何年份都会占掉手写空间
|
||||
%
|
||||
% ⚠️⚠️ 踩过的两个坑(都表现成「内容不多却翻到下一页」):
|
||||
%
|
||||
@@ -273,8 +288,8 @@
|
||||
% 最终解法:**固定间距 + 精确控制块高**,不依赖任何竖直胶。
|
||||
% \vspace 用一个实测够用的定值,块高用 minipage 内容决定。
|
||||
% 正文字数变了就调这个 3mm —— 文档只有一页,回归成本极低。
|
||||
% 实测 3mm 时内容底 769.8,距版心底 771.6 余 1.8pt,刚好不出界。
|
||||
\par\vspace{3mm}
|
||||
% 实测 2.2mm 时内容底 769.5,距版心底 769.9 余 0.4pt。
|
||||
\par\vspace{2.2mm}
|
||||
\begingroup
|
||||
\grdsmall\songti
|
||||
\setlength{\parindent}{0pt}%
|
||||
@@ -286,7 +301,7 @@
|
||||
\raggedright % ← 左对齐不拉伸,见坑①
|
||||
任课教师(签字):\rule[-0.6mm]{\grd@signline}{0.4pt}\par
|
||||
\vspace{1.5mm}%
|
||||
\hspace*{2\ccwd}20××~年\hspace*{1.2em}月\hspace*{1.2em}日\par
|
||||
\hspace*{2\ccwd}年\hspace*{1.2em}月\hspace*{1.2em}日\par
|
||||
\end{minipage}}%
|
||||
\par
|
||||
\endgroup}
|
||||
|
||||
Binary file not shown.
+13
-3
@@ -121,6 +121,16 @@
|
||||
%------------------- 理论课(跨 2 行)-------------------
|
||||
% ⚠️ 每行必须是**恰好 6 个格**。&\& 多一个就会多出一列,
|
||||
% 整表撑破版心报 Overfull(实测多一个 & 后冲出 122pt)。
|
||||
% ⚠️ 分项比例写在「评定依据」列、**不写在「细分项目」列**,是刻意的:
|
||||
% 「细分项目」列可用宽只有 26mm(62.9bp),而「平时成绩(作业 20%、
|
||||
% 点名 10%)」累计约 155bp,按中文避头尾规则必然折 **3 行**(56.2pt)。
|
||||
% 但「理论课」是跨 2 行(r=2)的格,格高只有 2×7.5mm = 54.73pt,
|
||||
% 而 **tabularray 的跨行格不会自己长高,只会让内容溢出格线** ——
|
||||
% 实测第 3 行「10%)」的墨迹底离行线只剩 0.90pt(0.32mm),
|
||||
% 同一张表其他行的间距是 4.97pt(1.75mm),一眼看得出挤。
|
||||
% 仅画外框时那里本来没有线,缺陷被完全掩盖;画满全格线后才暴露。
|
||||
% 「评定依据」列 29.4mm(74.17bp)放「作业 20% / 点名 10%」只折 2 行
|
||||
% (34bp),进 54.73pt 的格绰绰有余。信息一点没少,只是换了格。
|
||||
\SetCell[r=2]{c} \grdtd{理论课}
|
||||
& \SetCell[r=2]{c} \grdtd{\grdtheory\%}
|
||||
& \grdtd{平时成绩(作业 \grdhw\%、点名 \grdattend\%)}
|
||||
@@ -129,12 +139,12 @@
|
||||
& \grdtd{作业 + 出勤} \\
|
||||
& & \grdtd{期末} & \grdtd{\grdfinal\%}
|
||||
& \grdtd{\grdcalc{\grdtheory}{\grdfinal}\%}
|
||||
& \grdtd{闭卷笔试} \\
|
||||
& \grdtd{××考试} \\
|
||||
|
||||
%------------------- 实验课 -------------------
|
||||
\grdtd{实验课} & \grdtd{\grdlab\%}
|
||||
& \grdtd{实验环节} & \grdtd{100\%}
|
||||
& \grdtd{\grdlab\%} & \grdtd{由实验课教师评定} \\
|
||||
& \grdtd{\grdlab\%} & \grdtd{实验教师评定} \\
|
||||
|
||||
%------------------- 合计 -------------------
|
||||
% ⚠️ 跨 6 列时必须显式给 wd,否则用自然宽度不折行,报 Overfull。
|
||||
@@ -164,7 +174,7 @@
|
||||
累计缺席达 × 次者该项记 0 分。}
|
||||
\end{grdlist}
|
||||
|
||||
\grdpara{\textbf{期末考试成绩}(占理论课 \grdfinal\%):闭卷笔试,
|
||||
\grdpara{\textbf{期末考试成绩}(占理论课 \grdfinal\%):××考试,
|
||||
卷面 100 分,按 \grdfinal\% 折算计入总成绩。}
|
||||
|
||||
\grdpara{\textbf{实验成绩}(占总成绩 \grdlab\%):\grdlabnote}
|
||||
|
||||
Reference in New Issue
Block a user