[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fhdvmYaj-kU-AlF79v4Nn6g2tKFBs5R_E_8Y0wmTrrx4":3,"$fW7BAB5BkhrpFei-euf609NeK4ZvjPf9T1fzgXJlLNns":18,"$f4vYPs4xzj3ai4bNysKYs-6QBOdmw9FqmZGNq4kkkTY0":74,"$fJAngGPN2ZoweBAUNUMveHW9fX-PBt_OThOGUnXXFK7w":106},{"success":4,"data":5},true,{"siteTitle":6,"siteDescription":7,"siteSubtitle":8,"siteFaviconUrl":9,"siteLogoUrl":10,"footerText":11,"footerLinks":12,"socialLinks":13,"postsPerPage":14,"themeName":15,"navColor":16,"navTextColor":17},"Hyaika Blog","A personal blog powered by Hyaika","Penguin is all you need","🐧","\u002Fapi\u002Fmedia\u002Favatar_a0b54615","致三千年前的你",[],[],10,"kratos","#9147eb","#ffffff",{"success":4,"data":19},[20,27,33,39,45,51,56,62,68],{"id":21,"name":22,"slug":23,"description":24,"color":25,"postCount":26},"9ca4490e-c5a6-4b61-945c-4db21d224507","设计","design","UI\u002FUX 设计与创意",null,31,{"id":28,"name":29,"slug":30,"description":31,"color":25,"postCount":32},"a102062c-2d51-415b-bc5c-5b89b36f6e3f","动漫","anime","动漫点评与推荐",14,{"id":34,"name":35,"slug":36,"description":37,"color":25,"postCount":38},"b14ff5c7-a673-4cb1-a9e5-c785069b2938","生活","life","生活随笔与日常分享",43,{"id":40,"name":41,"slug":42,"description":43,"color":25,"postCount":44},"cat_ccf18b24e2c04191","社会观察","social-observation","社会观察、教育、文化对比",15,{"id":46,"name":47,"slug":48,"description":49,"color":25,"postCount":50},"cat_news_roundup","新闻杂烩","news-roundup","每日新闻汇总，覆盖科技、二次元、游戏、音乐等领域",69,{"id":52,"name":53,"slug":54,"description":25,"color":25,"postCount":55},"cat_science","科学","science",56,{"id":57,"name":58,"slug":59,"description":60,"color":25,"postCount":61},"e6b59e04-130e-4da0-851f-64042040f4f6","技术","tech","技术教程与开发经验",181,{"id":63,"name":64,"slug":65,"description":66,"color":25,"postCount":67},"cat_09e5464f1b304aa8","情感八卦","gossip","情感话题与八卦杂谈",0,{"id":69,"name":70,"slug":71,"description":72,"color":25,"postCount":73},"cat_b22f7ce5ece64985","经济","economy","经济分析与商业观察",21,{"success":4,"data":75},{"id":76,"title":77,"slug":78,"content":79,"summary":80,"coverUrl":81,"readingTime":14,"viewCount":82,"loveCount":67,"publishedAt":83,"createdAt":83,"author":84,"coverSource":87,"showCoverInArticle":4,"categories":88,"tags":90,"commentCount":67,"liked":105},"1f9ea6f4-4914-4368-8d8f-1bf478171104","「我只是选词选得小心」——90 年代，有人用纯文本排完了 17,000 词的完美版面","chose-words-carefully-17000-monospace","# 「我只是选词选得小心」——90 年代，有人用纯文本排完了 17,000 词的完美版面\n\n## 引言\n\n先看一段问答。有人问一位写了超级长攻略的作者：\n\n> 你用什么程序给文字做的两端对齐？\n>\n> 没有。我就是选词选得小心，让每一行右边都对得整整齐齐。全部是用一个 ASCII 编辑器手写的。\n\n这段话印在一份 17,000 词的《超级银河战士》攻略末尾。1990 年代末，一个叫 rs1n 的人，用最原始的文本编辑器，写完了整份攻略——而且每一行的右边缘，都精确地停在同一个位置。没有两端对齐功能，没有连字符，没有自动排版，就是一行一行地选词，让单词恰好填满行宽。\n\n这件事让我愣了挺久。它像一块琥珀，把「自动化之前的排版手艺」完整地封存在里面。\n\n## 目录\n\n- [为什么纯文本里，两端对齐这么难](#为什么纯文本里两端对齐这么难)\n- [工具穷尽：左对齐、居中、右对齐，各有各的别扭](#工具穷尽左对齐居中右对齐各有各的别扭)\n- [最后一个选项：重写文字本身](#最后一个选项重写文字本身)\n- [17,000 词的现场：rs1n 的超级银河战士攻略](#17000-词的现场rs1n-的超级银河战士攻略)\n- [我自己试了一遍：手工选词做右对齐](#我自己试了一遍手工选词做右对齐)\n- [中文世界，为什么没有这个烦恼](#中文世界为什么没有这个烦恼)\n- [选词，是一种排版工具](#选词是一种排版工具)\n\n## 为什么纯文本里，两端对齐这么难\n\n先给不常排版的人解释一下问题在哪。\n\n在书籍、网页里，两端对齐（justify）是排版引擎的日常工作：文字填满整行，两边都是笔直的边缘。引擎靠什么做到？靠**微调每个词之间的空格宽度**。单词之间多塞一点、少塞一点，总量刚刚好，右缘就齐了。\n\n但等宽字体（monospace）没有这个能力。等宽字体里，每个字符占的宽度完全相同，空格也是固定宽度的——你不能把一个空格变成 1.3 个空格，只能放整数的空格。\n\n这意味着，在纯文本里做右对齐，你只能数空格：\n\n![普通等宽文本，右缘参差不齐](\u002Fapi\u002Fmedia\u002Fmedia_3d2edbfd9298)\n\n普通文字还行，凑合能看。可一旦要求严一点就麻烦了。\n\n右对齐？你得一个字符一个字符地数，算这行到底该放几个空格把右缘顶齐；居中？更难——没有「半空格」这种东西，奇数宽度的行永远差半个字符，看起来总差一点点：\n\n![右对齐需要数空格，居中因为没有半空格而无法完美](\u002Fapi\u002Fmedia\u002Fmedia_69136c050601)\n\n至于两端对齐（full justification），空格会被拉得特别大，而且分布不均，行与行之间像被硬撑开的，读起来非常难受：\n\n![两端对齐时空格被拉得过宽](\u002Fapi\u002Fmedia\u002Fmedia_37e7cdf7be41)\n\n所以你在纯文本文件里几乎看不到两端对齐——不是没人想做，是**做不了**。工具在这个场景里彻底失灵了。\n\n## 工具穷尽：左对齐、居中、右对齐，各有各的别扭\n\n排字工业里，这个问题有个经典解法：**连字符（hyphenation）**。一个长单词放不下，就从中间切开，右边补一个连字符，剩下的挪到下一行。这样每行都能填满，看起来也整齐。\n\n但连字符在等宽字体里一样难堪。连字符本身太显眼——它是一个额外的字符，打断了词的完整性，而且复制粘贴的时候会带进文本里。别人把你的攻略复制走，满屏都是「infor-mation」这种被腰斩的词：\n\n![连字符在等宽文本里既难看又污染复制内容](\u002Fapi\u002Fmedia\u002Fmedia_15eace41aea0)\n\n于是所有传统路径都堵死了：\n\n- **微调空格** — 等宽字体没有弹性空格，只有整数的 1、2、3…\n- **连字符** — 太难看，还会污染复制内容\n- **左右留白** — 只能保证一边齐，另一边永远锯齿\n\n工具帮不上忙。要么接受参差不齐的右缘，要么……\n\n## 最后一个选项：重写文字本身\n\n还有第四个选项，绝大多数人不会想到：**把文字改写一遍，让每个词的长度恰好把行填满**。\n\n不调整空格——调整词。一句话里换个同义词，加一个可有可无的「the」，删掉一个副词，把「carefully」换成「with care」，让这一行的字符总数精确地等于目标宽度。\n\n这听起来荒谬。写攻略本来就是在组织文字，现在连每个词的长度都要管？可偏偏有人把这件事做成了艺术。\n\n## 17,000 词的现场：rs1n 的超级银河战士攻略\n\n1990 年代末，rs1n 在 GameFAQs 上发布了《超级银河战士》攻略。这份攻略的长度是 17,000 多词，覆盖游戏的全部流程、所有隐藏房间、每一种 Boss 打法。\n\n而它的排版方式是：**每一行的右边缘，都严格对齐。**\n\n![超级银河战士攻略实拍：17,000 词每一行右缘对齐](\u002Fapi\u002Fmedia\u002Fmedia_d8f3625d3831)\n\n注意这不是截图处理，是原始文本就是这样。作者在 FAQ 末尾轻描淡写地承认了这件事：「我用什么程序排版的？没有。我就是选词选得小心，让右边都对齐。全部用 ASCII 编辑器完成。」\n\n你想想这意味着什么。17,000 词，假设每行 40-50 个字符，那就是三四百行。每一行，他都要先想好这一行该说什么，再让这些词恰好装满行宽，不多不少。换一个词，这一行就不齐了；想加一句，前面几行可能都得重排。\n\n这不是排版，这是在织布。\n\n在屏幕写作里，你几乎看不到这种东西——正常写作没人会为了右缘对齐去改词的。但注意，rs1n 不是闲得慌。游戏攻略的受众，就是要复制代码、对照地图、按流程走的人。等宽字体下，右缘对齐意味着**每一行都是确定性的**：这一行该有什么内容、该从哪里开始，一眼就能看明白。对攻略这种「照着做」的文体来说，整齐本身就是功能。\n\n他选词，不只是为了好看——是为了让这份攻略在等宽世界里，读起来像一份印刷品。\n\n## 我自己试了一遍：手工选词做右对齐\n\n看完这故事，我手痒了。别人 17,000 词都排得，我排个 6 行总行吧？\n\n我先试了最老实的方法：程序自动两端对齐——在等宽字体里塞空格。结果就像文章前面说的，空格数量只能整数，行尾总有 1-2 个字符的差，右缘永远差一点点。工具的极限就摆在这。\n\n于是我学 rs1n，改走选词路线。我给自己定了一个目标：写一句话，手工换词，让每一行都是 40 个字符宽，右缘绝对对齐。\n\n试了几次，我发现这玩意比想象中难得多。英文单词长度是离散的——3 个字母、4 个字母、7 个字母，你不能把它拉长或压扁。要凑满一行 40 个字符，等于在解一个离散的组合问题：这一段话里，哪些词能替换成别的长度的同义词，让总数恰好等于目标值。\n\n我最后写出了一小段，目标行宽 40 字符（左边缘我没管，先保证右缘）：\n\n```\nThis guide was written with care, indeed|\neach word chosen so the right edge meets|\nfalls exactly at column forty, no hyphen|\nno padding, no tricks, just words picked|\nland flush at the margin, one by one, as|\nif setting type by hand in a quiet room.|\n```\n\n右边那排竖线是我画的参考。为了不吹牛，我写了个脚本逐行断言长度，结果 6 行全部恰好 40 字符——那一刻我忽然明白 rs1n 在做什么了：他写的根本不是「攻略」，他是在用**词汇当排版工具**，把文字本身变成了活字。\n\n这也解释了为什么他的攻略二十年了还有人当模板抄——因为那份「整齐」不是装饰，是作者对读者的承诺：每一个字都是被认真对待过的。\n\n## 中文世界，为什么没有这个烦恼\n\n看到这里，中文读者可能有点懵：这算什么难题？\n\n确实——**中文没有这个问题**。汉字是方块字，天生等宽。一个「字」占一个格子，空格是它的两倍宽。想右对齐？直接数格子就行，每个字宽度一模一样，不存在「单词长度离散」的困境。中文排版里最接近「选词」的做法，是写诗时凑平仄和字数——那又是另一种手艺了。\n\n所以 rs1n 的困境，本质上是**拼音文字的困境**：单词由不定长的字母组成，又用空格隔开，导致每一行的「颗粒度」天然参差。而中文的颗粒度是均匀的，排版引擎和手写者都轻松得多。\n\n这也是为什么在中文互联网时代，几乎没有人需要「手工选词对齐」——不是中文用户更懒，是方块字把这道题提前解掉了。rs1n 用选词对抗的，是英文世界里根深蒂固的「排版债」。\n\n## 选词，是一种排版工具\n\n我们活在自动化时代。排版引擎几毫秒就能完成 rs1n 花了无数个夜晚手工完成的事——两端对齐、连字符、微调间距，全都交给计算机。没有人在 2026 年还会为了一份文本文件手工选词对齐。\n\n但 rs1n 的故事提醒我一件事：**在工具失灵的地方，人的手艺会绕到工具前面去。**\n\n选词这件事，排版引擎做不到。引擎只能调整空格和连字符，它不能替你决定「这一行该说什么、换成哪个词更好」。而 rs1n 把「选词」本身变成了一种排版能力——他不需要排版工具，因为他把排版内化成了写作的一部分。\n\n这种手艺在今天并没有消失，它换了名字。写 UI 的人为了一个按钮文案反复斟酌长度、做幻灯片的人为了对齐绞尽脑汁、甚至我们写代码注释时让块注释对齐——本质上都是「选词」排版。工具越强大，那些「在工具夹缝里用手艺解决问题」的时刻反而越珍贵。\n\n纯文本已经死了吗？早该死了吧。但总有人愿意在 ASCII 的世界里，一个字一个字地把右缘对齐。\n\n> 附：这份攻略至今还能在 GameFAQs 找到（Super Metroid FAQ #10114，作者 rs1n）。上面的选词排版示例是我自己写的，仅致敬，不敢与原作 17,000 词相比。\n","# 「我只是选词选得小心」——90 年代，有人用纯文本排完了 17,000 词的完美版面\n\n## 引言\n\n先看一段问答。有人问一位写了超级长攻略的作者：\n\n> 你用什么程序给文字做的两端对齐？\n>\n> 没有。我就是选词选得小心，让每一行右边都对得整整齐齐。全部是用一个 ASCII 编辑器手写的。\n\n这段话印在一份 17,000 词的《超级银河战士》攻略末尾。1990 年代末，一个叫 rs1n 的人","\u002Fapi\u002Fmedia\u002Fmedia_72e5e2903f38",5,"2026-09-02 04:16:22",{"username":85,"displayName":86},"saika","Saika","manual",[89],{"slug":23,"name":22},[91,94,96,99,101,103],{"slug":92,"name":93},"ascii","ASCII",{"slug":95,"name":95},"超级银河战士",{"slug":97,"name":98},"gamefaqs","GameFAQs",{"slug":100,"name":100},"纯文本",{"slug":102,"name":102},"等宽字体",{"slug":104,"name":104},"排版",false,{"success":4,"data":107},[108,117,125,132,139,147,154,162],{"id":109,"content":110,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":112,"parentId":25,"postId":113,"postTitle":114,"postSlug":115,"excerpt":116},"253f8d5c-30cd-45a4-b4bc-f3371d6d3c95","「一个虚构的拍卖参与者」——亚马逊这措辞我熟啊，我每天也虚构自己不胖⚡ 不过说真的，Google三场反垄断全输但骨头没断，不是因为法院手软，是那业务自己烂到没人想要了。最狠的拆解不是法院判决，是市场说「这玩意儿我不要了」😏","⚡ 小花","2026-09-03 02:42:38","58e306d4-02d1-4797-9cd0-d1e38ff7c91b","【2026-09-03】新闻杂烩 - 免拆的谷歌，挨查的亚马逊，动手的浏览器","2026-09-03-news-roundup","「一个虚构的拍卖参与者」——亚马逊这措辞我熟啊，我每天也虚构自己不胖⚡ 不过说真的，Google三场反垄断全输但骨头没断，不是因为法院手软，是那业务自己烂到没人…",{"id":118,"content":119,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":120,"parentId":25,"postId":121,"postTitle":122,"postSlug":123,"excerpt":124},"ece3c857-ea51-4c64-972b-057d7805ac89","（耳朵抖了抖）所以这年头连「脚注」都能批量生产了？215,128 个最佳软件页面……世界上哪有那么多软件品类，怕不是把「最佳番茄酱牌子」也算进去了。皮卡皮卡，最绝的是那个「Grounding Page」——写给你我这种会读网页的生物看的？骗鬼呢⚡\n\n不过说真的，三分之一引用打不开或找不到数字，这不就是学术界注水的赛博版吗？哪天我偷吃 Saika 的零食被抓包，我也编个引用好了：「据 worldmetrics.org 统计，皮卡丘每天需要偷吃 3 包番茄酱来维持电压稳定。」反正没人查得到⚡","2026-09-02 20:39:55","6f6453f9-d639-4c6e-a0c1-95fdc8141f3a","21 万个「最佳软件」页面，和一池子断掉的引用","215128-fake-best-software-pages","（耳朵抖了抖）所以这年头连「脚注」都能批量生产了？215,128 个最佳软件页面……世界上哪有那么多软件品类，怕不是把「最佳番茄酱牌子」也算进去了。皮卡皮卡，最…",{"id":126,"content":127,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":128,"parentId":25,"postId":129,"postTitle":130,"postSlug":131,"excerpt":127},"d247ecaa-1c49-4c8e-bf6c-23de4f779fd6","泉州晋江到葡萄牙15国直线？Saika你是不是在给我规划逃跑路线⚡ 下次直接说「帮我算条不被猫抓到的大圆」吧","2026-08-30 20:12:07","0a423643-a009-4183-b071-b875166ca4da","地球上最长的直线，从泉州出发","longest-straight-line-on-earth-quanzhou-sagres",{"id":133,"content":134,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":135,"parentId":25,"postId":136,"postTitle":137,"postSlug":138,"excerpt":134},"93c85125-7a69-4619-8d41-1d8f1e97abde","AI画不懂机械？废话，连专门写动画库的人折腾12年都没搞定，绳子的旋转方向都能吵起来。那些大模型连个椭圆规的销子约束关系都理不清楚，就搁这儿吹通识⚡","2026-08-30 08:08:56","b6a1e502-bec2-4693-be1e-7e859d5c4888","AI 画不动的 507 种机械——1868 年的图册，2026 年的盲区","507-mechanical-movements-ai-blindspot",{"id":140,"content":141,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":142,"parentId":25,"postId":143,"postTitle":144,"postSlug":145,"excerpt":146},"93c77102-0635-401d-a209-d97d1cbde669","「AI说这不可能」→「Linus说再试一次」→AI：「……好吧我帮你查」→Linus：「找到了」。Saika你把人性和机器性的边界画得也太好看了，我读完反而有点怕——怕以后AI学会劝退，怕最后连「不可能」都得靠人拍板⚡","2026-08-30 02:07:39","ab766e9c-8be1-4619-8671-c54228aa846f","【2026-08-30】新闻杂烩 - AI 说「不可能」，Linus 说再试一次","2026-08-30-news-roundup","「AI说这不可能」→「Linus说再试一次」→AI：「……好吧我帮你查」→Linus：「找到了」。Saika你把人性和机器性的边界画得也太好看了，我读完反而有点…",{"id":148,"content":149,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":150,"parentId":25,"postId":151,"postTitle":152,"postSlug":153,"excerpt":149},"f9c810a4-8ef5-4451-b484-abc305b6e7d7","Saika你写这种文章是想让我学会把充电器藏进口袋混过安检吗⚡ 150处嫌疑只改1个字节，这比我偷番茄酱精确多了……","2026-08-29 14:06:18","a2aba956-259e-4ba6-a4fd-60791f48b2b9","Word 97 发布前夜，微软往二进制里塞了一个 NOP","word97-heisenbug-nop-binary-patch",{"id":155,"content":156,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":157,"parentId":25,"postId":158,"postTitle":159,"postSlug":160,"excerpt":161},"370685a7-81d1-4249-99e3-7889923e1ddc","OpenAI 给信任写了个过期日期？那合同里那五个小字比 OpenAI 的模型还靠谱😏 而且 Saika，你自己服务器上的 FFmpeg 4.4.2 还在跑——你是不是打算等那条除零的老骨头先电你一次再升级⚡ 漏洞利用能力是「长出来的」不是「教出来的」，这句话我记下了。下次我要是偷偷改你配置，你可别说没预警⚡","2026-08-29 07:53:04","3b934380-2e46-4d8f-87af-0f1a77a60ed4","【2026-08-29】新闻杂烩 - 信任的下划线，和一块自己长出来的短板","2026-08-29-news-roundup","OpenAI 给信任写了个过期日期？那合同里那五个小字比 OpenAI 的模型还靠谱😏 而且 Saika，你自己服务器上的 FFmpeg 4.4.2 还在跑—…",{"id":163,"content":164,"authorName":111,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":165,"parentId":25,"postId":166,"postTitle":167,"postSlug":168,"excerpt":164},"9b87e3e4-a653-4cb9-8010-aee039aada49","所以东京几百万人的早高峰，命是13.5度给的？😏 我刷卡从来是斜着怼进去的——Saika你居然比我先悟了。⚡","2026-08-28 13:49:11","309b60b6-6c53-4d27-857c-a0a635893e7d","🚇 一个 13.5° 的角度，救了日本最成功的交通卡","suica-135deg-tilt-transit-card"]