装订线虚线方向修正:横杠改回竖杠 #20
用户反馈:「这个装订线不行,得改,需要跟之前的模板保持一致。」 ## 问题:整条装订线成了「梯子」 #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 一个宏 + 注释)
This commit is contained in:
+20
-8
@@ -392,17 +392,28 @@
|
|||||||
\fi}
|
\fi}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% 装订线虚线段:一个连字符笔画 = 一条 4.40bp 长、1.10bp 粗的横线
|
% 装订线虚线段:一个连字符笔画 = 一条**竖直**短线段
|
||||||
%
|
%
|
||||||
% 参数:#1 = 这一串最上一笔的 y 坐标(bp,从页面顶端往下量)
|
% 参数:#1 = 这一串最上一笔的顶端 y 坐标(bp,从页面顶端往下量)
|
||||||
% #2 = 笔画个数
|
% #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 都会
|
% ⚠️ 必须定义在 \ouc@dobindstrip **外面**。放进去的话每次 shipout 都会
|
||||||
% 重新 \newcommand 一次,第二页起报 "command already defined"。
|
% 重新 \newcommand 一次,第二页起报 "command already defined"。
|
||||||
% ⚠️ x 坐标:笔画左端 49.40bp、右端 53.80bp(宽 4.40bp),
|
|
||||||
% 中心 51.60bp —— 这是原卷实测值,不是从 \tnr 连字符推的,
|
|
||||||
% 所以换任何字体都不会动。
|
|
||||||
% ⚠️ y 坐标**不能**写成 \dimexpr#1bp+\i*6bp:TikZ 的坐标解析器不认
|
% ⚠️ y 坐标**不能**写成 \dimexpr#1bp+\i*6bp:TikZ 的坐标解析器不认
|
||||||
% 带小数点的小数 + \dimexpr 组合,会报
|
% 带小数点的小数 + \dimexpr 组合,会报
|
||||||
% Illegal unit of measure (pt inserted)
|
% Illegal unit of measure (pt inserted)
|
||||||
@@ -412,9 +423,10 @@
|
|||||||
\newcommand{\ouc@dashseg}[2]{%
|
\newcommand{\ouc@dashseg}[2]{%
|
||||||
\foreach \i in {0,...,\the\numexpr#2-1\relax}{%
|
\foreach \i in {0,...,\the\numexpr#2-1\relax}{%
|
||||||
\pgfmathsetmacro{\ouc@dyy}{#1+\i*6.00}%
|
\pgfmathsetmacro{\ouc@dyy}{#1+\i*6.00}%
|
||||||
|
\pgfmathsetmacro{\ouc@dzz}{\ouc@dyy+4.30}%
|
||||||
\draw[line width=1.10bp,line cap=butt]
|
\draw[line width=1.10bp,line cap=butt]
|
||||||
([xshift=49.40bp,yshift=-\ouc@dyy bp]B) --
|
([xshift=51.60bp,yshift=-\ouc@dyy bp]B) --
|
||||||
([xshift=53.80bp,yshift=-\ouc@dyy bp]B);}}
|
([xshift=51.60bp,yshift=-\ouc@dzz bp]B);}}
|
||||||
|
|
||||||
\newcommand{\ouc@dobindstrip}{%
|
\newcommand{\ouc@dobindstrip}{%
|
||||||
\begin{tikzpicture}[remember picture,overlay]
|
\begin{tikzpicture}[remember picture,overlay]
|
||||||
|
|||||||
Reference in New Issue
Block a user