点名册:课程信息六项改为定宽三栏对齐 #26

原来用 \hfill 均分,各栏起点随内容长短漂移,两行对不齐:
第 2 栏差 42pt、第 3 栏差 55pt。

改为定宽三栏:版心 269mm 三等分,每栏 89.67mm,
标签占 18mm,值占 63.67mm。上下两行冒号位置严格重合。

值超长自动折行,不会压到下一栏。

验证:两行冒号位置 90.7 / 344.9 / 599.1 完全一致,差值 0.0。
全库 17/17 通过,点名册 error 0、Overfull 0。
This commit is contained in:
2026-11-03 22:09:02 +08:00
parent b3df669850
commit 9c959c0a2f
3 changed files with 66 additions and 15 deletions
+24 -1
View File
@@ -119,13 +119,36 @@ A4 横向(297 × 210mm),上下边距 14/16mm,扣掉标题、课程信息
A4 横向 297 × 210 mm A4 横向 297 × 210 mm
边距 左右 14mm,上 12mm,下 16mm 边距 左右 14mm,上 12mm,下 16mm
标题 20pt 黑体居中 标题 20pt 黑体居中
课程信息 10.5pt,两行三项 课程信息 10.5pt,两行三项,三栏定宽对齐
表格 20 列 × (1 表头 + N 数据行) 表格 20 列 × (1 表头 + N 数据行)
表头行高 7.0mm,数据行高 4.5mm 表头行高 7.0mm,数据行高 4.5mm
正文 10.5pt,表头 8pt,表体 10pt 正文 10.5pt,表头 8pt,表体 10pt
不排页码 不排页码
``` ```
### 课程信息的对齐
六项按两行三栏排,栏位固定:
```
课程名称:xxx 课程号:xxx 选课号:xxx
学分:xxx 任课教师:xxx 学年学期:xxx
```
每栏宽 89.67mm(版心 269mm 三等分),标签占 18mm,值占 63.67mm。
上下两行的冒号位置严格对齐。
值超过 17 个汉字会自动折行,不会压到下一栏。要调整栏宽或标签宽度,
改 `oucroll.sty`:
```latex
\setlength{\rollcolw}{89.6667mm} % 每栏宽
\setlength{\rolllabw}{18mm} % 标签宽
\setlength{\rollvalw}{63.6667mm} % 值宽
```
三者关系:`rollvalw = rollcolw − rolllabw − 8mm`(8mm 是栏间余量)。
## 注意 ## 注意
示例学生名单是虚构数据,使用时全部替换。 示例学生名单是虚构数据,使用时全部替换。
+42 -14
View File
@@ -42,7 +42,7 @@
\fontsize{10.5bp}{13bp}\selectfont} \fontsize{10.5bp}{13bp}\selectfont}
\newcommand{\rolltitlefont}{\linespread{1}\relax\fontsize{20bp}{24bp}\selectfont} \newcommand{\rolltitlefont}{\linespread{1}\relax\fontsize{20bp}{24bp}\selectfont}
\newcommand{\rollinfofont} {\linespread{1}\relax\fontsize{10.5bp}{13bp}\selectfont} \newcommand{\rollinfofont} {\linespread{1}\relax\fontsize{10.5bp}{15bp}\selectfont}
\newcommand{\rollheadfont} {\linespread{1}\relax\fontsize{8bp}{9.5bp}\selectfont} \newcommand{\rollheadfont} {\linespread{1}\relax\fontsize{8bp}{9.5bp}\selectfont}
\newcommand{\rollcellfont} {\linespread{1}\relax\fontsize{10bp}{12.5bp}\selectfont} \newcommand{\rollcellfont} {\linespread{1}\relax\fontsize{10bp}{12.5bp}\selectfont}
\newcommand{\rollweekfont} {\linespread{1}\relax\fontsize{7.5bp}{9bp}\selectfont} \newcommand{\rollweekfont} {\linespread{1}\relax\fontsize{7.5bp}{9bp}\selectfont}
@@ -88,10 +88,6 @@
\newcommand{\rollsetterm}[1]{\renewcommand{\rollterm}{#1}} \newcommand{\rollsetterm}[1]{\renewcommand{\rollterm}{#1}}
\newcommand{\rollsetdept}[1]{\renewcommand{\rolldept}{#1}} \newcommand{\rollsetdept}[1]{\renewcommand{\rolldept}{#1}}
% 一项:标签(黑体) + 值
\newcommand{\rollfield}[2]{%
{\heiti #1}:#2}
%====================================================================== %======================================================================
% 五、标题 % 五、标题
%====================================================================== %======================================================================
@@ -103,18 +99,50 @@
%====================================================================== %======================================================================
% 六、课程信息区 % 六、课程信息区
% %
% 两行,每行三项,用 \hfill 撑开 % 两行 × 三栏,定宽对齐。
%
% ⚠️ 不能用 \hfill 均分:\hfill 只均分行内剩余空间,各栏起点会随
% 标签与值的长短前后漂移,六项在两行里对不上。
%
% ⚠️ 值用 \parbox 显式限宽,不用 tabular 的 p 列。
% p 列在 xeCJK 下遇到全角标点(如「(」)时断行判定不稳定,
% 实测同样列宽,有的内容断、有的不断。\parbox 加 \raggedright
% 断行行为可预期。
%====================================================================== %======================================================================
\newlength{\rollcolw}
\setlength{\rollcolw}{89.6667mm} % 269mm / 3
\newlength{\rolllabw}
\setlength{\rolllabw}{18mm} % 标签宽,「学年学期」四字 × 10.5bp ≈ 14.8mm
\newlength{\rollvalw}
\setlength{\rollvalw}{63.6667mm} % 值宽 = 89.6667 − 18 − 8(栏间余量)
% 一栏:标签(定宽黑体)+ 冒号 + 值(定宽,超长自动换行)
%
% ⚠️ 值必须加 \sloppy。xeCJK 对全角标点(如「(」)前后有断行禁则,
% 正常断行惩罚下 TeX 宁可溢出也不在此处断,表现为文字压到下一栏。
% \sloppy 放宽 \tolerance,让它在下一个汉字边界断掉。
\newcommand{\rollfield}[2]{%
\makebox[\rolllabw][l]{\heiti #1}%
\parbox[t]{\rollvalw}{\raggedright\sloppy :#2}}
% 三栏一行
\newcommand{\rollinforow}[6]{%
\noindent
\rollfield{#1}{#2}\hspace*{8mm}%
\rollfield{#3}{#4}\hspace*{8mm}%
\rollfield{#5}{#6}\par}
\newcommand{\rollinfo}{% \newcommand{\rollinfo}{%
\begingroup\rollinfofont \begingroup\rollinfofont
\noindent \rollinforow{课程名称}{\rollcourse}%
\rollfield{课程名称}{\rollcourse}\hfill {课程号}{\rollcno}%
\rollfield{课程号}{\rollcno}\hfill {选课号}{\rollsno}%
\rollfield{选课号}{\rollsno}\par\vspace*{1.2mm} \vspace*{1.2mm}%
\noindent \rollinforow{学分}{\rollcredit}%
\rollfield{学分}{\rollcredit}\hfill {任课教师}{\rollteacher}%
\rollfield{任课教师}{\rollteacher}\hfill {学年学期}{\rollterm}%
\rollfield{学年学期}{\rollterm}\par
\endgroup\vspace*{2.5mm}} \endgroup\vspace*{2.5mm}}
%====================================================================== %======================================================================
Binary file not shown.