点是一种奇怪且不统一的度量单位

Lobsters Hottest 新闻

摘要

一项关于印刷点单位历史不一致性的深入技术探讨,解释了为什么 TeX(72.27 点/英寸)和 Inkscape(72 点/英寸)使用不同的定义,根源在于 19 世纪的标准化以及唐纳德·克努特的务实调整。

<p><a href="https://lobste.rs/s/xsifwf/points_are_weird_inconsistent_unit">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/13 18:18

# 点数:一种奇怪且不一致的度量单位 来源:https://buttondown.com/hillelwayne/archive/points-are-a-weird-and-inconsistent-unit-of 部分点大小示意图来自《排版实践》(The Practice of Typography) 我正在进行《程序员逻辑》(https://logicforprogrammers.com/)一书的图表重制工作,这暴露了一个令人头疼的问题。这本书用 LaTeX 排版,采用 10.8pt × 7.2pt 的伪网格布局。图表则在 Inkscape 中使用 10.8pt × 7.2pt 网格绘制。 上周我发现,这两个"点"并不相同。 LaTeX 将一个点定义为 1/72.27 英寸(0.3515 毫米)。而 Inkscape 使用 1/72 英寸(0.3528 毫米)。两者仅相差 0.4%,但两种广泛使用的数字技术竟然存在差异,这让我震惊! 那么,呃,*到底发生了什么?* 花了几个小时查阅资料后,我找到了以下信息,不过事先声明:我并没有花太多时间研究,这只是初步印象。 ## 点到底是什么? 点(https://en.wikipedia.org/wiki/Point_(typography))是一种排版计量单位,起源于 1517 年,据说是印刷商能用到的最小有意义尺寸。值得注意的是,这并非标准化单位——历史上不同公司根据其设备使用不同大小的点。随着时间推移,它逐渐标准化,但每个国家选择了不同的标准:德国和日本的点是 0.250 毫米,法国点据说是 0.399 毫米,等等。 但早期计算机历史严重以美国为中心,所以技术界采用了美国的标准。在美国,点大约在 19 世纪末标准化。标准是怎样的?我不确定。这份 1900 年的资料(https://archive.org/details/practiceoftypogr00devirich/page/150/mode/1up)将一点的长度定义为 35/996 厘米(72.281 点/英寸),然后又说一英尺恰好有 867.4699"ems"(72.289 点/英寸)。这份 1916 年的资料(https://books.google.com/books?id=yUkHAwAAQBAJ&pg=PA57#v=onepage&q&f=false)说标准 pica(12 点)是 0.16604 英寸,一英尺有 72.272 "pica ems"。这正好得出 72.272 点/英寸(pica 等于 12 点)。然后下一页又说不对,pica 实际上是 0.16604**4** 英寸,一点正好是 0.013837 英寸。我还找到其他来源,都有不同的定义。 我将这些差异归因于"米和英尺的定义随时间变化"以及"这些差异不到一微米,谁在乎呢"的混合体。我在乎,我太在乎了。无论如何,官方的 NIST 定义(https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular570.pdf)将一点定为 0.013837 英寸,这样就是 72.27 点/英寸。 错!你这个大傻瓜。实际上是 72.270001 点/英寸。这让 Donald Knuth 非常不爽,以至于他在 TeX(https://latex.us/systems/knuth/dist/tex/texbook.tex)(第 58 页)中调整了比例: > TeX 的"pt"被略微做得比官方印刷点大,官方印刷点由美国活字铸造协会于 1886 年定义为精确的 0.013837 英寸【见美国国家标准局 Circular 570 (1956)】。实际上,一个经典点恰好是 0.99999999 pt,因此"误差"本质上只有一亿分之一。…… 新的定义 72.27 pt = 1 in 不仅更便于计算,也更易于记忆。 (解释一下他的动机:美国印刷商用英寸度量,并将点定义为英寸的分数。TeX 则用点度量,将英寸定义为点的倍数。) 附注:NIST 似乎认为"72 点/英寸"是足够好的近似值。TeX 将该值称为 `bp`(大点)。 ## 也就是 Inkscape 使用的值 那么 Inkscape 呢?据我所知,这源于 PostScript 格式对单位尺寸的定义(https://archive.org/details/postscriptlangua0000unse_c7i6/page/60/mode/2up?q=72): > 沿 x 轴和 y 轴的单位长度为 1/72 英寸。我们称这个坐标系为*默认用户空间*。默认用户空间的这些特性是出于数学简单性和便利性而选择的。轴的位置和方向遵循常见的数学惯例,使当前页面内的所有点都具有正的 x 和 y 坐标值。单位尺寸 1/72 英寸非常接近印刷用点(1/72.27 英寸)的大小,后者是印刷行业使用的标准计量单位。 后来在第 86 页(https://archive.org/details/postscriptlangua0000unse_c7i6/page/86/mode/2up?q=72)他们直接称 1/72 英寸为"点"。后续版本(https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf#page=197)澄清说这实际上并不是点,并且点本身就很愚蠢: > 注意:默认单位尺寸(1/72 英寸)大致等于印刷业广泛使用的"点"。然而,它并不完全等同于一个点;而且点本身也没有通用定义。 苹果在其 LaserWriter(https://en.wikipedia.org/wiki/LaserWriter)激光打印机中搭载了 PostScript,其他公司纷纷效仿,使得 PostScript 成为事实上的打印语言,72 点/英寸也成为数字领域的标准度量。W3 联盟在 CSS(https://www.w3.org/TR/css3-values/#absolute-lengths)和 SVG(https://developer.mozilla.org/en-US/docs/Web/SVG/Guides/Content_type#length)[2] 中使用了相同的度量标准,Inkscape 是一个 SVG 编辑器,事情就这样定了。 ### 尾声:Frink 每当需要处理度量单位时,我都会使用 Frink(https://frinklang.org/)。Frink 是一种图灵完备的语言,对度量单位的支持*非常好*: ``` oldinch := surveyfoot / 12 // 1959 年之前的英寸 35 cm / (996 pts) -> oldinch / pts 0.013834839357429718876 ``` 作者还对度量单位的历史做了极其详尽的研究。以下是 Frink 数据文件(https://frinklang.org/frinkdata/units.txt)中关于点的说明: ``` point := 0.013837ee0 inch // 精确值,NIST Handbook 44, Appendix 3 printerspoint := point texscaledpoint := 1/65536 point // TeX 排版系统使用 texsp := texscaledpoint // 此单位进行所有计算。 computerpoint := 1/72 inch // 美国点被计算机界 computerpica := 12 computerpoint // 四舍五入为恰好 1/72 英寸 postscriptpoint := computerpoint // 在某个时间点。 ``` 好吧,现在我们知道那个"某个时间点"是什么了! 现在我们也知道 `texscaledpoint` 的定义(*天哪*)是错误的。 ``` realtexpoint := 1/72.27 inch realtexsp := 1/65536 realtexpoint (realtexsp - texsp) 5.36285100578e-17 m (长度) (realtexsp - texsp) / realtexsp 1.0000000000005691827e-8 ``` Frink 的定义偏差了大约 50 阿托米,相当于一个质子宽度的约 3%。

