Emacs 胸罩尺码计算器

Lobsters Hottest 工具

摘要

一篇博客文章,描述了一个自定义的 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)是一致的。

相似文章

Emacs 就是我的浏览器

Lobsters Hottest

Joshua Blais 分享自己如何用 Emacs 内置的 EWW 替代主流浏览器,完成 85–90% 的日常上网需求,称此举干扰更少、信噪比更高。

推荐一下……理解 Emacs 的模式

Lobsters Hottest

文章解释了 Emacs 的架构模式,重点介绍了通用缓冲区数据模型和增量补全读取(ICR),并将其比作玫瑰的根与花瓣。文章强调了 Emacs 如何统一界面并通过 Elisp 实现可扩展性。

Emacs 与 Bzr 的坎坷往事

Lobsters Hottest

文章回顾了 2008 年 GNU Emacs 开发者决定采用 Bazaar 而非 Git 作为版本控制系统的决策过程,重点强调了性能方面的顾虑,以及 Richard Stallman 坚持使用 GNU 软件包的立场,尽管技术基准测试显示 Git 更具优势。

在 Linux 和 Unix 系统上编译 Emacs 以提升性能的技术指南

Lobsters Hottest

本技术指南提供了在各类 Linux 发行版上从源码编译 Emacs 的详细步骤,旨在通过 CPU 特定指令集和 Wayland 等现代显示协议来优化性能。文中还涵盖了依赖项配置以及微调原生 Lisp 编译器以提升执行速度的相关内容。