From 9c959c0a2f2e29498b27a7834001f965df19d5d2 Mon Sep 17 00:00:00 2001 From: laoyang Date: Tue, 3 Nov 2026 22:09:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E5=90=8D=E5=86=8C=EF=BC=9A=E8=AF=BE?= =?UTF-8?q?=E7=A8=8B=E4=BF=A1=E6=81=AF=E5=85=AD=E9=A1=B9=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=AE=9A=E5=AE=BD=E4=B8=89=E6=A0=8F=E5=AF=B9=E9=BD=90=20#26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来用 \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。 --- 点名册/README.md | 25 +++++++++++++++++++- 点名册/oucroll.sty | 56 +++++++++++++++++++++++++++++++++------------ 点名册/点名册.pdf | Bin 47765 -> 47748 bytes 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/点名册/README.md b/点名册/README.md index 5e4f908..8f4682a 100644 --- a/点名册/README.md +++ b/点名册/README.md @@ -119,13 +119,36 @@ A4 横向(297 × 210mm),上下边距 14/16mm,扣掉标题、课程信息 A4 横向 297 × 210 mm 边距 左右 14mm,上 12mm,下 16mm 标题 20pt 黑体居中 -课程信息 10.5pt,两行三项 +课程信息 10.5pt,两行三项,三栏定宽对齐 表格 20 列 × (1 表头 + N 数据行) 表头行高 7.0mm,数据行高 4.5mm 正文 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 是栏间余量)。 + ## 注意 示例学生名单是虚构数据,使用时全部替换。 \ No newline at end of file diff --git a/点名册/oucroll.sty b/点名册/oucroll.sty index 7fff70b..87d5a4b 100644 --- a/点名册/oucroll.sty +++ b/点名册/oucroll.sty @@ -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}} %====================================================================== diff --git a/点名册/点名册.pdf b/点名册/点名册.pdf index b5338d9d77208866d82987aefb6cde1d9baf8b11..2988e978d062765e8677c2027c9692b5568d324b 100644 GIT binary patch delta 6604 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