点名册:课程信息六项改为定宽三栏对齐 #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
+42 -14
View File
@@ -42,7 +42,7 @@
\fontsize{10.5bp}{13bp}\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{\rollcellfont} {\linespread{1}\relax\fontsize{10bp}{12.5bp}\selectfont}
\newcommand{\rollweekfont} {\linespread{1}\relax\fontsize{7.5bp}{9bp}\selectfont}
@@ -88,10 +88,6 @@
\newcommand{\rollsetterm}[1]{\renewcommand{\rollterm}{#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}{%
\begingroup\rollinfofont
\noindent
\rollfield{课程名称}{\rollcourse}\hfill
\rollfield{课程号}{\rollcno}\hfill
\rollfield{选课号}{\rollsno}\par\vspace*{1.2mm}
\noindent
\rollfield{学分}{\rollcredit}\hfill
\rollfield{任课教师}{\rollteacher}\hfill
\rollfield{学年学期}{\rollterm}\par
\rollinforow{课程名称}{\rollcourse}%
{课程号}{\rollcno}%
{选课号}{\rollsno}%
\vspace*{1.2mm}%
\rollinforow{学分}{\rollcredit}%
{任课教师}{\rollteacher}%
{学年学期}{\rollterm}%
\endgroup\vspace*{2.5mm}}
%======================================================================