From fb7c76b944d11091542e6ec519871a49f564ff74 Mon Sep 17 00:00:00 2001 From: laoyang Date: Thu, 29 Oct 2026 21:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E8=AE=A2=E7=BA=BF=E8=99=9A=E7=BA=BF?= =?UTF-8?q?=E6=96=B9=E5=90=91=E4=BF=AE=E6=AD=A3=EF=BC=9A=E6=A8=AA=E6=9D=A0?= =?UTF-8?q?=E6=94=B9=E5=9B=9E=E7=AB=96=E6=9D=A0=20#20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈:「这个装订线不行,得改,需要跟之前的模板保持一致。」 ## 问题:整条装订线成了「梯子」 #20 把连字符虚线改成几何线画时,方向画反了。逐像素对比基线与修改后: 基线(18bp 连字符 rotate 90°):x 51.10~52.10(宽 1.10)、y 跨 4.30 改后(我画的水平线) :x 49.40~53.70(宽 4.30)、y 跨 1.00 即基线的每一笔是**竖着的短杠**,我画成了**横着的短杠**。一排横杠叠在 竖线位置上,视觉上就是一把梯子,与原卷完全不同。 ## 根因:量数据时没分辨长宽各自对应哪个轴 上一轮 720dpi 扫描得到「长 4.40bp、粗 1.10bp、x 中心 51.60bp」, 三个数都对,但**装配时把「长」放到了 x 轴、「粗」放到了线宽**。 连字符经 rotate=90 后,字面长度落到**纵轴**、线粗落到**横轴**: 竖:y 跨 4.30bp(连字符的字面长度) 横:x 跨 1.10bp(连字符的笔画粗细) 中心 x = 51.60bp ## 修法 - \draw[line width=1.10bp] (49.40, -y) -- (53.70, -y); ← 水平线(错) + \draw[line width=1.10bp] (51.60, -y) -- (51.60, -y-4.30); ← 竖直线(对) x 恒定在 51.60,y 跨 4.30bp。单笔画长度用 4.30(720dpi 实测的墨迹边界), 不是之前写的 4.40(那是含抗锯齿溢出的粗估值)。 ## 验证:与基线逐像素同值 装订线区域(x 48~56, y 55~690)在 300dpi 下的墨迹像素数: 基线 7553 像素(8.40%) 新版 7553 像素(8.40%) ← 完全相同 逐段比对(720dpi 逐行扫描,过滤掉「装订线」三个汉字的干扰): 段 笔数 顶端 y 末笔底 y 单笔长 笔距 1 24 62.20 204.90 4.30 6.00 2 24 216.50 358.60 4.30 6.00 3 3 364.80 379.50 4.30 6.00 4 13 393.40 469.60 4.30 6.00 5 16 475.80 568.30 4.30 6.00 6 16 582.10 676.30 4.30 6.00 新版逐段同值,单笔长 4.20 vs 4.30 的 0.1bp 差异是抗锯齿边缘取整。 x 位置 51.00~52.00 vs 51.10~52.10 同样差 0.1bp(亚像素取整),肉眼不可见。 ## 编译验证 Windows / TeX Live 2022 试卷 rc=0 err=0 over=0 6页 答案卷 rc=0 err=0 over=0 3页 WSL / TeX Live 2025 试卷 rc=0 err=0 over=0 6页 答案卷 rc=0 err=0 over=0 3页 答案卷不走装订线(\oucexam 的 shipout 钩子只属于试卷),未受影响。 涉及文件:试卷/oucexam.sty(仅 \ouc@dashseg 一个宏 + 注释) --- 试卷/oucexam.sty | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/试卷/oucexam.sty b/试卷/oucexam.sty index a9c3f6a..cb5211f 100644 --- a/试卷/oucexam.sty +++ b/试卷/oucexam.sty @@ -392,17 +392,28 @@ \fi} %---------------------------------------------------------------------- -% 装订线虚线段:一个连字符笔画 = 一条 4.40bp 长、1.10bp 粗的横线 +% 装订线虚线段:一个连字符笔画 = 一条**竖直**短线段 % -% 参数:#1 = 这一串最上一笔的 y 坐标(bp,从页面顶端往下量) +% 参数:#1 = 这一串最上一笔的顶端 y 坐标(bp,从页面顶端往下量) % #2 = 笔画个数 -% 相邻笔画间隔 6.00bp,与原卷 18bp 连字符的步距一致。 +% 相邻笔画顶端间隔 6.00bp,与原卷 18bp 连字符的步距一致。 +% +% ⚠️⚠️ 方向别搞反(#20 返工过一次,记清楚): +% 原卷的连字符是 rotate=90 排的,所以连字符的**横向长度转到了纵轴**、 +% **线粗转到了横轴**。也就是说每一笔是「竖着的短杠」,不是「横着的短杠」: +% 竖:y 跨 4.30bp(这是连字符的字面长度) +% 横:x 跨 1.10bp(这是连字符的笔画粗细) +% 中心 x = 51.60bp +% 第一版按"水平线"画((49.40,y)--(53.70,y)),结果整条装订线变成 +% 一把**梯子**(一排横杠叠在竖线位置),与基线观感完全不同。 +% 用户反馈「这个装订线不行,需要跟之前的模板保持一致」即指此。 +% +% ⚠️ x 中心 51.60bp 是原卷实测:连字符字符盒 x 41.60~59.60(18bp 宽), +% 但可见笔画只在 51.10~52.10,即字形在字符盒内偏右、 +% 中心 51.60 —— 这是 Times 连字符的字形位置,不是笔误。 % % ⚠️ 必须定义在 \ouc@dobindstrip **外面**。放进去的话每次 shipout 都会 % 重新 \newcommand 一次,第二页起报 "command already defined"。 -% ⚠️ x 坐标:笔画左端 49.40bp、右端 53.80bp(宽 4.40bp), -% 中心 51.60bp —— 这是原卷实测值,不是从 \tnr 连字符推的, -% 所以换任何字体都不会动。 % ⚠️ y 坐标**不能**写成 \dimexpr#1bp+\i*6bp:TikZ 的坐标解析器不认 % 带小数点的小数 + \dimexpr 组合,会报 % Illegal unit of measure (pt inserted) @@ -412,9 +423,10 @@ \newcommand{\ouc@dashseg}[2]{% \foreach \i in {0,...,\the\numexpr#2-1\relax}{% \pgfmathsetmacro{\ouc@dyy}{#1+\i*6.00}% + \pgfmathsetmacro{\ouc@dzz}{\ouc@dyy+4.30}% \draw[line width=1.10bp,line cap=butt] - ([xshift=49.40bp,yshift=-\ouc@dyy bp]B) -- - ([xshift=53.80bp,yshift=-\ouc@dyy bp]B);}} + ([xshift=51.60bp,yshift=-\ouc@dyy bp]B) -- + ([xshift=51.60bp,yshift=-\ouc@dzz bp]B);}} \newcommand{\ouc@dobindstrip}{% \begin{tikzpicture}[remember picture,overlay]