Plex Math: pieces of horizontal stretchy brackets and double arrows snap to different pixel rows
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 46/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- tex
- 领域
- design
调研方向
The issue identifies uni23DE.lft, uni23DE.ext and uni23DE.mid and reports similar joins in other horizontal assemblies; it does not name source files or tests. Start by locating the font source and instructions for these glyphs, then reproduce the reported joins at the listed sizes with hinting enabled. Done means the shared strokes align across the tested assemblies without losing crispness or creating brighter pixels at joins.
由索引模型根据 Issue 内容生成。
描述
In IBM Plex Math 1.1.0 (@ibm/plex-math on npm), the pieces of several horizontal stretchy glyphs hint the same stroke with different programs. At many sizes the hinted stroke of the extender lands exactly one pixel above or below the stroke of the end or middle piece next to it, so the assembled glyph has a step at each join. I see this in Chrome and Firefox on Windows on a 1080p screen, both at text sizes and under pinch zoom.
U+23DE (top curly bracket) is an example. The outlines of uni23DE.lft, uni23DE.ext and uni23DE.mid all put the stroke at y = 714 to 780. lft and mid have their own instructions (44 and 68 bytes). ext is a reference to uni23B4.ext, the extender of U+23B4, and uses its 11 bytes of instructions. The three programs round the shared stroke to different pixel rows at some sizes.
Here is U+23DE at 20 px, rendered with FreeType with hinting on and magnified. The top row is the original font; the bottom row is the same font rehinted with ttfautohint, discussed below.
I rendered every horizontal assembly in the MATH table with FreeType, hinting on, from 14 to 80 px in 0.25 px steps, and compared the stroke height on both sides of each join. These have 1 px steps:
| Glyphs | Sizes with a step (of 265) |
|---|---|
| U+21DA, U+21DB (triple arrows) | 83 |
| U+23B5, U+23DD, U+23DF, U+23E1 (bottom brackets) | 63 |
| U+23B4, U+23DC, U+23DE, U+23E0 (top brackets) | 52 |
| U+21D0, U+21D2, U+21D4 (double arrows) | 24 |
The single arrows, harpoons and combining marks have none. I didn't test the vertical assemblies: Windows and FreeType apply hints only in y, so their vertical strokes shouldn't be affected.
To reproduce, open this page on Windows at 100% scaling and look along the rows for steps in the brace:
<!doctype html>
<meta charset="utf-8">
<style>
@font-face { font-family: "IBM Plex Math"; src: url("https://cdn.jsdelivr.net/npm/@ibm/[email protected]/fonts/complete/woff2/IBMPlexMath-Regular.woff2") format("woff2"); }
math { font-family: "IBM Plex Math", math; }
</style>
<div id="rows"></div>
<script>
const sample = `<math><mover><mrow><mi>a</mi><mo>+</mo><mi>b</mi><mo>+</mo><mi>c</mi><mo>+</mo><mi>d</mi></mrow><mo stretchy="true">⏞</mo></mover></math>`;
for (let px = 14; px <= 22; px += 0.25)
document.getElementById("rows").insertAdjacentHTML("beforeend", `<div style="font-size:${px}px">${px}px ${sample}</div>`);
</script>
What I tried on a local copy:
- Removing all instructions makes the pieces line up, but the strokes get blurry at text sizes and the overlapping connectors show as brighter pixels at the joins.
- Rehinting the whole font with ttfautohint at default settings removes the steps at all 265 sizes, but the stroke keeps its real thickness (about 1.3 px at 20 px) and turns grey across rows, as in the bottom row of the image.
- With ttfautohint's strong stem snapping the stroke is crisp more often, but the steps come back (72 sizes for U+23DE).
So I don't think a generic autohinter can fix it. The pieces of each assembly would need to snap the shared stroke edges the same way, for example by rounding them against the same CVT entries.
- 主要语言
- CSS
- 星标
- 11.8k
- 派生
- 626
- 平均合并
- 1 天 9 小时
- 30 天内合并 PR
- 2
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
IBM/plex 的其他 Issue
-
难度 5/5 一周以上 新手友好度 15/100
-
security
难度 2/5 1-3 小时 新手友好度 35/100
-
难度 4/5 1-3 小时 新手友好度 8/100
-
难度 4/5 3-5 天 新手友好度 40/100
-
难度 3/5 1-2 天 新手友好度 55/100
相似的 Issue
-
enhancement
难度 2/5 1-3 小时 新手友好度 68/100
IacobIonut01/ReFra#1457 ·
维护者通常 17 天内回复
-
[Type] Enhancement
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 3 天内回复
-
Pin `scope.options.variant` on the `status-light` "Semantic (Dot)" / "Non-semantic (Dot)" relationships可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭design-data-spec
难度 2/5 1-3 小时 新手友好度 66/100
adobe/spectrum-design-data#1755 · 2 条评论 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
-
Ok in the chart settings without edits shows the right price axis on a chart whose host hid both未关闭bug ui
难度 2/5 1-3 小时 新手友好度 84/100
userFRM/egui-charts#2870 ·
维护者通常 1 天内回复