相似文章

几个有趣的现代像素字体

Hacker News Top

本文介绍了几种现代像素字体,包括 Analog Mono、Coral Pixels、Two Slice 和 Geist Pixel,讨论了它们的设计特色以及对 1990 年代亚像素渲染技术的怀旧情怀。

人类打字习惯与Token计数

Hacker News Top

一篇博客文章探讨人类的打字习惯(如拼写错误、速记表达、填充词和空格)如何影响OpenAI和Claude分词器的Token计数,并指出常见的拼写错误可能会增加Token使用量和成本,而不会改变实际语义。

逆境中的优秀字体

Hacker News Top

一篇探讨意外字体现象与工艺的文章,包括显示屏上的卷帘快门效应以及对字体局限性的创造性应用。

微软是1.84 Peters,谷歌是0.66。Peter单位是什么?

Hacker News Top

一个基于Next.js的工具,通过将GitHub组织的年初至今(YTD)活动与独立开发者@steipete进行比较,对它们进行排名,使用“Peters”作为有趣的基准测试单位。包括公开排行榜和对私有组织的支持。

重现 IBM Selectric Composer 字体(2023) --- 在寻找比普通打字机字体更精致的字体时,我发现自己深入研究了 IBM Selectric Composer 的历史——这是一台 20 世纪 60 年代末至 70 年代的排版机器,凭借其精良的字体和比例间距功能,曾广泛用于专业出版领域。 ## 背景 IBM Selectric Composer 是 IBM Selectric 打字机系列的一个特殊变体,专为专业排版而设计。它使用可互换的"字球"(typeball,也称为"golf ball"),能够产生比普通打字机更接近专业印刷品质的输出效果。这台机器支持多种字体和字号,并具备比例间距功能,使其输出的文档看起来更接近专业排版。 ## 字体特点 Selectric Composer 的字体具有以下几个显著特点: - **比例间距**:不同字符占用不同宽度,而非等宽 - **多种字号**:支持从 7 到 12 点不等的字号 - **多种字体风格**:包括衬线体、无衬线体等多种风格 - **专业品质**:输出质量介于普通打字机和专业照相排版之间 ## 数字化复原工作 复原这些字体的过程涉及以下几个步骤: 1. **收集样本**:从历史文档、用户手册和档案资料中收集原始字体样本 2. **扫描与清理**:对样本进行高分辨率扫描,并清理图像中的噪点和瑕疵 3. **矢量化**:将光栅图像转换为矢量轮廓 4. **调整与优化**:对字符进行细致的调整,确保一致性和可用性 5. **添加元数据**:为字体文件添加适当的元数据和字距调整信息 ## 技术挑战 复原过程中遇到了几个主要的技术挑战: - 原始样本质量参差不齐,许多文档经过多次复印,质量有所降低 - 比例间距信息需要从原始文档中重新推算 - 某些字符(尤其是标点符号和特殊字符)的样本极为稀少 - 需要在忠实还原原始设计与提高现代可用性之间取得平衡 ## 成果 经过数月的工作,成功复原了多款 Selectric Composer 字体的数字版本,这些字体现已可供免费下载使用。这些字体为设计师和排版爱好者提供了一种独特的历史风格选择,同时也为保存这段印刷史上的重要遗产做出了贡献。 ## 结语 这个项目不仅是一次技术练习,更是对印刷历史的一次致敬。IBM Selectric Composer 在专业出版领域扮演了重要角色,帮助无数人制作出超越普通打字机水平的专业文档。通过将这些字体数字化,我们得以将这段历史延续下去,让现代设计师也能感受到那个时代独特的排版美学。

Hacker News Top

设计师 Jens Kutilek 记录了复刻 IBM Selectric Composer 字体背后的数学与历史研究,深入探讨了这款标志性 1960 年代打字机所采用的单位间距系统及其工程设计约束。该项目涉及对 IBM 9 单位字形宽度系统的逆向工程——这一系统被 Selectric Composer 的可更换"高尔夫球"字球所采用。