Emacs 胸罩尺码计算器
摘要
一篇博客文章,描述了一个自定义的 Emacs Lisp 函数,该函数使用 Calc 单位转换和 Org 表格公式,根据底围和胸围测量值计算 EU、UK 和 US 标准的胸罩尺码。
<p><a href="https://lobste.rs/s/yszuka/emacs_bra_size_calculator">评论</a></p>
查看缓存全文
缓存时间: 2026/05/29 15:57
# Emacs 胸罩尺码计算器
来源:https://pulusound.fi/blog/emacs-bra-size-calculator/
发布于 2026\-05\-27,更新于 2026\-05\-28
最近我需要买一些新内衣。我的测量数据比上次有变化,所以为了让生活更轻松(大概吧),我决定写一个能在 Emacs 里用的胸罩尺码计算器。核心函数 `my-math-compute-bra-size` 如下:
```
;; 依赖项——这些随新版 Emacs 自带,但可能未加载
(require 'calc-units)
(require 'cl-lib)
(require 'seq)
(defun my-math-compute-bra-size (band-expr bust-expr &optional region)
(cl-flet ((to-unit (expr unit)
(string-to-number
(calc-eval (math-convert-units
(calc-eval expr 'raw)
(calc-eval unit 'raw)
t)))))
(let* ((region-info-alist
'((eu . ((unit . "cm")
(cups . ((12 . "AA") (14 . "A") (16 . "B") (18 . "C")
(20 . "D") (22 . "E") (24 . "F") (26 . "G")
(28 . "H") (30 . "I") (32 . "J") (34 . "K")))))
(uk . ((unit . "in")
(cups . ((1 . "AA") (2 . "A") (3 . "B") (4 . "C")
(5 . "D") (6 . "DD") (7 . "E") (8 . "F")
(9 . "FF") (10 . "G") (11 . "GG") (12 . "H")))))
(us . ((unit . "in")
(cups . ((1 . "AA") (2 . "A") (3 . "B") (4 . "C")
(5 . "D") (6 . "DD/E") (7 . "DDD/F") (8 . "DDDD/G")
(9 . "H") (10 . "I") (11 . "J") (12 . "K")))))))
(region (or region 'eu))
(region-info (alist-get region region-info-alist))
(unit (alist-get 'unit region-info))
(cups (alist-get 'cups region-info))
(band (to-unit band-expr unit))
(bust (to-unit bust-expr unit))
(diff (- bust band))
(cup (or (cdr (seq-find (lambda (x) (< diff (car x))) cups))
(format "%s+" (cdar (last cups))))))
(format "%s%s" (round band) cup diff))))
```
这个函数利用了 Emacs Calc 内置的单位转换功能,所以你需要传入带单位的字符串作为测量值。例如,假设一个虚构的底围(下胸围)是 90 厘米,胸围是 105 厘米,你可以这样计算 EU 尺码:
```
(my-math-compute-bra-size "90 cm" "105 cm" 'eu)
```
会得到 `"90B"`。你也可以使用其他长度单位,比如 `in`(英寸)、`ly`(光年)或 `Ang`(埃)。Calc 万岁!
我们可以进一步给它加上漂亮的用户界面。我最近很喜欢把 Org 表格当电子表格用(https://orgmode.org/worg/org-tutorials/org-spreadsheet-intro.html),想做一个表格,让我只管输入测量值,刷新一下就自动填好 EU/UK/US 的胸罩尺码。
用 Emacs Lisp 做公式(https://orgmode.org/worg/org-tutorials/org-spreadsheet-lisp-formulas.html)并不难实现。你可以复制粘贴下面的表格作为模板:
```
| date | band | bust | EU size | UK size | US size |
|------------+-------+--------+---------+---------+---------|
| 2026-05-27 | 90 cm | 105 cm | | | |
#+TBLFM: $4='(my-math-compute-bra-size $2 $3 'eu)::$5='(my-math-compute-bra-size $2 $3 'uk)::$6='(my-math-compute-bra-size $2 $3 'us)
```
修改底围和胸围数字(同样,用你喜欢的长度单位!),然后更新表格(https://orgmode.org/manual/Updating-the-table.html),比如用 `C-u C-c *`,所有的尺码字段就会重新计算 :) 你还可以添加更多行,如果你愿意,可以记录一段时间内的测量数据。
免责声明:
- 我只实现了 EU、UK 和 US 尺码,因为这些是我经常遇到的。其他标准可能需要额外的逻辑。
- 我录入的罩杯尺寸之外还有更大的号,但我找到的相关数据不太一致。抱歉!超出范围的尺码,函数会返回已知的最大号并加上一个 `+`。如果需要,应该很容易扩充数据。
- 我的数据/代码可能有错误。
- 我知道实际上不同品牌、不同款式尺码会不同,但写这篇文章时我尝试的在线计算器结果差异巨大,以至于我现在怀疑这些数字到底有没有意义。
- 不过我相当自信我的 EU 尺码计算与 EN 13402(https://en.wikipedia.org/wiki/Joint_European_standard_for_size_labelling_of_clothes#Bra_sizes)是一致的。
相似文章
@charles_irl: @modal LLMEng Almanac 的另一页:低精度浮点数(从 bf16 到 fp4)探索器 https://modal.com/ll…
来自 Modal 的 LLM Engineer's Almanac,提供了一个互动探索器,用于理解 bf16 和 fp4 等低精度浮点数格式。
Emacs 就是我的浏览器
Joshua Blais 分享自己如何用 Emacs 内置的 EWW 替代主流浏览器,完成 85–90% 的日常上网需求,称此举干扰更少、信噪比更高。
推荐一下……理解 Emacs 的模式
文章解释了 Emacs 的架构模式,重点介绍了通用缓冲区数据模型和增量补全读取(ICR),并将其比作玫瑰的根与花瓣。文章强调了 Emacs 如何统一界面并通过 Elisp 实现可扩展性。
Emacs 与 Bzr 的坎坷往事
文章回顾了 2008 年 GNU Emacs 开发者决定采用 Bazaar 而非 Git 作为版本控制系统的决策过程,重点强调了性能方面的顾虑,以及 Richard Stallman 坚持使用 GNU 软件包的立场,尽管技术基准测试显示 Git 更具优势。
在 Linux 和 Unix 系统上编译 Emacs 以提升性能的技术指南
本技术指南提供了在各类 Linux 发行版上从源码编译 Emacs 的详细步骤,旨在通过 CPU 特定指令集和 Wayland 等现代显示协议来优化性能。文中还涵盖了依赖项配置以及微调原生 Lisp 编译器以提升执行速度的相关内容。