<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>一盏时暗时亮的灯</title><description>在不确定里慢慢求证</description><link>https://dimpleblog.top</link><language>ja</language><item><title>开始</title><link>https://dimpleblog.top/ja/post/begin</link><guid isPermaLink="false">ja:begin</guid><description>不再等待’完美‘</description><pubDate>Tue, 10 Nov 2026 16:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;开始&lt;a href=&quot;#开始&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;很久以前，我在深夜刷到一个人的博客&lt;/p&gt;
&lt;p&gt;页面很素，白底黑字，侧边栏一列日期，往前翻能翻到七八年前。他写买的第一台相机，写搬家时弄丢的一箱书，写某年冬天骑车摔了一跤。没什么金句，也没配图。我却一页一页往下看，看到两点多。&lt;/p&gt;
&lt;p&gt;那天晚上我起了个念头：我也要弄一个。&lt;/p&gt;
&lt;p&gt;接下来几天，我搜”如何搭建个人博客”，把 Hexo、WordPress、域名、备案、图床这些词抄进备忘录。收藏夹里存了十几篇教程，有几篇的标题我现在还能想起来。然后…，收藏夹就再没打开过。&lt;/p&gt;
&lt;p&gt;我知道，那是懒&lt;/p&gt;
&lt;p&gt;后来每隔一两年，这个念头会回来一次。我重新搜一遍教程，发现工具全换了，又得从头学，于是又放下。这样反复了几回，我差不多认了：这事我大概做不成。&lt;/p&gt;
&lt;p&gt;大学期间很迷惘，每天总在刷手机，刷完什么都记不住。有一天我突然想，我这一天到底做了什么、想了什么，好像一点痕迹都没有。这个念头比”做博客”更具体，也更让我不舒服。&lt;/p&gt;
&lt;p&gt;于是又想起那个白底黑字的页面。&lt;/p&gt;
&lt;p&gt;很多事卡在“准备充足”这一关。
总想等万事俱备，等思路清晰，等没有疏漏，最后直接原地停下。&lt;/p&gt;
&lt;p&gt;所以有了你现在看到的这一页。样式还很简陋，栏目也是空的。
我不确定这里以后会写什么。大概会是些很具体的东西：一个表格公式怎么算日销，养的大肥鱼为什么快死了，键盘换轴之后手感的差别，这个月的账怎么又超了。也可能写些不成形的东西：某天下班路上想不通的一件事，或者一句让我记了很久的话。&lt;/p&gt;
&lt;p&gt;这一次我换了做法。不再先研究怎么搭，而是先把第一篇写出来，随便找个地方放着。用哪个框架、买不买域名、要不要备案，全都往后排。&lt;/p&gt;
&lt;p&gt;我不敢承诺多久更新一次。过去那些年我承诺过太多次，都落空了。这次只保证一件事：先把它开起来，然后写第二篇。&lt;/p&gt;
&lt;p&gt;这篇算不上什么作品，只是打破停滞的第一步。
往后会在这里记下零碎的思考、踩过的故障、算过的数据，那些没人在意的细碎小事。
想到什么就写什么&lt;/p&gt;
&lt;p&gt;昨晚看一部剧，我很喜欢&lt;/p&gt;
&lt;p&gt;《伪人降临，我是全场唯一预言家》&lt;/p&gt;
&lt;p&gt;看到凌晨三点&lt;/p&gt;
&lt;p&gt;然后早上睡过头了&lt;/p&gt;
&lt;p&gt;今天居然是双11吗&lt;/p&gt;</content:encoded><category>category:随笔</category></item><item><title>2022年的下雨天</title><link>https://dimpleblog.top/ja/post/my-life/2022</link><guid isPermaLink="false">ja:my-life/2022</guid><description>在落幕瞬间，在雾里刻下一段旧回忆</description><pubDate>Sun, 08 Nov 2026 16:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2022年6月，新一卷数学，考完的那个下午是阴天。&lt;/p&gt;
&lt;p&gt;云压得很低，光从云缝里漏下来是灰白色的，远处楼顶的轮廓看不清。我不讨厌晴天，只是对这种朦胧的阴天有种另类的偏爱——什么都模模糊糊，边界不清，人也就不用被太阳照得太清楚。&lt;/p&gt;
&lt;p&gt;铃响，卷子从桌角被抽走。走出考场的时候走廊上全是人，都在说话，声音嗡嗡地压在头顶，我一句也没听进去。&lt;/p&gt;
&lt;p&gt;那张卷子对我来说，挺难的，真的很难。我的考场有一位女生在抽泣，还有一个男生在捶胸。外面蒙蒙细雨，我们就这样坐上校车返校准备下一场，&lt;/p&gt;
&lt;p&gt;打饭的时候遇到一位朋友，她笑，我也跟着笑，她懂，我也懂；相顾无言。&lt;/p&gt;
&lt;p&gt;那是一种难以言喻的悲伤。更多的，是对自己实力不足感到的悲哀。前者是会过去的，后者不会。&lt;/p&gt;
&lt;p&gt;第三天上午，最后一科，地理。
我对地理一直不擅长。进场之前我在走廊上翻了两页笔记，翻完自己也知道没什么用。干脆不看了，我向来都这样，这是坏事吗？我现在也不懂。&lt;/p&gt;
&lt;p&gt;卷子发下来，我很早就做完了，我并不擅长地理
还剩十五分钟的时候&lt;/p&gt;
&lt;p&gt;我把笔放下，抬头望向窗外&lt;/p&gt;
&lt;p&gt;窗外是普师的广场，一棵树的影子斜斜地铺在地上。上午的天光是那种不刺眼的亮，走廊里偶尔有监考老师的脚步声过去，鞋底在瓷砖上拖得很短。别的考场还在答题，翻卷子的声音隔着墙都听不见，安静得很不真实。&lt;/p&gt;
&lt;p&gt;就是在那十五分钟里，脑子里浮出来一句话：&lt;/p&gt;
&lt;p&gt;人总是为了扮演各种各样的社会角色而生存。&lt;/p&gt;
&lt;p&gt;学生、孩子、同学、某个人的朋友、某个班级里排在某一名的那个名字。一路走过来，好像每一步都有人替你安排好了这个角色该做什么。而现在这个角色马上就要演完了，下一场戏已经在后台等着。
我又想，高考之后再无真正的宁静。&lt;/p&gt;
&lt;p&gt;这句话当时想得很重。十八岁的人说这种话，其实说得太早了，现在看甚至有点自怜。但那十五分钟的安静是真的——不是因为题目写完了，是因为在那十五分钟里，没有任何人要求我做任何事。不能提前交卷，不能走，不能想下一场考试，只能坐着，看着窗外那棵树。
那是我少有的、出乎意料的、真正属于我自己的时间。&lt;/p&gt;
&lt;p&gt;铃响，起立，收卷。地理结束，高中结束。&lt;/p&gt;
&lt;p&gt;十二点多，我们从考场出来。因为选的是物化地，这一科考完，所有考场就都结束了，我是最早离校的一批。&lt;/p&gt;
&lt;p&gt;宿舍楼下的行李早就收好了，两个包，三年的东西就这么点。教室里还剩几个同批的人，桌子已经被清空，椅子腿在水泥地上刮出声音。
我在靠窗的位置坐下来，从书包里摸出手机。屏幕亮起来，桌面还是考前换的那张图。指尖悬在上面，翻了两下相册，又退出来，锁屏，再亮起来。一时间居然不知道该干什么。&lt;/p&gt;
&lt;p&gt;没有想象里的解脱，脑子里只有一句话，来来回回地响：高中结束了，真的结束了。&lt;/p&gt;
&lt;p&gt;我说不出来那是什么感觉。身体里像有一块地方被轻轻挖走了，不疼，但是空。那一刻我隐约预感到，以后的某个瞬间我会想起这段时光——当时那只是一个预感，没想到它准得有点过分。&lt;/p&gt;
&lt;p&gt;离校了。带着不多的行李走在街上。&lt;/p&gt;
&lt;p&gt;学校附近这一带有点偏僻，路上没什么车。我站在树荫边上等，看屏幕上那个小车图标在远处兜圈子，兜了很久才朝这边挪。&lt;/p&gt;
&lt;p&gt;天阴着，不晒，风里有点潮。我不着急，那时候觉得时间还很多，多到可以随便浪费。&lt;/p&gt;
&lt;p&gt;车来了，司机问去哪，我说万泰汇。他哦了一声，没再说别的。
五
去万泰汇吃了自助餐。&lt;/p&gt;
&lt;p&gt;不好吃。烤肉盘上的油一直在响，我拿了一堆，最后剩了半盘。饮料太甜，冰块化得很快，杯壁上全挂着水珠。店里有冷气，人很少，桌子和桌子挨得很近，隔壁那桌在聊假期要去哪。&lt;/p&gt;
&lt;p&gt;吃的时候我想起2021年同段时间，我也在这里。&lt;/p&gt;
&lt;p&gt;那天浑身湿透了。我记得衣服贴在背上的重量，记得坐下来的时候水顺着裤脚滴到地上。但我并不气馁——那时候我以为只要肯用力，什么都能追上。&lt;/p&gt;
&lt;p&gt;这一次衣服是干的，人也坐得很稳。可心里有一团雾雾的东西，说不清，比一年前那场雨更让我难受。&lt;/p&gt;
&lt;p&gt;吃烤肉的时候，我发了一条朋友圈：我一个旧时代的人，新时代没有能承载我的船了。&lt;/p&gt;
&lt;p&gt;发出去了，我随便发的。好吧其实不随便&lt;/p&gt;
&lt;p&gt;我站在原地看着一堆没被定义的东西，不知道该怎么量自己。&lt;/p&gt;
&lt;p&gt;吃完继续在街上闲逛。
那时候的精力真好，走了很久也不觉得累。商场、街口、便利店、亮着灯的药房，我一间间走过去，什么也没买。现在出门能不带包就不带，走两公里就想找个地方坐下。&lt;/p&gt;
&lt;p&gt;天慢慢暗下来，路灯是一盏一盏亮的，不是同时亮。&lt;/p&gt;
&lt;p&gt;我在一家便利店门口站了一会儿。玻璃上贴着夏季促销的海报，边角已经卷起来。店员在柜台后面刷手机，抬头看了我一眼，又低下去。我拿了瓶水，走出来才想起来自己其实不渴。&lt;/p&gt;
&lt;p&gt;那时候我还没有”要回家”这个概念。学校不用去了，家在那里，但今天回不回，好像也没有人真的在意。&lt;/p&gt;
&lt;p&gt;我站在路口，看着马路上来来往往的车辆。&lt;/p&gt;
&lt;p&gt;有那么一瞬间，我处于第三视角。好像从身体里退出半步，站在旁边看着那个站在路口的人：穿着短袖，背一个包，手里捏着手机，不知道要去哪里。&lt;/p&gt;
&lt;p&gt;我很想用文字把那个瞬间表达出来。可我讲不出，说不清。&lt;/p&gt;
&lt;p&gt;我只知道那是一种悬浮感，一种和自己错开的感觉。像隔着一层毛玻璃看自己，看得见轮廓，摸不到温度。&lt;/p&gt;
&lt;p&gt;这件事在之后几年反复回来找我：有些感受我能清清楚楚地感觉到，却没法转述给别人，甚至没法转述给自己。文字在那里是失效的。
大概也是从那时候起，我开始想写点东西。不是为了写给谁看，是想给自己找一条把雾说清楚的通道。&lt;/p&gt;
&lt;p&gt;回到家已经十点。还是第一次那么晚到家。&lt;/p&gt;
&lt;p&gt;楼道里灯是声控的，我走上去，它亮一下，又灭。&lt;/p&gt;
&lt;p&gt;我放下包，坐在那不想动。心里还是想出去，但我不知道去哪。这个念头很奇怪：人已经到家了，身体却还想往外走。&lt;/p&gt;
&lt;p&gt;后来我站到窗边看楼下。路上的车少了，路灯亮着，树影铺在地上。
或许没有目的地，才是最好的。那天我确实是这么想的，而且这句话在之后的很多年里一直没有失效。&lt;/p&gt;
&lt;p&gt;夜里躺在床上，外边空调外机的声音一阵一阵。手机翻到很晚，也没翻出什么。以前这个点我应该在做卷子，或者在看第二天的安排。现在我没有任何要准备的东西。这种没有准备的状态，比准备本身更让人睡不着。&lt;/p&gt;
&lt;p&gt;几年过去了。我确实在某个瞬间想起了那一天，不止一次。
那天没有给我的生活一个答案。它只是停在那里，像那个阴天，边界不清。&lt;/p&gt;
&lt;p&gt;我现在能把它写下来了。虽然文采还是有限，雾也还是没有完全散。
至于船的事，后来我想明白一点：那艘船可能本来就不存在，也没有谁答应过要给我。没有船也可以走，只是慢一点，湿一点。&lt;/p&gt;
&lt;p&gt;那句”高考之后再无真正的宁静”，我现在也不完全认了。后来确实有过很吵的日子，也确实有过很静的时刻。宁静不是一考完就被收走的，它只是换了地方，换了一种更难找到的形式。&lt;/p&gt;
&lt;p&gt;我还是喜欢那个下午的阴天。天色一暗，世界就模糊一点，人也就没那么容易被看清。&lt;/p&gt;</content:encoded><category>category:难以面对的过去</category><category>tag:高考</category></item><item><title>GameApp-Ahk</title><link>https://dimpleblog.top/ja/post/tools/gameapp-ahk</link><guid isPermaLink="false">ja:tools/gameapp-ahk</guid><description>自己随意创造的小玩具</description><pubDate>Fri, 06 Nov 2026 16:00:00 GMT</pubDate><content:encoded>
&lt;h1&gt;酒窝宏管理工具 · 源码解析文档&lt;a href=&quot;#酒窝宏管理工具--源码解析文档&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;默认键位一览&lt;a href=&quot;#默认键位一览&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;


























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;变量&lt;/th&gt;&lt;th&gt;功能&lt;/th&gt;&lt;th&gt;默认值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;DriftKey&lt;/code&gt;&lt;/td&gt;&lt;td&gt;漂移键&lt;/td&gt;&lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;NitroKey&lt;/code&gt;&lt;/td&gt;&lt;td&gt;氮气键&lt;/td&gt;&lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BoostKey&lt;/code&gt;&lt;/td&gt;&lt;td&gt;小喷键&lt;/td&gt;&lt;td&gt;&lt;code&gt;Up&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ForwardKey&lt;/code&gt;&lt;/td&gt;&lt;td&gt;前进键&lt;/td&gt;&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_BaoLi&lt;/code&gt;&lt;/td&gt;&lt;td&gt;暴力出弯&lt;/td&gt;&lt;td&gt;&lt;code&gt;PgDn&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_WuHen&lt;/code&gt;&lt;/td&gt;&lt;td&gt;无痕三喷&lt;/td&gt;&lt;td&gt;&lt;code&gt;Ctrl&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_Cut&lt;/code&gt;&lt;/td&gt;&lt;td&gt;快速切断&lt;/td&gt;&lt;td&gt;&lt;code&gt;Enter&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_KaQi1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;一段连卡&lt;/td&gt;&lt;td&gt;&lt;code&gt;Left&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_KaQi2&lt;/code&gt;&lt;/td&gt;&lt;td&gt;二段连卡&lt;/td&gt;&lt;td&gt;&lt;code&gt;Down&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_LianKa&lt;/code&gt;&lt;/td&gt;&lt;td&gt;三四五连卡&lt;/td&gt;&lt;td&gt;&lt;code&gt;Right&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;总开关&lt;/td&gt;&lt;td&gt;&lt;code&gt;F1&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F2&lt;/code&gt;&lt;/td&gt;&lt;td&gt;隐藏窗口&lt;/td&gt;&lt;td&gt;&lt;code&gt;F2&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F3&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重置&lt;/td&gt;&lt;td&gt;&lt;code&gt;F3&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F10&lt;/code&gt;&lt;/td&gt;&lt;td&gt;快速切断（单键启停）&lt;/td&gt;&lt;td&gt;&lt;code&gt;F10&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F11&lt;/code&gt;&lt;/td&gt;&lt;td&gt;三四五连卡（单键启停）&lt;/td&gt;&lt;td&gt;&lt;code&gt;F11&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Hotkey_F12&lt;/code&gt;&lt;/td&gt;&lt;td&gt;暴力出弯（单键启停）&lt;/td&gt;&lt;td&gt;&lt;code&gt;F12&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;默认延迟参数（ms）&lt;a href=&quot;#默认延迟参数ms&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;默认值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;CutHoldTime&lt;/code&gt;&lt;/td&gt;&lt;td&gt;快速切断 · 按住&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;CutInterval&lt;/code&gt;&lt;/td&gt;&lt;td&gt;快速切断 · 间隔&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;KaQi1HoldTime&lt;/code&gt;&lt;/td&gt;&lt;td&gt;一段连卡 · 按住&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;KaQi1MinTotal&lt;/code&gt;&lt;/td&gt;&lt;td&gt;一段连卡 · 保底总时长&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;KaQi2FirstHold&lt;/code&gt;&lt;/td&gt;&lt;td&gt;二段连卡 · 一段按住&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;KaQi2WaitTime&lt;/code&gt;&lt;/td&gt;&lt;td&gt;二段连卡 · 两段之间等待&lt;/td&gt;&lt;td&gt;618&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;KaQi2SecondHold&lt;/code&gt;&lt;/td&gt;&lt;td&gt;二段连卡 · 二段按住&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LianKaFirstHold&lt;/code&gt;&lt;/td&gt;&lt;td&gt;三四五连卡 · 首按&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LianKaWaitTime&lt;/code&gt;&lt;/td&gt;&lt;td&gt;三四五连卡 · 间隔&lt;/td&gt;&lt;td&gt;618&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LianKaSecondHold&lt;/code&gt;&lt;/td&gt;&lt;td&gt;三四五连卡 · 连按&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LianKaCount&lt;/code&gt;&lt;/td&gt;&lt;td&gt;连卡数量（3/4/5）&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LianKaMode&lt;/code&gt;&lt;/td&gt;&lt;td&gt;连卡模式（1=A 先漂移 / 2=B 首段带小喷）&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BaoLiVersion&lt;/code&gt;&lt;/td&gt;&lt;td&gt;暴力版本（珊瑚 / 酒窝）&lt;/td&gt;&lt;td&gt;珊瑚&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BaoLiHoldTime&lt;/code&gt;&lt;/td&gt;&lt;td&gt;酒窝暴力 · 按住时长（50–500）&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;一、头部指令与权限检查&lt;a href=&quot;#一头部指令与权限检查&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;脚本编译版本声明、全局选项、发送模式、延迟设置，以及管理员权限校验与高精度计时器频率获取。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;; &amp;lt;COMPILER: v1.1.37.02&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#NoEnv&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#SingleInstance, Force&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#Persistent&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#InstallKeybdHook&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#InstallMouseHook&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#KeyHistory, 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#MaxHotkeysPerInterval, 1000000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SendMode, Input&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ListLines, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetBatchLines, -1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetKeyDelay, -1, -1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetMouseDelay, -1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetControlDelay, -1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetWinDelay, -1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if not A_IsAdmin {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 16, 权限错误, 请右键以管理员身份运行本脚本！`n否则无法正常使用功能。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ExitApp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Global Frequency := 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!DllCall(&quot;QueryPerformanceFrequency&quot;, &quot;Int64*&quot;, Frequency)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48, Error, Failed to get high precision timer frequency!&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ExitApp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二、默认键位与运行状态变量&lt;a href=&quot;#二默认键位与运行状态变量&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;四大驾驶键位、六大功能热键、各功能启停状态、各段延迟参数、连卡数量/模式与暴力版本等默认值。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;DriftKey := &quot;q&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;NitroKey := &quot;e&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BoostKey := &quot;Up&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ForwardKey := &quot;w&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_BaoLi := &quot;PgDn&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_WuHen := &quot;Ctrl&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_Cut := &quot;Enter&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_KaQi1 := &quot;Left&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_KaQi2 := &quot;Down&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_LianKa := &quot;Right&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F1 := &quot;F1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F2 := &quot;F2&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F3 := &quot;F3&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F10 := &quot;F10&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F11 := &quot;F11&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_F12 := &quot;F12&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;baoLiOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;wuHenOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;spaceCut := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;kaQi1On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;kaQi2On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;lianKaOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Global BaoLiRunning := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Global LianKaRunning := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CutHoldTime := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CutInterval := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi1HoldTime := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi1MinTotal := 25&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2FirstHold := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2WaitTime := 618&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2SecondHold := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaFirstHold := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaWaitTime := 618&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaSecondHold := 22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaCount := 4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaMode := 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BaoLiVersion := &quot;珊瑚&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BaoLiHoldTime := 300&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;guiShow := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DelayWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OverviewWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FKeyWindowOpen := false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;三、配置文件路径&lt;a href=&quot;#三配置文件路径&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;INI 配置文件存放于脚本同目录。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ConfigFile := A_ScriptDir . &quot;\酒窝配置.ini&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;四、按键合法性校验 IsKeyValid()&lt;a href=&quot;#四按键合法性校验-iskeyvalid&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;判断输入的按键名称是否为 AHK 可识别的合法键位，支持功能键、方向键、鼠标键、单字母/数字/符号等。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;IsKeyValid(KeyName) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (KeyName = &quot;&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (StrLen(KeyName) &amp;gt; 15)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ValidKeys := [&quot;F1&quot;,&quot;F2&quot;,&quot;F3&quot;,&quot;F4&quot;,&quot;F5&quot;,&quot;F6&quot;,&quot;F7&quot;,&quot;F8&quot;,&quot;F9&quot;,&quot;F10&quot;,&quot;F11&quot;,&quot;F12&quot;,&quot;F13&quot;,&quot;F14&quot;,&quot;F15&quot;,&quot;F16&quot;,&quot;F17&quot;,&quot;F18&quot;,&quot;F19&quot;,&quot;F20&quot;,&quot;F21&quot;,&quot;F22&quot;,&quot;F23&quot;,&quot;F24&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;Space&quot;,&quot;Tab&quot;,&quot;Enter&quot;,&quot;Return&quot;,&quot;Escape&quot;,&quot;Esc&quot;,&quot;Backspace&quot;,&quot;BS&quot;,&quot;Delete&quot;,&quot;Del&quot;,&quot;Insert&quot;,&quot;Ins&quot;,&quot;Home&quot;,&quot;End&quot;,&quot;PgUp&quot;,&quot;PgDn&quot;,&quot;PageUp&quot;,&quot;PageDown&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;Up&quot;,&quot;Down&quot;,&quot;Left&quot;,&quot;Right&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;Ctrl&quot;,&quot;Control&quot;,&quot;Shift&quot;,&quot;Alt&quot;,&quot;LWin&quot;,&quot;RWin&quot;,&quot;LControl&quot;,&quot;LShift&quot;,&quot;LAlt&quot;,&quot;RControl&quot;,&quot;RShift&quot;,&quot;RAlt&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;Numpad0&quot;,&quot;Numpad1&quot;,&quot;Numpad2&quot;,&quot;Numpad3&quot;,&quot;Numpad4&quot;,&quot;Numpad5&quot;,&quot;Numpad6&quot;,&quot;Numpad7&quot;,&quot;Numpad8&quot;,&quot;Numpad9&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;NumpadDot&quot;,&quot;NumpadEnter&quot;,&quot;NumpadAdd&quot;,&quot;NumpadSub&quot;,&quot;NumpadMult&quot;,&quot;NumpadDiv&quot;,&quot;NumpadDel&quot;,&quot;NumpadIns&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ,&quot;LButton&quot;,&quot;RButton&quot;,&quot;MButton&quot;,&quot;XButton1&quot;,&quot;XButton2&quot;,&quot;WheelUp&quot;,&quot;WheelDown&quot;,&quot;WheelLeft&quot;,&quot;WheelRight&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for index, valid in ValidKeys {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (KeyName = valid) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    StringLower, KeyLower, KeyName&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    StringLower, ValidLower, valid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (KeyLower = ValidLower) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (RegExMatch(KeyName, &quot;^[a-zA-Z]$&quot;))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (RegExMatch(KeyName, &quot;^[0-9]$&quot;))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (RegExMatch(KeyName, &quot;^[!@#$%^&amp;amp;*()_+\-=\[\]{};:&apos;&quot;&quot;,./&amp;lt;&amp;gt;?\\|`~]$&quot;))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (StrLen(KeyName) &amp;gt; 2)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  try {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    vk := GetKeyVK(KeyName)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (vk != &quot;&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;五、读取配置 LoadConfig()&lt;a href=&quot;#五读取配置-loadconfig&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从 INI 读取键位、热键、延迟参数、连卡数量/模式与暴力版本；对越界取值做默认值兜底。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;LoadConfig() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if !FileExist(ConfigFile)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, DriftKey, %ConfigFile%, KeyMapping, DriftKey, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, NitroKey, %ConfigFile%, KeyMapping, NitroKey, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, BoostKey, %ConfigFile%, KeyMapping, BoostKey, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, ForwardKey, %ConfigFile%, KeyMapping, ForwardKey, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_BaoLi, %ConfigFile%, Hotkeys, BaoLi, %Hotkey_BaoLi%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_WuHen, %ConfigFile%, Hotkeys, WuHen, %Hotkey_WuHen%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_Cut, %ConfigFile%, Hotkeys, Cut, %Hotkey_Cut%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_KaQi1, %ConfigFile%, Hotkeys, KaQi1, %Hotkey_KaQi1%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_KaQi2, %ConfigFile%, Hotkeys, KaQi2, %Hotkey_KaQi2%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_LianKa, %ConfigFile%, Hotkeys, LianKa, %Hotkey_LianKa%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_F10, %ConfigFile%, Hotkeys, F10, %Hotkey_F10%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_F11, %ConfigFile%, Hotkeys, F11, %Hotkey_F11%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, Hotkey_F12, %ConfigFile%, Hotkeys, F12, %Hotkey_F12%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, CutHoldTime, %ConfigFile%, Delays, CutHold, %CutHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, CutInterval, %ConfigFile%, Delays, CutInterval, %CutInterval%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, KaQi1HoldTime, %ConfigFile%, Delays, KaQi1Hold, %KaQi1HoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, KaQi1MinTotal, %ConfigFile%, Delays, KaQi1Min, %KaQi1MinTotal%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, KaQi2FirstHold, %ConfigFile%, Delays, KaQi2First, %KaQi2FirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, KaQi2WaitTime, %ConfigFile%, Delays, KaQi2Wait, %KaQi2WaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, KaQi2SecondHold, %ConfigFile%, Delays, KaQi2Second, %KaQi2SecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, LianKaFirstHold, %ConfigFile%, Delays, LianKaFirst, %LianKaFirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, LianKaWaitTime, %ConfigFile%, Delays, LianKaWait, %LianKaWaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, LianKaSecondHold, %ConfigFile%, Delays, LianKaSecond, %LianKaSecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, LianKaCount, %ConfigFile%, Delays, LianKaCount, %LianKaCount%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (LianKaCount &amp;lt; 3 || LianKaCount &amp;gt; 5)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    LianKaCount := 4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, LianKaMode, %ConfigFile%, Delays, LianKaMode, %LianKaMode%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (LianKaMode != 1 &amp;amp;&amp;amp; LianKaMode != 2)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    LianKaMode := 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, BaoLiVersion, %ConfigFile%, Settings, BaoLiVersion, %BaoLiVersion%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniRead, BaoLiHoldTime, %ConfigFile%, Settings, BaoLiHoldTime, %BaoLiHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;六、保存配置 SaveConfig()&lt;a href=&quot;#六保存配置-saveconfig&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把当前键位、热键、延迟与设置写回 INI 文件。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SaveConfig() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %DriftKey%, %ConfigFile%, KeyMapping, DriftKey&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %NitroKey%, %ConfigFile%, KeyMapping, NitroKey&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %BoostKey%, %ConfigFile%, KeyMapping, BoostKey&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %ForwardKey%, %ConfigFile%, KeyMapping, ForwardKey&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_BaoLi%, %ConfigFile%, Hotkeys, BaoLi&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_WuHen%, %ConfigFile%, Hotkeys, WuHen&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_Cut%, %ConfigFile%, Hotkeys, Cut&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_KaQi1%, %ConfigFile%, Hotkeys, KaQi1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_KaQi2%, %ConfigFile%, Hotkeys, KaQi2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_LianKa%, %ConfigFile%, Hotkeys, LianKa&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_F10%, %ConfigFile%, Hotkeys, F10&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_F11%, %ConfigFile%, Hotkeys, F11&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %Hotkey_F12%, %ConfigFile%, Hotkeys, F12&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %CutHoldTime%, %ConfigFile%, Delays, CutHold&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %CutInterval%, %ConfigFile%, Delays, CutInterval&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %KaQi1HoldTime%, %ConfigFile%, Delays, KaQi1Hold&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %KaQi1MinTotal%, %ConfigFile%, Delays, KaQi1Min&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %KaQi2FirstHold%, %ConfigFile%, Delays, KaQi2First&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %KaQi2WaitTime%, %ConfigFile%, Delays, KaQi2Wait&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %KaQi2SecondHold%, %ConfigFile%, Delays, KaQi2Second&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %LianKaFirstHold%, %ConfigFile%, Delays, LianKaFirst&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %LianKaWaitTime%, %ConfigFile%, Delays, LianKaWait&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %LianKaSecondHold%, %ConfigFile%, Delays, LianKaSecond&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %LianKaCount%, %ConfigFile%, Delays, LianKaCount&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %LianKaMode%, %ConfigFile%, Delays, LianKaMode&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %BaoLiVersion%, %ConfigFile%, Settings, BaoLiVersion&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  IniWrite, %BaoLiHoldTime%, %ConfigFile%, Settings, BaoLiHoldTime&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;七、刷新总览界面 RefreshOverview()&lt;a href=&quot;#七刷新总览界面-refreshoverview&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把当前键位、延迟、连卡与暴力版本同步刷新到“配置总览”窗口。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;RefreshOverview() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Drift, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Nitro, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Boost, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Forward, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Cut, 按住 %CutHoldTime%ms / 间隔 %CutInterval%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_K1, 按住 %KaQi1HoldTime%ms / 保底 %KaQi1MinTotal%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_K2, 一段 %KaQi2FirstHold%ms / 等待 %KaQi2WaitTime%ms / 二段 %KaQi2SecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaCountDesc := (LianKaCount = 3 ? &quot;三连&quot; : LianKaCount = 4 ? &quot;四连&quot; : &quot;五连&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaModeDesc := (LianKaMode = 2 ? &quot;模式B（首段带小喷）&quot; : &quot;模式A（先漂移）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_LianKa, 首按 %LianKaFirstHold%ms / 间隔 %LianKaWaitTime%ms / 连按 %LianKaSecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_LianKaCount, 当前连卡：%LianKaCountDesc%（%LianKaModeDesc%）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  OV_VersionText := (BaoLiVersion = &quot;珊瑚&quot; ? &quot;珊瑚暴力（固定300ms）&quot; : &quot;酒窝暴力（可调50-500ms）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_Version, %OV_VersionText%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Overview:, OV_HoldTime, %BaoLiHoldTime%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 已刷新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;八、同步所有界面 SyncAllGUI()&lt;a href=&quot;#八同步所有界面-syncallgui&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;将当前变量同步到主窗口、键位映射、延迟参数、总览、F 功能键等已打开的子窗口控件。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SyncAllGUI() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, BaoLiEdit, %Hotkey_BaoLi%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, WuHenEdit, %Hotkey_WuHen%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, SpaceEdit, %Hotkey_Cut%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, KaQi1Edit, %Hotkey_KaQi1%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, KaQi2Edit, %Hotkey_KaQi2%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, LianKaEdit, %Hotkey_LianKa%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (KeyMapWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, KeyMap:, KMP_Drift, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, KeyMap:, KMP_Nitro, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, KeyMap:, KMP_Boost, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, KeyMap:, KMP_Forward, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (DelayWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DCutHoldEdit, %CutHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DCutIntervalEdit, %CutInterval%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DK1HoldEdit, %KaQi1HoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DK1MinEdit, %KaQi1MinTotal%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DK2FirstEdit, %KaQi2FirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DK2WaitEdit, %KaQi2WaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DK2SecondEdit, %KaQi2SecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DLKFirstEdit, %LianKaFirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DLKWaitEdit, %LianKaWaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DLKSecondEdit, %LianKaSecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (LianKaCount = 3) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DLK3, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } else if (LianKaCount = 4) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DLK4, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DLK5, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (LianKaMode = 2)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DLianKaModeCB, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DLianKaModeCB, 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Delay:, DBaoLiHoldEdit, %BaoLiHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (BaoLiVersion = &quot;珊瑚&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DBVShanhu, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:Disable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DBVJiuwo, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:Enable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (FKeyWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:, F10Edit, %Hotkey_F10%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:, F11Edit, %Hotkey_F11%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:, F12Edit, %Hotkey_F12%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateBaoLiVersionUI()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (OverviewWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    RefreshOverview()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;九、主窗口 GUI 构建&lt;a href=&quot;#九主窗口-gui-构建&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;创建主界面：六大功能行、控制热键行、功能按钮区、状态提示与退出按钮，并设置标题、配色与字号。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Gui, Main:New, +AlwaysOnTop -MinimizeBox -MaximizeBox +LastFound&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Color, F0F5FA, FFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Margin, 15, 15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Font, s14 c0055BB, 楷体&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x0 y0 w450 h35 c0055BB, 作者：酒窝&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x0 y28 w450 h25 c0055BB, 联系方式：神龙见首不见尾&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x480 y4 w110 h25 c666666, F2隐藏窗口&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, GroupBox, x0 y60 w600 h280 c3377CC, 六大功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y90 w100 h25, 暴力出弯：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y87 w100 h25 vBaoLiEdit, %Hotkey_BaoLi%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y87 w90 h25 gBindBaoLi, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y87 w100 h25 gToggleBaoLi, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y90 w80 h25 vStateB cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y130 w100 h25, 无痕三喷：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y127 w100 h25 vWuHenEdit, %Hotkey_WuHen%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y127 w90 h25 gBindWuHen, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y127 w100 h25 gToggleWuHen, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y130 w80 h25 vStateW cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y170 w100 h25, 快速切断：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y167 w100 h25 vSpaceEdit, %Hotkey_Cut%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y167 w90 h25 gBindSpace, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y167 w100 h25 gToggleSpace, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y170 w80 h25 vStateS cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Progress, x15 y205 w570 h2 cCCCCCC BackgroundCCCCCC, 100&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y225 w100 h25, 一段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y222 w100 h25 vKaQi1Edit, %Hotkey_KaQi1%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y222 w90 h25 gBindKaQi1, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y222 w100 h25 gToggleKaQi1, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y225 w80 h25 vStateK1 cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y265 w100 h25, 二段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y262 w100 h25 vKaQi2Edit, %Hotkey_KaQi2%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y262 w90 h25 gBindKaQi2, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y262 w100 h25 gToggleKaQi2, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y265 w80 h25 vStateK2 cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y305 w100 h25, 三四五连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x130 y302 w100 h25 vLianKaEdit, %Hotkey_LianKa%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x240 y302 w90 h25 gBindLianKa, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x340 y302 w100 h25 gToggleLianKa, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x450 y305 w80 h25 vStateLK cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, GroupBox, x0 y350 w600 h85 c3377CC, 控制热键（可自定义）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y375 w90 h20, F1（总开关）：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x120 y372 w90 h24 vF1Edit, %Hotkey_F1%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x220 y372 w70 h24 gBindF1, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x320 y375 w90 h20, F2（隐藏）：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x420 y372 w90 h24 vF2Edit, %Hotkey_F2%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x520 y372 w70 h24 gBindF2, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x20 y410 w90 h20, F3（重置）：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Edit, x120 y407 w90 h24 vF3Edit, %Hotkey_F3%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x220 y407 w70 h24 gBindF3, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x15 y455 w95 h28 gOpenKeyMappingWindow, 键位映射&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x115 y455 w95 h28 gOpenDelaySettingsWindow, 延迟参数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x215 y455 w95 h28 gOpenOverviewWindow, 配置总览&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x315 y455 w95 h28 gOpenHelpWindow, 按键说明&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x415 y455 w85 h28 gSaveConfig, 保存配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x505 y455 w95 h28 gOpenFKeyWindow, F功能键&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x15 y488 w500 h20 vBindStatus c666666, 点击&quot;绑定&quot;修改键位&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x15 y510 w250 h20 cFF0000 vWindowStatus, 请切换到游戏窗口 (GameApp.exe)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Button, x0 y540 w600 h30 gExitApp cEE4444, 退出程序&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Font, s10 c0066CC, 楷体&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Add, Text, x0 y574 w600 vAuthorText c0066CC, 作者：酒窝 | 联系方式：就不告诉你&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Main:Show, xCenter yCenter w620 h615, 宏管理工具&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十、状态初始化与全局热键注册&lt;a href=&quot;#十状态初始化与全局热键注册&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;初始化各功能状态颜色，载入并同步配置，注册 F1/F2/F3/F10/F11/F12 及各功能热键、方向键与数字切换键，启动窗口检测定时器。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateB&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateW&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateS&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateK1&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateK2&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetStateColor(&quot;StateLK&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LoadConfig()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SyncAllGUI()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F1%, F1Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F2%, F2Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F3%, F3Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F10%, F10Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F11%, F11Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F12%, F12Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_BaoLi%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_WuHen%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, %Hotkey_Cut%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_KaQi1%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_KaQi2%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_LianKa%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, *Left, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, *Down, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, *Right, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $3, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $4, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $5, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, CheckWindow, 500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OnMessage(0x201, &quot;WM_LBUTTONDOWN&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十一、无边框拖动 WM_LBUTTONDOWN&lt;a href=&quot;#十一无边框拖动-wm_lbuttondown&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主窗口标题区按下左键时发送拖动消息，实现无标题栏拖动。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;WM_LBUTTONDOWN() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!A_GuiControl)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    PostMessage, 0xA1, 2,,, A&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十二、暴力版本 UI 同步 UpdateBaoLiVersionUI()&lt;a href=&quot;#十二暴力版本-ui-同步-updatebaoliversionui&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;根据当前暴力版本（珊瑚/酒窝）切换延迟窗口输入框的可用状态，并刷新总览与主窗口提示。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;UpdateBaoLiVersionUI() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global BaoLiVersion, DelayWindowOpen&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (DelayWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (BaoLiVersion = &quot;珊瑚&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DBVShanhu, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:Disable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:, DBVJiuwo, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      GuiControl, Delay:Enable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (OverviewWindowOpen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    RefreshOverview()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (BaoLiVersion = &quot;珊瑚&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 已切换到：珊瑚暴力（固定）| 按住时长固定300ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 已切换到：酒窝暴力（可调）| 按住时长可调（50-500ms）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十三、状态文本与颜色工具&lt;a href=&quot;#十三状态文本与颜色工具&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SetStateColor / SetFKeyState 统一更新控件文字与颜色；UpdateFKeyStates 同步 F 功能键窗口的启用状态。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SetStateColor(ControlName, Text, Color) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, %ControlName%, %Text%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:+c%Color%, %ControlName%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:+Redraw, %ControlName%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetFKeyState(ControlName, Text, Color) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global FKeyWindowOpen&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (FKeyWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:, %ControlName%, %Text%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:+c%Color%, %ControlName%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, FKey:+Redraw, %ControlName%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (spaceCut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF10&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF10&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF11&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF11&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (baoLiOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF12&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetFKeyState(&quot;StateF12&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十四、高精度等待 PreciseSleep()&lt;a href=&quot;#十四高精度等待-precisesleep&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基于 QueryPerformanceCounter 的高精度延时：超过 15ms 先 Sleep 近似值再忙等校准，其余直接忙等。&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;十五、清除悬浮提示 RemoveTooltip&lt;a href=&quot;#十五清除悬浮提示-removetooltip&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;定时器回调，清空 Tooltip 悬浮提示。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;RemoveTooltip:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十六、按键说明窗口 OpenHelpWindow&lt;a href=&quot;#十六按键说明窗口-openhelpwindow&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把内置帮助文本写入临时文件并用记事本打开；包含键位写法、各功能用法与版本说明。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OpenHelpWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;HelpContent =&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;很重要必须要看！！！！！！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	右键管理员运行！！！右键管理员运行！！！！右键管理员运行！！！！！！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;1.修改按键请务必按照写法&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    例如：小键盘数字8修改小喷键为Numpad8（N必须大写）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          如果要修改的键位为功能键位，例如Enter，Tab，Ctrl，F1-F2等，逐个字母输入且首字母大写&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          比如切断改为Tab，就依次输入T，a，b；回车键位就输入E，n，t,e,r&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;本软件没有修改按键映射没有写捕获功能，请务必好好输入，氮气键位游戏内是Ctrl和E，如果你是常用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;e放氮气那你改为Ctrl（其实不改也一样）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;2.二段连卡为q+（小喷+q），即卡接，要记住第一个是没有w键位的，需要定制的找酒窝（你找了我也不理你）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;为什么卡接设置成q+w（w是小喷）q；因为有时候落地卡接会出现小喷的声音，用过森涩卡气宏应该知道&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;3.暴力出弯；拉三喷，小喷灯亮了可以按一下暴力出弯键，只要亮了就包出百分百&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;4.无痕：这个要压喷，压住按氮气会出；目前市面上的无痕宏都是这样&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;5.这点是最重要的，酒窝永远最帅！！！！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;6.修改按键映射，请务必好好看看第一条说明；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;7.延迟配置里面，默认珊瑚暴力就好了；切断和卡气的延迟我也调好了可以不用懂，拿到手改一下按键映射&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;就能直接用；如果你感兴趣可以改改延迟，60帧率大概一帧是16.67ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;8.qq号：3192821508，没事请勿加谢谢&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;9.2026-8.15,好了我新增了读取文件，改完按键保存配置就好了，同一台电脑不用每次打开都改按键了&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;10.市面上还有小喷宏和起步宏；但是他们是月卡起卖，太贵了，我没办法拿到借鉴，如果谁有办法做一个并想融合&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;到这里面请添加qq备注（我应该会感谢你，可能我也用的到？）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;11.其实还有左侧卡宏，但我觉得大家一般大差不差我就没加进去，有需要的话再找我吧~&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;12.另，本软件无加壳（其实我想加但是感觉没必要），哈哈哈哈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;13.新增三四五连卡（默认热键Right，可在界面改绑）：模式A：先按一下q起漂，之后每一次都是q和小喷同时按下；模式B（勾选&quot;首段带小喷&quot;）：第一下就带小喷，全程q+小喷同时按；`n连数（三连/四连/五连）、模式（A/B）和延迟（首按/间隔/连按）都在&quot;延迟参数&quot;窗口里调；游戏内可直接按 3/4/5 切换连卡数量（按3=三连 按4=四连 按5=五连，桌面按 3/4/5 正常输入数字，触发仍用Right）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FileDelete, %A_Temp%\酒窝按键说明.txt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FileAppend, %HelpContent%, %A_Temp%\酒窝按键说明.txt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Run, notepad.exe &quot;%A_Temp%\酒窝按键说明.txt&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十七、延迟参数应用回调&lt;a href=&quot;#十七延迟参数应用回调&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;快速切断、一段连卡、二段连卡、三四五连卡的参数从延迟窗口读回，更新状态提示与悬浮说明。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ApplyCutDelayFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CutHoldTime := DCutHoldEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CutInterval := DCutIntervalEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 快速切断：按住 %CutHoldTime%ms / 间隔 %CutInterval%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 快速切断参数已更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ApplyK1DelayFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi1HoldTime := DK1HoldEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi1MinTotal := DK1MinEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 一段连卡：按住 %KaQi1HoldTime%ms / 保底 %KaQi1MinTotal%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 一段连卡参数已更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ApplyK2DelayFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2FirstHold := DK2FirstEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2WaitTime := DK2WaitEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KaQi2SecondHold := DK2SecondEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 二段连卡：一段 %KaQi2FirstHold%ms / 等待 %KaQi2WaitTime%ms / 二段 %KaQi2SecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 二段连卡参数已更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ApplyLianKaDelayFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaFirstHold := DLKFirstEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaWaitTime := DLKWaitEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaSecondHold := DLKSecondEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaCountDesc := (LianKaCount = 3 ? &quot;三连&quot; : LianKaCount = 4 ? &quot;四连&quot; : &quot;五连&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 三四五连卡：首按 %LianKaFirstHold%ms / 间隔 %LianKaWaitTime%ms / 连按 %LianKaSecondHold%ms / %LianKaCountDesc%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 三四五连卡参数已更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十八、连卡数量 / 模式 / 暴力版本切换回调&lt;a href=&quot;#十八连卡数量--模式--暴力版本切换回调&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;单选/勾选变化时更新连卡数量、连卡模式（A/B）、暴力按住时长与暴力版本（珊瑚/酒窝），并刷新界面与提示。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OnLianKaCountChange:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, IsDLK3,, DLK3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, IsDLK4,, DLK4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (IsDLK3 = 1) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaCount := 3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else if (IsDLK4 = 1) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaCount := 4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaCount := 5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaCountDesc := (LianKaCount = 3 ? &quot;三连&quot; : LianKaCount = 4 ? &quot;四连&quot; : &quot;五连&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 三四五连卡：首按 %LianKaFirstHold%ms / 间隔 %LianKaWaitTime%ms / 连按 %LianKaSecondHold%ms / %LianKaCountDesc%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (OverviewWindowOpen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  RefreshOverview()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 连卡已切换为：%LianKaCountDesc%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OnLianKaModeChange:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, IsModeB,, DLianKaModeCB&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (IsModeB = 1)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaMode := 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  LianKaMode := 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaModeDesc := (LianKaMode = 2 ? &quot;模式B（首段带小喷）&quot; : &quot;模式A（先漂移）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 三四五连卡：%LianKaModeDesc%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (OverviewWindowOpen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  RefreshOverview()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 连卡模式已切换为：%LianKaModeDesc%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ApplyBaoLiHoldFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (BaoLiVersion = &quot;珊瑚&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 珊瑚暴力为固定300ms，不可调节！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BaoLiHoldTime := DBaoLiHoldEdit + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (BaoLiHoldTime &amp;lt; 50)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  BaoLiHoldTime := 50&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (BaoLiHoldTime &amp;gt; 500)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  BaoLiHoldTime := 500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 暴力按住时长：%BaoLiHoldTime%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 暴力按住时长已更新：%BaoLiHoldTime%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OnBaoLiVersionChangeFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, IsShanhu,, DBVShanhu&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (IsShanhu = 1) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  BaoLiVersion := &quot;珊瑚&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:Disable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateBaoLiVersionUI()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 已切换到：珊瑚暴力（固定）`n按住时长固定300ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  BaoLiVersion := &quot;酒窝&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:Enable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateBaoLiVersionUI()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 已切换到：酒窝暴力（可调）`n按住时长可调（50-500ms）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;十九、键位映射窗口&lt;a href=&quot;#十九键位映射窗口&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;漂移/氮气/小喷/前进四个驾驶键位的编辑窗口：保存时逐项校验合法性，支持恢复默认与关闭销毁。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OpenKeyMappingWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (KeyMapWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, KeyMap:Show&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapWindowOpen := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:New, +AlwaysOnTop +ToolWindow +OwnerMain&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Color, F0F5FA, FFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Margin, 15, 15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x0 y0 w340 h30 Center c0055BB, ★ 全局键位映射设置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Font, s10 c222222&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x20 y45 w70 h22, 漂移键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Edit, x95 y42 w60 h24 vKMP_Drift, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x170 y45 w70 h22, 氮气键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Edit, x245 y42 w60 h24 vKMP_Nitro, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x20 y80 w70 h22, 小喷键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Edit, x95 y77 w60 h24 vKMP_Boost, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x170 y80 w70 h22, 前进键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Edit, x245 y77 w60 h24 vKMP_Forward, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Text, x20 y115 w300 h20 c666666 Center, 修改后点击&quot;保存&quot;立即生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Button, x60 y145 w70 h28 gApplyKeyMappingFromWindow, 保存&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Button, x140 y145 w80 h28 gResetKeyMapping, 恢复默认&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Add, Button, x230 y145 w70 h28 gCloseKeyMapWindow, 取消&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Show, xCenter yCenter w360 h200, 全局键位映射&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ApplyKeyMappingFromWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Submit, NoHide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(KMP_Drift)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 漂移键 &quot;%KMP_Drift%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(KMP_Nitro)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 氮气键 &quot;%KMP_Nitro%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(KMP_Boost)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 小喷键 &quot;%KMP_Boost%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(KMP_Forward)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 前进键 &quot;%KMP_Forward%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DriftKey := KMP_Drift&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;NitroKey := KMP_Nitro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BoostKey := KMP_Boost&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ForwardKey := KMP_Forward&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 键位已更新：漂移=%DriftKey% 氮气=%NitroKey% 小喷=%BoostKey% 前进=%ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 键位映射已更新！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -2000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ResetKeyMapping:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, KeyMap:, KMP_Drift, q&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, KeyMap:, KMP_Nitro, e&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, KeyMap:, KMP_Boost, Up&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, KeyMap:, KMP_Forward, w&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 已恢复默认键位&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CloseKeyMapWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapGuiClose:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, KeyMap:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;KeyMapWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十、延迟参数设置窗口&lt;a href=&quot;#二十延迟参数设置窗口&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;集中编辑切断、一段/二段连卡、三四五连卡的各段延时，以及连卡数量、模式、暴力版本与按住时长。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OpenDelaySettingsWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (DelayWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, Delay:Show&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DelayWindowOpen := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:New, +AlwaysOnTop +ToolWindow +OwnerMain&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Color, F0F5FA, FFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Margin, 15, 15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x0 y0 w440 h30 Center c0055BB, ★ 延迟参数设置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Font, s10 c222222&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y45 w70 h20, 快速切断：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x95 y45 w40 h20, 按住&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x140 y42 w50 h24 vDCutHoldEdit, %CutHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x140 y42 w50 h24 vDCutHoldUD Range5-100, %CutHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x200 y45 w40 h20, 间隔&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x245 y42 w50 h24 vDCutIntervalEdit, %CutInterval%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x245 y42 w50 h24 vDCutIntervalUD Range5-100, %CutInterval%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x310 y40 w70 h24 gApplyCutDelayFromWindow, 应用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y80 w70 h20, 一段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x95 y80 w40 h20, 按住&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x140 y77 w50 h24 vDK1HoldEdit, %KaQi1HoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x140 y77 w50 h24 vDK1HoldUD Range5-100, %KaQi1HoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x200 y80 w40 h20, 保底&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x245 y77 w50 h24 vDK1MinEdit, %KaQi1MinTotal%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x245 y77 w50 h24 vDK1MinUD Range5-100, %KaQi1MinTotal%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x310 y75 w70 h24 gApplyK1DelayFromWindow, 应用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y115 w70 h20, 二段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x95 y115 w40 h20, 一段&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x140 y112 w50 h24 vDK2FirstEdit, %KaQi2FirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x140 y112 w50 h24 vDK2FirstUD Range5-100, %KaQi2FirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x200 y115 w40 h20, 等待&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x245 y112 w50 h24 vDK2WaitEdit, %KaQi2WaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x245 y112 w50 h24 vDK2WaitUD Range100-2000, %KaQi2WaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x305 y115 w40 h20, 二段&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x350 y112 w50 h24 vDK2SecondEdit, %KaQi2SecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x350 y112 w50 h24 vDK2SecondUD Range5-100, %KaQi2SecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x415 y110 w70 h24 gApplyK2DelayFromWindow, 应用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y150 w95 h20, 三四五连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x95 y150 w40 h20, 首按&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x140 y147 w50 h24 vDLKFirstEdit, %LianKaFirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x140 y147 w50 h24 vDLKFirstUD Range5-100, %LianKaFirstHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x200 y150 w40 h20, 间隔&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x245 y147 w50 h24 vDLKWaitEdit, %LianKaWaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x245 y147 w50 h24 vDLKWaitUD Range100-2000, %LianKaWaitTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x305 y150 w40 h20, 连按&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x350 y147 w50 h24 vDLKSecondEdit, %LianKaSecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x350 y147 w50 h24 vDLKSecondUD Range5-100, %LianKaSecondHold%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x415 y147 w70 h24 gApplyLianKaDelayFromWindow, 应用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y178 w50 h20, 连数：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Radio, x70 y175 w60 h20 Group vDLK3 gOnLianKaCountChange, 三连&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Radio, x135 y175 w60 h20 vDLK4 gOnLianKaCountChange, 四连&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Radio, x200 y175 w60 h20 vDLK5 gOnLianKaCountChange, 五连&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, CheckBox, x280 y175 w210 h20 vDLianKaModeCB gOnLianKaModeChange, 首段带小喷（模式B）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y210 w70 h20, 暴力版本：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Radio, x95 y207 w150 h20 Group -Wrap vDBVShanhu gOnBaoLiVersionChangeFromWindow, 珊瑚（固定300ms）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Radio, x245 y207 w200 h20 -Wrap vDBVJiuwo gOnBaoLiVersionChangeFromWindow, 酒窝（可调50-500ms）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x20 y238 w80 h20, 按住时长：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Edit, x105 y235 w50 h24 vDBaoLiHoldEdit, %BaoLiHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, UpDown, x105 y235 w50 h24 vDBaoLiHoldUD Range50-500, %BaoLiHoldTime%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Text, x160 y238 w25 h20, ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x310 y235 w70 h24 gApplyBaoLiHoldFromWindow, 应用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Add, Button, x170 y275 w100 h28 gCloseDelayWindow, 关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (BaoLiVersion = &quot;珊瑚&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DBVShanhu, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:Disable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DBVJiuwo, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:Enable, DBaoLiHoldEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (LianKaCount = 3) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DLK3, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else if (LianKaCount = 4) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DLK4, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DLK5, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (LianKaMode = 2)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DLianKaModeCB, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Delay:, DLianKaModeCB, 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Show, xCenter yCenter w500 h315, 延迟参数设置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CloseDelayWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DelayWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DelayGuiClose:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Delay:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DelayWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十一、配置总览窗口&lt;a href=&quot;#二十一配置总览窗口&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;只读展示当前键位映射、延迟参数、连卡数量与模式、暴力版本及按住时长，支持手动刷新。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OpenOverviewWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (OverviewWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, Overview:Show&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OverviewWindowOpen := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:New, +AlwaysOnTop +ToolWindow +OwnerMain&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Color, F0F5FA, FFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Margin, 15, 15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x0 y0 w440 h35 Center c0055BB, ★ 当前配置总览&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Font, s10 c222222&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y45 w150 h22, 【键位映射】&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y70 w70 h22, 漂移键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x90 y70 w60 h22 vOV_Drift, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x170 y70 w70 h22, 氮气键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x245 y70 w60 h22 vOV_Nitro, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y100 w70 h22, 小喷键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x90 y100 w60 h22 vOV_Boost, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x170 y100 w70 h22, 前进键：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x245 y100 w60 h22 vOV_Forward, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y135 w150 h22, 【延迟参数】&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y160 w80 h20, 快速切断：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y160 w150 h20 vOV_Cut, 按住 %CutHoldTime%ms / 间隔 %CutInterval%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y185 w80 h20, 一段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y185 w150 h20 vOV_K1, 按住 %KaQi1HoldTime%ms / 保底 %KaQi1MinTotal%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y210 w80 h20, 二段连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y210 w230 h20 vOV_K2, 一段 %KaQi2FirstHold%ms / 等待 %KaQi2WaitTime%ms / 二段 %KaQi2SecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaCountDesc := (LianKaCount = 3 ? &quot;三连&quot; : LianKaCount = 4 ? &quot;四连&quot; : &quot;五连&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaModeDesc := (LianKaMode = 2 ? &quot;模式B（首段带小喷）&quot; : &quot;模式A（先漂移）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y235 w95 h20, 三四五连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y235 w280 h20 vOV_LianKa, 首按 %LianKaFirstHold%ms / 间隔 %LianKaWaitTime%ms / 连按 %LianKaSecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y258 w220 h20 cE60000 vOV_LianKaCount, 当前连卡：%LianKaCountDesc%（%LianKaModeDesc%）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y285 w150 h22, 【暴力模式】&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y310 w80 h20, 当前版本：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OV_VersionText := (BaoLiVersion = &quot;珊瑚&quot; ? &quot;珊瑚暴力（固定300ms）&quot; : &quot;酒窝暴力（可调50-500ms）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y310 w180 h20 vOV_Version, %OV_VersionText%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x15 y335 w80 h20, 按住时长：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Text, x100 y335 w80 h20 vOV_HoldTime, %BaoLiHoldTime%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Button, x120 y380 w90 h28 gRefreshOverview, 刷新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Add, Button, x220 y380 w90 h28 gCloseOverviewWindow, 关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Show, xCenter yCenter w460 h435, 当前配置总览&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RefreshOverview:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Drift, %DriftKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Nitro, %NitroKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Boost, %BoostKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Forward, %ForwardKey%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Cut, 按住 %CutHoldTime%ms / 间隔 %CutInterval%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_K1, 按住 %KaQi1HoldTime%ms / 保底 %KaQi1MinTotal%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_K2, 一段 %KaQi2FirstHold%ms / 等待 %KaQi2WaitTime%ms / 二段 %KaQi2SecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaCountDesc := (LianKaCount = 3 ? &quot;三连&quot; : LianKaCount = 4 ? &quot;四连&quot; : &quot;五连&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LianKaModeDesc := (LianKaMode = 2 ? &quot;模式B（首段带小喷）&quot; : &quot;模式A（先漂移）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_LianKa, 首按 %LianKaFirstHold%ms / 间隔 %LianKaWaitTime%ms / 连按 %LianKaSecondHold%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_LianKaCount, 当前连卡：%LianKaCountDesc%（%LianKaModeDesc%）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OV_VersionText := (BaoLiVersion = &quot;珊瑚&quot; ? &quot;珊瑚暴力（固定300ms）&quot; : &quot;酒窝暴力（可调50-500ms）&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_Version, %OV_VersionText%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Overview:, OV_HoldTime, %BaoLiHoldTime%ms&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 已刷新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CloseOverviewWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OverviewWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OverviewGuiClose:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, Overview:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;OverviewWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十二、F 功能键窗口&lt;a href=&quot;#二十二f-功能键窗口&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;F10 快速切断、F11 三四五连卡、F12 暴力出弯的单独绑定与启停界面。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;OpenFKeyWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (FKeyWindowOpen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, FKey:Show&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FKeyWindowOpen := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:New, +AlwaysOnTop +ToolWindow +OwnerMain&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Color, F0F5FA, FFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Font, s11 c222222, 微软雅黑&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Margin, 15, 15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x0 y0 w450 h30 Center c0055BB, ★ F功能键控制&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Font, s10 c222222&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x20 y45 w120 h22, F10 快速切断：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Edit, x150 y42 w60 h24 vF10Edit, %Hotkey_F10%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x220 y42 w60 h24 gBindF10, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x285 y42 w60 h24 gToggleF10, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x355 y45 w80 h22 vStateF10 cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x20 y80 w120 h22, F11 三四五连卡：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Edit, x150 y77 w60 h24 vF11Edit, %Hotkey_F11%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x220 y77 w60 h24 gBindF11, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x285 y77 w60 h24 gToggleF11, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x355 y80 w80 h22 vStateF11 cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x20 y115 w120 h22, F12 暴力出弯：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Edit, x150 y112 w60 h24 vF12Edit, %Hotkey_F12%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x220 y112 w60 h24 gBindF12, 绑定&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x285 y112 w60 h24 gToggleF12, 启停&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x355 y115 w80 h22 vStateF12 cFF0000, 未启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Text, x20 y150 w410 h20 c666666, 按 F10/F11/F12 可单独启停对应功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Add, Button, x175 y180 w100 h28 gCloseFKeyWindow, 关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Show, xCenter yCenter w450 h220, F功能键控制&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CloseFKeyWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FKeyWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FKeyGuiClose:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gui, FKey:Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FKeyWindowOpen := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十三、游戏窗口检测与热键分发 FuncWrapper&lt;a href=&quot;#二十三游戏窗口检测与热键分发-funcwrapper&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;IsGameActive 判断前台是否为游戏进程；FuncWrapper 为所有热键统一入口，未在游戏内时原样透传按键，游戏内按启用状态分发到对应宏动作。&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;二十四、总开关 F1 / 隐藏 F2 / 重置 F3&lt;a href=&quot;#二十四总开关-f1--隐藏-f2--重置-f3&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;F1 全部开/全部关；F2 切换主窗口显示隐藏；F3 强制把所有功能重新开启。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;F1Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;allOn := (baoLiOn &amp;amp;&amp;amp; wuHenOn &amp;amp;&amp;amp; spaceCut &amp;amp;&amp;amp; kaQi1On &amp;amp;&amp;amp; kaQi2On &amp;amp;&amp;amp; lianKaOn)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (allOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (baoLiOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    baoLiOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_BaoLi%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateB&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (wuHenOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    wuHenOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_WuHen%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateW&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (spaceCut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    spaceCut := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, %Hotkey_Cut%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateS&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (kaQi1On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi1On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi1%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK1&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi2On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi2%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK2&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lianKaOn := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_LianKa%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateLK&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Send, {%NitroKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Send, {%ForwardKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Send, {%BoostKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Send, {Ctrl up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Send, {%DriftKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 所有功能已全部关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, BindStatus, [已关闭] 全部已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!baoLiOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    baoLiOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_BaoLi%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateB&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!wuHenOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    wuHenOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_WuHen%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateW&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!spaceCut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    spaceCut := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, %Hotkey_Cut%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateS&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!kaQi1On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi1On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi1%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK1&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi2On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi2%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK2&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (!lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lianKaOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_LianKa%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateLK&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Tooltip, 所有功能已全部开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, BindStatus, [已开启] 全部已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;F2Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;guiShow := !guiShow&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (guiShow)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, Main:Show, xCenter yCenter&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Gui, Main:Hide&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;F3Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!baoLiOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  baoLiOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_BaoLi%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateB&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!wuHenOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  wuHenOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_WuHen%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateW&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!spaceCut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  spaceCut := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, %Hotkey_Cut%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateS&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!kaQi1On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  kaQi1On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi1%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK1&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  kaQi2On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi2%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK2&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  lianKaOn := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_LianKa%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateLK&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Tooltip, 所有功能已全部开启（已重置）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, [已开启] 全部已开启（重置）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十五、F10 / F11 / F12 动作与窗口检测&lt;a href=&quot;#二十五f10--f11--f12-动作与窗口检测&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;F10/F11/F12 分别调用对应启停函数；CheckWindow 定时器每 500ms 更新主窗口的游戏激活状态提示。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;F10Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleCutFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;F11Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleLianKaFunc(true)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;F12Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleBaoLiFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CheckWindow:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if WinActive(&quot;ahk_exe GameApp.exe&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, WindowStatus, 游戏窗口已激活 (GameApp.exe)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:+cGreen, WindowStatus&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:, WindowStatus, 请切换到游戏窗口 (GameApp.exe)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GuiControl, Main:+cRed, WindowStatus&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十六、通用宏解析 RunIniMacro()&lt;a href=&quot;#二十六通用宏解析-runinimacro&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;解析以 @ 分段、| 分隔动作的宏数据，支持 send 按键（替换四个驾驶键位占位符）与 sleep 延时两类动作。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;RunIniMacro(MacroData) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if !IsGameActive()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  StringSplit, Parts, MacroData, @&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Parts0 &amp;lt; 2) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ActionList := Parts2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Actions := []&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Loop, Parse, ActionList, |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Actions.Push(A_LoopField)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for index, Action in Actions&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Action := Trim(Action)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Action = &quot;&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      continue&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (SubStr(Action, 1, 4) = &quot;send&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      KeyPart := SubStr(Action, 6)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      KeyPart := StrReplace(KeyPart, &quot;{DriftKey}&quot;, DriftKey)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      KeyPart := StrReplace(KeyPart, &quot;{NitroKey}&quot;, NitroKey)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      KeyPart := StrReplace(KeyPart, &quot;{BoostKey}&quot;, BoostKey)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      KeyPart := StrReplace(KeyPart, &quot;{ForwardKey}&quot;, ForwardKey)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Send, %KeyPart%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    else if (SubStr(Action, 1, 5) = &quot;sleep&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Ms := SubStr(Action, 7)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Ms := Ms + 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if (Ms &amp;gt; 0)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        Sleep, %Ms%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十七、核心宏动作序列&lt;a href=&quot;#二十七核心宏动作序列&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;暴力出弯（珊瑚固定 300ms / 酒窝可调）、无痕三喷、快速切断、一段/二段卡气、三四五连卡（模式 A/B）等具体按键时序。&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;二十八、方向键动作 Left / Down / Right&lt;a href=&quot;#二十八方向键动作-left--down--right&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;方向键优先转发到已启用的对应卡气/连卡功能，否则原样发送方向键。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;LeftAction:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (kaQi1On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi1 = &quot;Left&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Gosub, KaQi1Action&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {Blind}{Left}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DownAction:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi2 = &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Gosub, KaQi2Action&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {Blind}{Down}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RightAction:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_LianKa = &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Gosub, LianKaAction&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {Blind}{Right}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;二十九、六大功能键绑定回调&lt;a href=&quot;#二十九六大功能键绑定回调&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;读取输入框新键位，校验合法性后解绑旧键、绑定新键；提示按 F3 使新键位生效。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;BindBaoLi:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, BaoLiEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_BaoLi) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是暴力出弯的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_BaoLi%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_BaoLi := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (baoLiOn)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_BaoLi%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 暴力出弯已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 暴力出弯已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindWuHen:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, WuHenEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_WuHen) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是无痕三喷的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_WuHen%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_WuHen := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (wuHenOn)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_WuHen%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 无痕三喷已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 无痕三喷已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindSpace:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, SpaceEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_Cut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是快速切断的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, %Hotkey_Cut%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_Cut := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (spaceCut)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, %Hotkey_Cut%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 快速切断已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 快速切断已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindKaQi1:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, KaQi1Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_KaQi1) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是一段连卡的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  try Hotkey, $%Hotkey_KaQi1%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_KaQi1 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n != &quot;Left&quot; &amp;amp;&amp;amp; n != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (kaQi1On)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 一段连卡已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 一段连卡已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindKaQi2:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, KaQi2Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_KaQi2) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是二段连卡的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  try Hotkey, $%Hotkey_KaQi2%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_KaQi2 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n != &quot;Left&quot; &amp;amp;&amp;amp; n != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (kaQi2On)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 二段连卡已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 二段连卡已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindLianKa:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, LianKaEdit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_LianKa) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是三四五连卡的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  try Hotkey, $%Hotkey_LianKa%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey_LianKa := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (lianKaOn)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%n%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, 三四五连卡已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, 三四五连卡已绑定为：%n%`n按 F3 使新键位生效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;三十、控制键绑定回调（F1/F2/F3/F10/F11/F12）&lt;a href=&quot;#三十控制键绑定回调f1f2f3f10f11f12&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;逐个校验控制键，禁止与其他控制键重复占用，解绑旧键并绑定新键，即时生效。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;BindF1:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F1Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F1 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F2 || n = Hotkey_F3 || n = Hotkey_F10 || n = Hotkey_F11 || n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F1%, F1Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F1 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F1%, F1Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F1 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F1（总开关）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindF2:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F2Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F2) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F2 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1 || n = Hotkey_F3 || n = Hotkey_F10 || n = Hotkey_F11 || n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F2%, F2Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F2 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F2%, F2Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F2 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F2（隐藏窗口）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindF3:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F3Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F3) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F3 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1 || n = Hotkey_F2 || n = Hotkey_F10 || n = Hotkey_F11 || n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F3%, F3Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F3 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F3%, F3Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F3 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F3（强制重置）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindF10:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F10Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F10) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F10 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1 || n = Hotkey_F2 || n = Hotkey_F3 || n = Hotkey_F11 || n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F10%, F10Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F10 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F10%, F10Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F10 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F10（快速切断）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindF11:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F11Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F11) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F11 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1 || n = Hotkey_F2 || n = Hotkey_F3 || n = Hotkey_F10 || n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F11%, F11Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F11 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F11%, F11Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F11 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F11（三四五连卡）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BindF12:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControlGet, n,, F12Edit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F12) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 262144,, 该键位已经是 F12 的键位，无需重复绑定！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (!IsKeyValid(n)) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 按键 &quot;%n%&quot; 无效！`n请输入正确的按键名称。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (n = Hotkey_F1 || n = Hotkey_F2 || n = Hotkey_F3 || n = Hotkey_F10 || n = Hotkey_F11) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  MsgBox, 48,, 该键位已被其他控制键占用！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;try Hotkey, $%Hotkey_F12%, F12Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey_F12 := n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F12%, F12Action, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiControl, Main:, BindStatus, F12 已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;MsgBox, 262144,, F12（暴力出弯）已绑定为：%n%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;三十一、功能启停切换函数&lt;a href=&quot;#三十一功能启停切换函数&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;各功能独立的开/关切换：注册/注销热键、更新状态颜色与提示；包含连卡开启时默认回到四连等逻辑。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ToggleF10:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleCutFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleF11:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleLianKaFunc(true)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleF12:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleBaoLiFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleBaoLi:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleBaoLiFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleBaoLiFunc() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  baoLiOn := !baoLiOn&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (baoLiOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_BaoLi%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateB&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 暴力出弯已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 暴力出弯已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_BaoLi%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateB&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 暴力出弯已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 暴力出弯已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleWuHen:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;wuHenOn := !wuHenOn&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (wuHenOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_WuHen%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateW&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_WuHen%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateW&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleSpace:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleCutFunc()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleCutFunc() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  spaceCut := !spaceCut&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (spaceCut) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, %Hotkey_Cut%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateS&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 快速切断已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 快速切断已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, %Hotkey_Cut%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateS&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 快速切断已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 快速切断已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleKaQi1:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;kaQi1On := !kaQi1On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (kaQi1On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi1 = &quot;Left&quot; || Hotkey_KaQi1 = &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi1%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK1&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi1%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK1&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleKaQi2:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;kaQi2On := !kaQi2On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi2 = &quot;Left&quot; || Hotkey_KaQi2 = &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi2%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK2&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;} else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Hotkey, $%Hotkey_KaQi2%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetStateColor(&quot;StateK2&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleLianKa:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleLianKaFunc(false)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleLianKaFunc(ResetToFour) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  lianKaOn := !lianKaOn&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (lianKaOn) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (ResetToFour) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      LianKaCount := 4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      LianKaCountDesc := &quot;四连&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if (DelayWindowOpen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        GuiControl, Delay:, DLK4, 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if (OverviewWindowOpen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        RefreshOverview()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_LianKa%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateLK&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 三四五连卡已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ExtraHint := ResetToFour ? &quot;（默认四连）&quot; : &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 三四五连卡已开启%ExtraHint%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_LianKa%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateLK&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 三四五连卡已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 三四五连卡已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ToggleKaQiBothFunc() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  global&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if (kaQi1On &amp;amp;&amp;amp; kaQi2On) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi1On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi2On := false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi1%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi2%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK1&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK2&quot;, &quot;未启用&quot;, &quot;FF0000&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 一二段连卡已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 一二段连卡已关闭&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } else {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi1On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    kaQi2On := true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi1%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      Hotkey, $%Hotkey_KaQi2%, FuncWrapper, On&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK1&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    SetStateColor(&quot;StateK2&quot;, &quot;已启用&quot;, &quot;009933&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    Tooltip, 一二段连卡已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    GuiControl, Main:, BindStatus, 一二段连卡已开启&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  UpdateFKeyStates()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SetTimer, RemoveTooltip, -1500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;三十二、退出与窗口关闭&lt;a href=&quot;#三十二退出与窗口关闭&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;退出前解绑全部热键、抬起所有按下的按键；主窗口关闭时走同一退出流程。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ExitApp:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_BaoLi%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_WuHen%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, %Hotkey_Cut%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_KaQi1 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi1 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_KaQi1%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_KaQi2 != &quot;Left&quot; &amp;amp;&amp;amp; Hotkey_KaQi2 != &quot;Down&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_KaQi2%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if (Hotkey_LianKa != &quot;Right&quot;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Hotkey, $%Hotkey_LianKa%, FuncWrapper, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F1%, F1Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F2%, F2Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F3%, F3Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F10%, F10Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F11%, F11Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Hotkey, $%Hotkey_F12%, F12Action, Off&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {%NitroKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {%ForwardKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {%BoostKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Send, {%DriftKey% up}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ExitApp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GuiClose:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Gosub, ExitApp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;附：源码规模&lt;a href=&quot;#附源码规模&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;原始总行数：&lt;strong&gt;1646&lt;/strong&gt; 行&lt;/li&gt;
&lt;li&gt;脚本类型：AutoHotkey v1（&lt;code&gt;.ahk&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;配置文件：脚本同目录下 &lt;code&gt;酒窝配置.ini&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>category:工具</category><category>tag:AHK</category></item><item><title>关于本站</title><link>https://dimpleblog.top/ja/post/about-me</link><guid isPermaLink="false">ja:about-me</guid><description>本站基于 astro-koharu 开源主题微调搭建，是一处安放私人随笔与旧回忆的文字自留地。</description><pubDate>Wed, 04 Nov 2026 16:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这是博客的介绍页，记录我搭建它的缘由与始末&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最初想要一个属于自己的博客，这件事在心里放了很久。&lt;/p&gt;
&lt;p&gt;我不是开发者，也没有扎实的前端功底，看不懂复杂的框架源码，写不出精巧的组件。&lt;/p&gt;
&lt;p&gt;只是长久以来，一直想要一处安静、干净、贴合自己审美的地方，用来安放文字。&lt;/p&gt;
&lt;p&gt;不是社交平台里转瞬就被信息流淹没的动态，不是被算法裹挟、需要迎合他人眼光的内容，只是单纯的、属于我自己的一小块空间。&lt;/p&gt;
&lt;p&gt;可以放随笔、旧回忆，记下某一刻冒出来的想法，存一些零散的思考，不必追求流量，不用在意有没有人看。&lt;/p&gt;
&lt;p&gt;我尝试想象过它该是什么样子：页面不要花哨，配色克制，排版舒服，文字是这里的主角。不需要繁杂的特效，没有多余的弹窗，打开之后，目光可以自然落在内容上。&lt;/p&gt;
&lt;p&gt;但我清楚自己的局限，从零搭建一套静态博客，对我来说门槛太高。Astro、主题、组件、样式、部署，一串陌生名词摆在面前，光是想想就觉得棘手。&lt;/p&gt;
&lt;p&gt;我没有能力独立完成一整套框架，很长一段时间里，这个想法就只是安静躺在心里，不知道什么时候才能落地。&lt;/p&gt;
&lt;p&gt;后来偶然在 GitHub 闲逛，刷到了 &lt;code&gt;cosZone/astro-koharu&lt;/code&gt; 这个仓库。&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://github.com/cosZone/astro-koharu&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
          &lt;span&gt;github.com&lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;GitHub - cosZone/astro-koharu: astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。&lt;/div&gt;
        &lt;p&gt;astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。 - cosZone/astro-koharu&lt;/p&gt;
        &lt;div&gt;
          &lt;span&gt;https://github.com/cosZone/astro-koharu&lt;/span&gt;
           
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/0aa0d4048bd766e29d71bec224bb929b83694c0b00ea02a853a720f40daa2e39/cosZone/astro-koharu&quot; alt=&quot;GitHub - cosZone/astro-koharu: astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;点开预览页的时候，一下子就觉得很合适。&lt;/p&gt;
&lt;p&gt;这算是幸运吗？&lt;/p&gt;
&lt;p&gt;想来应该算的。茫茫多的开源博客主题里，刚好遇见一个审美契合、结构成熟、文档清晰的模板，不用凭空摸索，省去了大量从零开始的煎熬。&lt;/p&gt;
&lt;p&gt;当然，它并不是直接原样照搬上线。拿到仓库之后，我对照着文档，一点点做了一些细微的调整。&lt;/p&gt;
&lt;p&gt;大多是很细碎的改动：微调了一点间距，修改了部分文案，调整了侧边栏的展示逻辑，适配我自己的文章分类，修改了描述、标签、封面的配置习惯，适配我写随笔、回忆类内容的需求。&lt;/p&gt;
&lt;p&gt;底层的 Astro 结构、主题的核心逻辑、原本的布局框架，我全都保留了，没有做大刀阔斧的重构。&lt;/p&gt;
&lt;p&gt;网站左上角有个’Dimple’的雪花svg，我很喜欢。&lt;/p&gt;
&lt;p&gt;Dimple = 酒窝&lt;/p&gt;
&lt;p&gt;我没有去改动它原本的骨架，只是在这个已经很好的容器里，慢慢打磨成适合我使用的模样。&lt;/p&gt;
&lt;p&gt;这就是，站在’前人的肩膀’&lt;/p&gt;
&lt;p&gt;部署的过程也不算一帆风顺，踩过不少细碎的小坑：YAML 缩进写错、图片路径不对、分类配置不匹配、构建的时候莫名报错。遇到不懂的地方，就翻仓库的说明，搜零散的教程，一点点试错、回滚、再调整。&lt;/p&gt;
&lt;p&gt;好在主题本身的维护很完善，大部分问题都有迹可循。&lt;/p&gt;
&lt;p&gt;折腾的过程不算轻松，但每修好一处小问题，看着页面按照预想的样子渲染出来，会有一种淡淡的踏实感。&lt;/p&gt;
&lt;p&gt;现在站点终于跑起来了。&lt;/p&gt;
&lt;p&gt;它依旧是 &lt;code&gt;astro-koharu&lt;/code&gt;，内核没有变，只是被我添上了属于我的痕迹。&lt;/p&gt;
&lt;p&gt;这里会放我写的随笔，像之前那篇 2022 年高考阴天的回忆，也会记录日常里零碎的思绪、偶然的感触，一些不适合发在别处的文字。&lt;/p&gt;
&lt;p&gt;不追求更新频率，不强迫自己产出，想到什么、想写什么的时候，就坐下来敲一段。&lt;/p&gt;
&lt;p&gt;开源的魅力大概就是这样。有人愿意花费时间，写出好看、好用的主题，无偿分享出来，给像我这样不懂开发、只是想拥有一块自留地的人一个机会。&lt;/p&gt;
&lt;p&gt;感谢这个主题的作者，把 Koharu 带到 GitHub 上。如果未来你也喜欢这个风格，也可以去仓库看一看。&lt;/p&gt;
&lt;p&gt;仓库地址：&lt;a href=&quot;https://github.com/cosZone/astro-koharu&quot;&gt;https://github.com/cosZone/astro-koharu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它没有多么特别，只是一个在现成主题之上，微调出来的、符合我审美的小博客。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;一个存放我文字的地方。&lt;/span&gt;&lt;/p&gt;</content:encoded><category>category:随笔</category><category>tag:博客</category></item><item><title>一篇 Markdown 在构建时经过了什么</title><link>https://dimpleblog.top/ja/post/markdown-pipeline</link><guid isPermaLink="false">ja:markdown-pipeline</guid><description>从 frontmatter 校验到 remark、rehype 插件，再到 Shiki 高亮和加密，用几张 Mermaid 图把 astro-koharu 处理一篇文章的顺序画清楚。</description><pubDate>Mon, 11 May 2026 12:05:00 GMT</pubDate><content:encoded>&lt;p&gt;写主题文档时经常被问到：「为什么这个语法在加密块里也能用？」「链接卡片的数据是什么时候抓的？」答案都藏在构建顺序里。这篇用几张图把一篇 Markdown 文章从源文件到 HTML 的路径画出来。&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;本文由 AI 根据 &lt;code&gt;astro.config.mjs&lt;/code&gt; 的插件注册顺序起草，我核对过顺序并删改了措辞。插件的增减以仓库当前代码为准。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;总览&lt;a href=&quot;#总览&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;flowchart TD
    A[Markdown 源文件] --&amp;gt; B[frontmatter 校验&amp;lt;br/&amp;gt;content.config.ts]
    B --&amp;gt; C[remark 阶段&amp;lt;br/&amp;gt;处理 Markdown 语法树]
    C --&amp;gt; D[rehype 阶段&amp;lt;br/&amp;gt;处理 HTML 语法树]
    D --&amp;gt; E[Shiki 代码高亮]
    E --&amp;gt; F[页面模板渲染]
    F --&amp;gt; G[Pagefind 建立搜索索引]&lt;/pre&gt;
&lt;p&gt;frontmatter 先经过 Zod schema 校验。字段写错类型（比如把 &lt;code&gt;tags&lt;/code&gt; 写成字符串）会在这一步直接报错，而不是渲染出奇怪的页面。&lt;/p&gt;
&lt;h2&gt;remark 阶段&lt;a href=&quot;#remark-阶段&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;remark 处理的是 Markdown 语法树（mdast），这里的顺序有讲究：&lt;/p&gt;
&lt;pre&gt;flowchart LR
    P[Shoka 预处理] --&amp;gt; M[数学公式]
    M --&amp;gt; S[隐藏文字]
    S --&amp;gt; R[注音 Ruby]
    R --&amp;gt; E[下划线与高亮]
    E --&amp;gt; D[加密块指令]
    D --&amp;gt; L[链接卡片]&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Shoka 预处理必须第一个跑&lt;/strong&gt;。它会重新解析原始文本，修正 GFM 和 Shoka 语法之间的冲突。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数学公式要在注音、隐藏文字之前&lt;/strong&gt;，否则 &lt;code&gt;$a^b$&lt;/code&gt; 里的 &lt;code&gt;^&lt;/code&gt; 可能被当成注音语法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;链接卡片在最后&lt;/strong&gt;，这时段落结构已经稳定，只需要找出「单独成段的链接」。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;链接卡片的数据从哪来&lt;a href=&quot;#链接卡片的数据从哪来&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;sequenceDiagram
    participant B as 构建进程
    participant C as .cache/og-data.json
    participant W as 目标网站
    B-&amp;gt;&amp;gt;C: 查询 URL
    alt 缓存有效
        C--&amp;gt;&amp;gt;B: 返回标题、描述、图片
    else 缓存缺失或过期
        B-&amp;gt;&amp;gt;W: 请求页面并解析 Open Graph
        W--&amp;gt;&amp;gt;B: OG 信息或错误
        B-&amp;gt;&amp;gt;C: 写回缓存
    end
    B-&amp;gt;&amp;gt;B: 渲染卡片，失败则保留普通链接&lt;/pre&gt;
&lt;p&gt;成功的结果默认缓存 30 天（&lt;code&gt;content.previewCacheTime&lt;/code&gt;），失败的结果只缓存一天，方便下次构建重试。这个缓存文件是特意提交到 Git 的，CI 上构建时就不必重新抓取。&lt;/p&gt;
&lt;h2&gt;rehype 阶段&lt;a href=&quot;#rehype-阶段&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;rehype 处理 HTML 语法树（hast）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;给标题生成 &lt;code&gt;id&lt;/code&gt;，并附上锚点链接&lt;/li&gt;
&lt;li&gt;处理 Shoka 的花括号属性语法（给元素追加 class）&lt;/li&gt;
&lt;li&gt;给图片加上低质量占位图（LQIP）&lt;/li&gt;
&lt;li&gt;用 KaTeX 渲染公式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最后&lt;/strong&gt;才是加密：整篇加密和 &lt;code&gt;:::encrypted&lt;/code&gt; 块&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;加密放在最后，是因为它要加密的是已经完全渲染好的 HTML。这也回答了开头的问题：加密块里的代码高亮、公式、链接，在加密之前就已经处理完了。&lt;/p&gt;
&lt;h2&gt;代码块&lt;a href=&quot;#代码块&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;代码块由 Shiki 在构建时高亮，所以页面上不需要加载任何高亮脚本。&lt;code&gt;title&lt;/code&gt;、&lt;code&gt;mark&lt;/code&gt;、&lt;code&gt;command&lt;/code&gt; 这些元信息由一个 Shiki transformer 解析：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; site &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;astro-koharu&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Hello from &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;site&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mermaid 代码块被排除在 Shiki 之外，交给 Mermaid 单独渲染，本文的几张图就是这样来的。&lt;/p&gt;
&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;pie title 一篇文章的处理阶段（按插件数量粗略划分）
    &quot;remark&quot; : 9
    &quot;rehype&quot; : 7
    &quot;Shiki transformer&quot; : 2&lt;/pre&gt;
&lt;p&gt;记住两条就够用：remark 管语法，rehype 管结构；加密永远在最后。&lt;/p&gt;</content:encoded><category>category:备忘录</category><category>tag:Astro</category><category>tag:Markdown</category><category>tag:Mermaid</category><category>tag:构建</category></item><item><title>Shoka 主题 Markdown 语法演示</title><link>https://dimpleblog.top/ja/post/note/shoka-features</link><guid isPermaLink="false">ja:note/shoka-features</guid><description>展示所有 Shoka 主题兼容的特殊 Markdown 语法</description><pubDate>Sat, 07 Feb 2026 04:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本文展示了从 Hexo Shoka 主题迁移的所有特殊 Markdown 语法。&lt;/p&gt;
&lt;h2&gt;文字特效&lt;a href=&quot;#文字特效&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;下划线 (ins)&lt;a href=&quot;#下划线-ins&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;++这是下划线文字++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;++波浪下划线++{.wavy}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;++着重点标记++{.dot}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这是下划线文字&lt;/p&gt;
&lt;p&gt;波浪下划线&lt;/p&gt;
&lt;p&gt;着重点标记&lt;/p&gt;
&lt;h3&gt;下划线颜色&lt;a href=&quot;#下划线颜色&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;++主色调++{.primary} ++成功++{.success} ++警告++{.warning} ++危险++{.danger} ++信息++{.info}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;主色调 成功 警告 危险 信息&lt;/p&gt;
&lt;h3&gt;高亮 (mark)&lt;a href=&quot;#高亮-mark&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;==这是高亮文字==&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;mark&gt;这是高亮文字&lt;/mark&gt;&lt;/p&gt;
&lt;h3&gt;上下标&lt;a href=&quot;#上下标&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;H~2~O 是水的化学式&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;E = mc^2^ 是质能方程&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;H&lt;sub&gt;2&lt;/sub&gt;O 是水的化学式&lt;/p&gt;
&lt;p&gt;E = mc&lt;sup&gt;2&lt;/sup&gt; 是质能方程&lt;/p&gt;
&lt;h3&gt;颜色文字&lt;a href=&quot;#颜色文字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;红色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.red} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;粉色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.pink} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;橙色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.orange} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;黄色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.yellow} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;绿色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.green} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;水色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.aqua} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;蓝色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.blue} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;紫色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.purple} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;灰色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.grey}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;红色&lt;/span&gt; &lt;span&gt;粉色&lt;/span&gt; &lt;span&gt;橙色&lt;/span&gt; &lt;span&gt;黄色&lt;/span&gt; &lt;span&gt;绿色&lt;/span&gt; &lt;span&gt;水色&lt;/span&gt; &lt;span&gt;蓝色&lt;/span&gt; &lt;span&gt;紫色&lt;/span&gt; &lt;span&gt;灰色&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;彩虹文字&lt;a href=&quot;#彩虹文字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;这段文字会有彩虹渐变效果&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.rainbow}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;这段文字会有彩虹渐变效果&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;键盘键&lt;a href=&quot;#键盘键&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Ctrl&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} + &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} 复制，&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Ctrl&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} + &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} 粘贴&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Ctrl&lt;/span&gt; + &lt;span&gt;C&lt;/span&gt; 复制，&lt;span&gt;Ctrl&lt;/span&gt; + &lt;span&gt;V&lt;/span&gt; 粘贴&lt;/p&gt;
&lt;h2&gt;隐藏文字 (Spoiler)&lt;a href=&quot;#隐藏文字-spoiler&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;这里有一段!!隐藏文字，鼠标点击显示!!&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里有一段!!模糊文字，鼠标悬停显示!!{.blur}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这里有一段隐藏文字，鼠标点击显示&lt;/p&gt;
&lt;p&gt;这里有一段&lt;span&gt;模糊文字，鼠标悬停显示&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;标签块 (Labels)&lt;a href=&quot;#标签块-labels&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;默认&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .default} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;主要&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .primary} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;信息&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .info} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;成功&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .success} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;警告&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .warning} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;危险&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .danger}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;默认&lt;/span&gt; &lt;span&gt;主要&lt;/span&gt; &lt;span&gt;信息&lt;/span&gt; &lt;span&gt;成功&lt;/span&gt; &lt;span&gt;警告&lt;/span&gt; &lt;span&gt;危险&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;提醒块 (Note Blocks)&lt;a href=&quot;#提醒块-note-blocks&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;:::default&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是默认提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::primary&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是主要提醒块，用于重要提示&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::info&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是信息提醒块，用于提供额外信息&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::success&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是成功提醒块，用于正面反馈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::warning&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是警告提醒块，请注意&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::danger&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是危险提醒块，务必谨慎&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::info no-icon&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是没有图标的信息块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是默认提醒块&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是主要提醒块，用于重要提示&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是信息提醒块，用于提供额外信息&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是成功提醒块，用于正面反馈&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是警告提醒块，请注意&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是危险提醒块，务必谨慎&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是没有图标的信息块&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;折叠块 (Collapse)&lt;a href=&quot;#折叠块-collapse&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;+++primary 点击展开详细内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里是折叠的内容，点击标题可以展开或收起。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;支持 &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; 格式化。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 列表项 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 列表项 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;+++warning 注意事项&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里列出一些需要注意的问题：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;1.&lt;/span&gt;&lt;span&gt; 注意事项一&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;2.&lt;/span&gt;&lt;span&gt; 注意事项二&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;+++danger 危险操作&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;请确保你知道自己在做什么！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; -rf&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;span&gt;  # 请勿执行此命令&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

点击展开详细内容
&lt;div&gt;
&lt;p&gt;这里是折叠的内容，点击标题可以展开或收起。&lt;/p&gt;
&lt;p&gt;支持 &lt;strong&gt;Markdown&lt;/strong&gt; 格式化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;列表项 1&lt;/li&gt;
&lt;li&gt;列表项 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


注意事项
&lt;div&gt;
&lt;p&gt;这里列出一些需要注意的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;注意事项一&lt;/li&gt;
&lt;li&gt;注意事项二&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;


危险操作
&lt;div&gt;
&lt;p&gt;请确保你知道自己在做什么！&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; -rf&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;span&gt;  # 请勿执行此命令&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;标签卡 (Tabs)&lt;a href=&quot;#标签卡-tabs&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;;;;tab1 JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;js&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;tab1 Python&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;python&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;print(&apos;Hello, World!&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;tab1 Rust&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;rust&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;fn main() {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    println!(&quot;Hello, World!&quot;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
JavaScript
Python
Rust
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;fn&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;注音&lt;a href=&quot;#注音&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{取り返す^とりかえす}是日语中&quot;取回&quot;的意思。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{漢字^かんじ}的注音示例。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;ruby&gt;取り返す&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;とりかえす&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;是日语中&quot;取回&quot;的意思。&lt;/p&gt;
&lt;p&gt;&lt;ruby&gt;漢字&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;かんじ&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;的注音示例。&lt;/p&gt;
&lt;h2&gt;代码块增强&lt;a href=&quot;#代码块增强&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;js title=&quot;hello.js&quot; url=&quot;https://example.com&quot; linkText=&quot;查看源码&quot; mark:1,3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; greeting &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;Hello&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;World&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;bash command:(&quot;$&quot;:1-3)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hello.js&lt;/span&gt;&lt;span&gt;查看源码&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; greeting &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;Hello&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;World&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;数学公式&lt;a href=&quot;#数学公式&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;行内公式：$E = mc^2$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;块级公式：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;行内公式：&lt;span&gt;&lt;span&gt;E=mc2E = mc^2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;块级公式：&lt;/p&gt;
&lt;span&gt;&lt;span&gt;&lt;span&gt;∫−∞∞e−x2dx=π\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;∫&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;∞&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;∞&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;π&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;span&gt;∑n=1∞1n2=π26\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;∞&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;π&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;h2&gt;友链卡&lt;a href=&quot;#友链卡&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% links %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; site: 余弦の博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://blog.cosine.ren&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  owner: cos&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc: FE / ACG / 手工&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  image: https://blog.cosine.ren/img/avatar.webp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  color: &apos;#ed788b&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; site: 示例博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://example.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  owner: Alice&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc: 一个热爱技术的博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  image: https://api.dicebear.com/7.x/avataaars/svg?seed=Alice&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  color: &apos;#BEDCFF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endlinks %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blog.cosine.ren&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.cosine.ren/img/avatar.webp&quot; alt=&quot;余弦の博客&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;div&gt;余弦の博客&lt;/div&gt;&lt;div&gt;FE / ACG / 手工&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
&lt;a href=&quot;https://example.com&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://api.dicebear.com/7.x/avataaars/svg?seed=Alice&quot; alt=&quot;示例博客&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;div&gt;示例博客&lt;/div&gt;&lt;div&gt;一个热爱技术的博客&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2&gt;多媒体&lt;a href=&quot;#多媒体&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;音频&lt;a href=&quot;#音频&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media audio %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: 示例音频&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://music.163.com/#/song?id=3339210292&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;音频歌单&lt;a href=&quot;#音频歌单&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media audio %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; title: 诗岸歌单 山山～全是山山～&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  list:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; https://music.163.com/#/playlist?id=8676645748&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; title: 『诗岸』全是山山！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  list:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; https://music.163.com/#/playlist?id=17606384886&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;视频&lt;a href=&quot;#视频&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media video %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: &quot;测试 1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://cdn.kastatic.org/ka-youtube-converted/O_nY1TM2RZM.mp4/O_nY1TM2RZM.mp4#t=0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: &quot;测试 2&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://cdn.kastatic.org/ka-youtube-converted/O_nY1TM2RZM.mp4/O_nY1TM2RZM.mp4#t=0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;练习题&lt;a href=&quot;#练习题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;支持四种题型：&lt;strong&gt;单选题&lt;/strong&gt;、&lt;strong&gt;多选题&lt;/strong&gt;、&lt;strong&gt;判断题&lt;/strong&gt;、&lt;strong&gt;填空题&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;单选题&lt;a href=&quot;#单选题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 下列哪个是 JavaScript 的基本数据类型？{.quiz}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Object{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Array{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Symbol{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Function{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：Symbol 是 ES6 引入的基本数据类型，而 Object、Array、Function 都是引用类型。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;下列哪个是 JavaScript 的基本数据类型？
&lt;ul&gt;
&lt;li&gt;Object&lt;/li&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;Symbol&lt;/li&gt;
&lt;li&gt;Function&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：Symbol 是 ES6 引入的基本数据类型，而 Object、Array、Function 都是引用类型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;多选题&lt;a href=&quot;#多选题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 以下哪些是 CSS 布局方式？{.quiz .multi}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Flexbox{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; jQuery{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Grid{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Float{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：Flexbox、Grid 和 Float 都是 CSS 布局方式。jQuery 是一个 JavaScript 库，不属于 CSS 布局。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;以下哪些是 CSS 布局方式？
&lt;ul&gt;
&lt;li&gt;Flexbox&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;li&gt;Grid&lt;/li&gt;
&lt;li&gt;Float&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：Flexbox、Grid 和 Float 都是 CSS 布局方式。jQuery 是一个 JavaScript 库，不属于 CSS 布局。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;判断题&lt;a href=&quot;#判断题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; `const`&lt;/span&gt;&lt;span&gt; 声明的变量不能重新赋值，但可以修改其属性。{.quiz .true}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：&lt;/span&gt;&lt;span&gt;`const`&lt;/span&gt;&lt;span&gt; 只保证变量绑定不可变，如果变量指向一个对象，其属性仍然可以修改。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; HTML 是一种编程语言。{.quiz}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：HTML（超文本标记语言）是一种标记语言，不是编程语言。它没有逻辑控制能力。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;const&lt;/code&gt; 声明的变量不能重新赋值，但可以修改其属性。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：&lt;code&gt;const&lt;/code&gt; 只保证变量绑定不可变，如果变量指向一个对象，其属性仍然可以修改。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;HTML 是一种编程语言。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：HTML（超文本标记语言）是一种标记语言，不是编程语言。它没有逻辑控制能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;填空题&lt;a href=&quot;#填空题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 在 JavaScript 中，&lt;/span&gt;&lt;span&gt;`typeof null`&lt;/span&gt;&lt;span&gt; 的结果是 &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.gap}。{.quiz .fill}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：这是一个历史遗留 bug。&lt;/span&gt;&lt;span&gt;`null`&lt;/span&gt;&lt;span&gt; 的类型标签与 object 相同，因此 &lt;/span&gt;&lt;span&gt;`typeof null`&lt;/span&gt;&lt;span&gt; 返回 &lt;/span&gt;&lt;span&gt;`&quot;object&quot;`&lt;/span&gt;&lt;span&gt;。常见错误答案是 &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.mistake}。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;在 JavaScript 中，&lt;code&gt;typeof null&lt;/code&gt; 的结果是 &lt;span&gt;object&lt;/span&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：这是一个历史遗留 bug。&lt;code&gt;null&lt;/code&gt; 的类型标签与 object 相同，因此 &lt;code&gt;typeof null&lt;/code&gt; 返回 &lt;code&gt;&quot;object&quot;&lt;/code&gt;。常见错误答案是 &lt;span&gt;null&lt;/span&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;CSS 中，&lt;span&gt;Flexbox&lt;/span&gt; 适合一维布局，&lt;span&gt;Grid&lt;/span&gt; 适合二维布局，而 &lt;span&gt;Float&lt;/span&gt; 是传统的布局方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：Flexbox 是一维布局模型（行或列），Grid 是二维布局模型（行和列同时控制），Float 是 CSS2 时代的传统布局方式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;加密内容块 (Encrypted Block)&lt;a href=&quot;#加密内容块-encrypted-block&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;:::encrypted{password=&quot;密码&quot;}&lt;/code&gt; 语法可以创建加密区块。区块内的内容在构建时使用 AES-256-GCM 进行真正加密，密码不会出现在最终的 HTML 中。读者需要输入正确密码才能解密查看。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：防止搜索引擎/爬虫收录敏感内容（如私人资源链接、付费内容片段等）。&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;前端无法实现真正意义上的加密：密码总需要在客户端输入，密文和算法都对用户可见，安全性完全取决于密码强度。本功能的目的不是对抗有针对性的破解，而是&lt;strong&gt;防止搜索引擎和爬虫直接收录明文内容&lt;/strong&gt;。对于这个场景，AES-256-GCM 已经足够：构建产物中只有密文，不含密码和明文，搜索引擎无法索引加密区块的内容。&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::encrypted{password=&quot;test&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里是加密的内容，支持完整的 Markdown 语法：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; **&lt;/span&gt;&lt;span&gt;粗体&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;、&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;斜体&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;、&lt;/span&gt;&lt;span&gt;~~&lt;/span&gt;&lt;span&gt;删除线&lt;/span&gt;&lt;span&gt;~~&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; `行内代码`&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;链接&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;https://example.com&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;js&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;加密内容中的代码也有语法高亮！&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;行内公式 $E = mc^2$ 也可以正常渲染。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::encrypted{password=&quot;another&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;每个加密块可以设置独立的密码。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;</content:encoded><category>category:备忘录</category><category>tag:Shoka</category><category>tag:Markdown</category><category>tag:测试</category></item><item><title>astro-koharu 使用指南</title><link>https://dimpleblog.top/ja/post/astro-koharu-guide</link><guid isPermaLink="false">ja:astro-koharu-guide</guid><description>astro-koharu 博客的完整使用指南，包含快速开始、配置说明、文章系统、界面功能等详细介绍</description><pubDate>Mon, 29 Dec 2025 13:55:00 GMT</pubDate><content:encoded>&lt;p&gt;一份完整的 astro-koharu 博客系统使用指南，帮助你快速上手并充分利用所有功能特性。&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://github.com/cosZone/astro-koharu&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
          &lt;span&gt;github.com&lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;GitHub - cosZone/astro-koharu: astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。&lt;/div&gt;
        &lt;p&gt;astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。 - cosZone/astro-koharu&lt;/p&gt;
        &lt;div&gt;
          &lt;span&gt;https://github.com/cosZone/astro-koharu&lt;/span&gt;
           
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/0aa0d4048bd766e29d71bec224bb929b83694c0b00ea02a853a720f40daa2e39/cosZone/astro-koharu&quot; alt=&quot;GitHub - cosZone/astro-koharu: astro-koharu 是一个萌系/二次元/粉蓝配色的 astro 主题博客，灵感来自 Hexo 的 Shoka 主题，加了很多自己的小巧思，性能优越。&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;h2&gt;快速开始&lt;a href=&quot;#快速开始&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;项目简介&lt;a href=&quot;#项目简介&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;astro-koharu 是一个基于 Astro 7.x 构建的现代化博客系统，从 Hexo 迁移而来，设计灵感和初衷都来自 &lt;a href=&quot;https://github.com/amehime/hexo-theme-shoka&quot;&gt;Shoka&lt;/a&gt; 主题。欢迎 &lt;a href=&quot;https://github.com/cosZone/astro-koharu/fork&quot;&gt;fork&lt;/a&gt; 出来制作自己的主题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心特点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基于 Astro 7.x，静态站点生成，性能优异&lt;/li&gt;
&lt;li&gt;优雅的深色/浅色主题切换&lt;/li&gt;
&lt;li&gt;基于 Pagefind 的无后端全站搜索&lt;/li&gt;
&lt;li&gt;完整的 Markdown 增强功能（GFM、代码高亮、自动目录）&lt;/li&gt;
&lt;li&gt;灵活的多级分类与标签系统（从 Shoka 主题迁移，后续会考虑将其改为可关闭的）&lt;/li&gt;
&lt;li&gt;多系列文章支持（周刊、书摘等自定义系列，支持自定义 URL slug）&lt;/li&gt;
&lt;li&gt;响应式设计&lt;/li&gt;
&lt;li&gt;草稿与置顶功能&lt;/li&gt;
&lt;li&gt;阅读进度条与阅读时间估算&lt;/li&gt;
&lt;li&gt;移动端文章阅读头部&lt;/li&gt;
&lt;li&gt;友链系统与归档页面&lt;/li&gt;
&lt;li&gt;多语言支持（i18n）&lt;/li&gt;
&lt;li&gt;RSS 订阅支持&lt;/li&gt;
&lt;li&gt;LQIP（低质量图片占位符）&lt;/li&gt;
&lt;li&gt;圣诞特辑（可开关）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;本地开发&lt;a href=&quot;#本地开发&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 克隆项目&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; clone&lt;/span&gt;&lt;span&gt; https://github.com/cosZone/astro-koharu.git&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; astro-koharu&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 安装依赖&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 启动开发服务器&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 构建生产版本&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 预览生产构建&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; preview&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;快速部署&lt;a href=&quot;#快速部署&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 Vercel 进行一键部署：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vercel.com/new/clone?repository-url=https://github.com/cosZone/astro-koharu&amp;amp;project-name=astro-koharu&amp;amp;repository-name=astro-koharu&quot;&gt;&lt;img src=&quot;https://vercel.com/button&quot; alt=&quot;Deploy with Vercel&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;构建缓存说明&lt;a href=&quot;#构建缓存说明&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;项目将 &lt;code&gt;.cache/og-data.json&lt;/code&gt; 提交到 Git 仓库。该文件缓存了链接嵌入功能抓取的外部链接 OG 元数据（标题、描述、图片等），提交到 Git 后 Vercel、Netlify 等平台构建时可直接复用，无需每次重新抓取，显著加速构建速度。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.cache/&lt;/code&gt; 目录下的其他文件（如 &lt;code&gt;transformers/&lt;/code&gt; 模型缓存、&lt;code&gt;summaries-cache.json&lt;/code&gt;）仍被 &lt;code&gt;.gitignore&lt;/code&gt; 忽略，不会提交。&lt;/p&gt;
&lt;h2&gt;基本配置&lt;a href=&quot;#基本配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;站点配置&lt;a href=&quot;#站点配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;config/site.yaml&lt;/code&gt; 文件配置站点基本信息：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# =============================================================================&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 站点基础信息&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# =============================================================================&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;site&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 余弦の博客&lt;/span&gt;&lt;span&gt; # 网站标题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  alternate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; cosine&lt;/span&gt;&lt;span&gt; # 英文短名（用作 logo 文本）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  subtitle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; WA 的一声就哭了&lt;/span&gt;&lt;span&gt; # 副标题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; cos&lt;/span&gt;&lt;span&gt; # 站点作者简称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; FE / ACG / 手工 / 深色模式强迫症 / INFP&lt;/span&gt;&lt;span&gt; # 站点简介&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  avatar&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/avatar.webp&lt;/span&gt;&lt;span&gt; # 头像路径&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  showLogo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 是否显示 logo&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  author&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; cos&lt;/span&gt;&lt;span&gt; # 文章作者&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://blog.cosine.ren/&lt;/span&gt;&lt;span&gt; # 站点域名&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  startYear&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2020&lt;/span&gt;&lt;span&gt; # 站点创建年份&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  keywords&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # SEO 关键词&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; cos&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; cosine&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; 博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; 技术&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; 前端&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;本地轻 CMS 应用&lt;a href=&quot;#本地轻-cms-应用&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;本项目提供独立的 CMS 管理应用，支持文章管理、浏览器内编辑、Markdown 预览等功能。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://r2.cosine.ren/i/2026/01/a1c1d69ef48c758010e553e882e470db.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://r2.cosine.ren/i/2026/01/6c6956e3b49729ddf272669f3f738f13.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://r2.cosine.ren/i/2026/01/1d86afe19ed2fe921990657685393c2d.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;启动 CMS：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 首次使用需安装依赖&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; cms:install&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 启动 CMS（默认端口 4322）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; cms&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CMS 提供以下功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📊 文章仪表盘：查看文章统计、分类分布、最近更新&lt;/li&gt;
&lt;li&gt;📝 浏览器内编辑器：与公开写作室共用 CodeMirror 源码编辑、Shoka 实时预览及中文语法手册，CMS 可保存完整 Markdown 原文&lt;/li&gt;
&lt;li&gt;🔄 草稿/发布切换：一键切换文章状态&lt;/li&gt;
&lt;li&gt;📌 置顶管理：快速置顶/取消置顶文章&lt;/li&gt;
&lt;li&gt;➕ 新建文章：交互式创建文章，自动生成 frontmatter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;本地编辑器跳转&lt;a href=&quot;#本地编辑器跳转&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;开发环境下，文章页「复制 Markdown」按钮组的下拉菜单支持一键跳转到本地编辑器（VS Code / Cursor / Zed 等）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置文件：&lt;/strong&gt; &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;dev&lt;/code&gt; 部分&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  localProjectPath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;/Users/yourname/path/to/astro-koharu&quot;&lt;/span&gt;&lt;span&gt; # 本地项目绝对路径&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  contentRelativePath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;src/content/blog&quot;&lt;/span&gt;&lt;span&gt; # 博客内容目录&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  editors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; vscode&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; VS Code&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; devicon-plain:vscode&lt;/span&gt;&lt;span&gt; # 可从 https://icon-sets.iconify.design/ 搜寻图标&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      urlTemplate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;vscode://file/{path}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; cursor&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Cursor&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; simple-icons:cursor&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      urlTemplate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;cursor://file/{path}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zed&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Zed&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; simple-icons:zedindustries&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      urlTemplate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;zed://file/{path}&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;配置说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;localProjectPath&lt;/code&gt; 必须是本机的绝对路径，否则无法生成正确的文件路径&lt;/li&gt;
&lt;li&gt;&lt;code&gt;urlTemplate&lt;/code&gt; 支持 &lt;code&gt;&lt;/code&gt; 占位符，会被替换为文件的完整路径&lt;/li&gt;
&lt;li&gt;配置后，开发环境的文章页下拉菜单会列出这些编辑器，点击可直接在本地编辑器中打开文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特色分类配置：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在首页底部展示的精选分类卡片：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;featuredCategories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; life&lt;/span&gt;&lt;span&gt; # 分类链接（对应 category_map）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 随笔&lt;/span&gt;&lt;span&gt; # 显示名称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/cover/2.webp&lt;/span&gt;&lt;span&gt; # 封面图片&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 生活记录、年度总结等&lt;/span&gt;&lt;span&gt; # 描述&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; note/front-end&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 前端笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/cover/1.webp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 前端相关的笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # ... 更多分类&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;多系列文章配置：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;配置特色系列（如周刊、书摘等），支持多个系列，每个系列拥有独立页面和自定义 URL：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;featuredSeries&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; slug&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; weekly&lt;/span&gt;&lt;span&gt; # URL 路径: /weekly（必填，作为页面路由）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    categoryName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 周刊&lt;/span&gt;&lt;span&gt; # 分类名称（用于匹配文章）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; FE Bits&lt;/span&gt;&lt;span&gt; # 显示标签&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    fullName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; FE Bits 前端周周谈&lt;/span&gt;&lt;span&gt; # 完整名称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span&gt; # 描述（支持多行）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      之前在自己的频道进行一些输出，于是有了这个周刊！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      更新时间期望是在每周天&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    cover&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/weekly_header.webp&lt;/span&gt;&lt;span&gt; # 封面图&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 是否启用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:newspaper-line&lt;/span&gt;&lt;span&gt; # 导航图标（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    highlightOnHome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 是否在首页高亮最新文章（可选，默认 true）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    links&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 相关链接&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      github&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://github.com/your-username/your-repo&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      rss&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /rss.xml&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; slug&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; reading&lt;/span&gt;&lt;span&gt; # URL 路径: /reading&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    categoryName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 书摘&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 读书笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    fullName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 我的读书笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 读书摘录与感悟&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    cover&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/reading_header.webp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    highlightOnHome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 此系列不在首页高亮&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;字段说明：&lt;/strong&gt;&lt;/p&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;/th&gt;&lt;th&gt;必填&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;slug&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;URL 路径，如 &lt;code&gt;weekly&lt;/code&gt; 对应 &lt;code&gt;/weekly&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;categoryName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;分类名称，用于匹配文章&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;label&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;显示标签（默认使用 categoryName）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;是否启用此系列（默认 true）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;fullName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;完整名称（用于页面标题）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;系列描述&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cover&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;封面图片路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;icon&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;导航图标（Iconify 格式）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;highlightOnHome&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;是否在首页高亮最新文章（默认 true）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;links&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;相关链接（github、rss 等）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;社交媒体配置&lt;a href=&quot;#社交媒体配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中配置社交媒体链接：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;social&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  github&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://github.com/your-username&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:github-fill&lt;/span&gt;&lt;span&gt; # Iconify 图标名&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#191717&quot;&lt;/span&gt;&lt;span&gt; # 主题色&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  bilibili&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://space.bilibili.com/your-uid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:bilibili-fill&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#da708a&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  email&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; mailto:your@email.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:mail-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#55acd5&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  rss&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /rss.xml&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:rss-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#ff6600&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # ... 更多平台&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;支持的平台：GitHub, Twitter, Bilibili, 网易云音乐, Email, RSS 等。完整配置请参考 &lt;code&gt;config/site.yaml&lt;/code&gt; 文件。&lt;/p&gt;
&lt;h3&gt;导航配置&lt;a href=&quot;#导航配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中自定义导航菜单：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;navigation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 首页&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; fa6-solid:house-chimney&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 周刊&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /weekly&lt;/span&gt;&lt;span&gt; # 对应 featuredSeries 中 slug: weekly 的系列&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:newspaper-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 读书笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /reading&lt;/span&gt;&lt;span&gt; # 对应 featuredSeries 中 slug: reading 的系列&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:book-open-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:quill-pen-ai-fill&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    children&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 支持嵌套子菜单&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 分类&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /categories&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:grid-fill&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 标签&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /tags&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; fa6-solid:tags&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 归档&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /archives&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:archive-2-fill&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 友链&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /friends&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:links-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 关于&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /about&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; fa6-regular:circle-user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：系列页面的路径格式为 &lt;code&gt;/{slug}&lt;/code&gt;，需要与 &lt;code&gt;featuredSeries&lt;/code&gt; 中配置的 &lt;code&gt;slug&lt;/code&gt; 字段一致。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;分类映射配置&lt;a href=&quot;#分类映射配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中配置中文分类名到 URL slug 的映射：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# =============================================================================&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# Category Map&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# Maps Chinese category names to URL-friendly English slugs&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# =============================================================================&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;categoryMap&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # Primary categories&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  随笔&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; life&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  笔记&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; note&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  工具&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; tools&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  周刊&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; weekly&lt;/span&gt;&lt;span&gt; # 用于分类页面 /categories/weekly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  书摘&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; reading&lt;/span&gt;&lt;span&gt; # 用于分类页面 /categories/reading&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # Secondary categories (for nested paths)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  前端&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; front-end&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # Add more as needed:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # 后端: back-end&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # 算法: algorithm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这样，&quot;随笔&quot; 分类的 URL 会是 &lt;code&gt;/categories/life&lt;/code&gt;，而不是 &lt;code&gt;/categories/随笔&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;categoryMap&lt;/code&gt; 仅用于分类页面（&lt;code&gt;/categories/*&lt;/code&gt;）的 URL 映射。系列页面的 URL（如 &lt;code&gt;/weekly&lt;/code&gt;、&lt;code&gt;/reading&lt;/code&gt;）由 &lt;code&gt;featuredSeries&lt;/code&gt; 中的 &lt;code&gt;slug&lt;/code&gt; 字段单独配置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;文章系统&lt;a href=&quot;#文章系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;创建文章&lt;a href=&quot;#创建文章&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;方式一：使用 Koharu CLI（推荐）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用交互式 CLI 工具快速创建文章：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CLI 工具会引导你输入标题、分类、标签等信息，自动生成 frontmatter 和 markdown 文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方式二：手动创建&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;src/content/blog/&lt;/code&gt; 目录下创建 Markdown 文件。目录结构会影响文章的分类：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;src/content/blog/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── life/              # 随笔分类&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── 2024-life-review.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── note/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── front-end/     # 笔记 &amp;gt; 前端&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   └── react/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │       └── React学习小记.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── algorithm/     # 笔记 &amp;gt; 算法&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│       └── 动态规划学习笔记.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└── tools/             # 工具分类&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    └── vscode插件推荐.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Frontmatter 字段说明&lt;a href=&quot;#frontmatter-字段说明&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;每篇文章开头需要包含 YAML frontmatter：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;必填字段：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 文章标题&lt;/span&gt;&lt;span&gt; # 必填&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2024-12-06 &lt;/span&gt;&lt;span&gt;# 必填，发布日期&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;常用可选字段：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 文章标题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2024-12-06&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;updated&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2024-12-15 &lt;/span&gt;&lt;span&gt;# 最近更新时间（可选，存在时会在文章页显示）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 文章摘要描述&lt;/span&gt;&lt;span&gt; # 用于 SEO 和列表展示，如不填写会自动使用 AI 摘要或提取正文前 150 字&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; custom-url-slug&lt;/span&gt;&lt;span&gt; # 自定义 URL（默认使用文件名）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;cover&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/cover/1.webp&lt;/span&gt;&lt;span&gt; # 封面图片&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 标签列表&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; React&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 分类（见下方详细说明）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;subtitle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 副标题&lt;/span&gt;&lt;span&gt; # 文章副标题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;catalog&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 是否计入分类页的分类树与篇数（默认 true）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tocNumbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 是否显示目录编号（默认 true）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 是否为草稿（默认 false）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;sticky&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 是否置顶（默认 false）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;excludeFromSummary&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 是否排除 AI 摘要和相似度计算（默认 false，系列文章建议设为 true）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 是否启用数学公式渲染（默认 false，启用后支持 KaTeX）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;quiz&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 是否启用练习题交互（默认 false，启用后支持四种题型）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; mySecret&lt;/span&gt;&lt;span&gt; # 整篇文章加密密码（可选，设置后整篇文章需输入密码才能阅读）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 文章关键词（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;colophon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 文章落款（可选，见下方「文章落款」）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; handwritten&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;关于 description 字段：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文章描述的优先级：手写 &lt;code&gt;description&lt;/code&gt; &amp;gt; AI 自动摘要 &amp;gt; Markdown 正文前 150 字&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;建议为重要文章手写描述，以获得更好的 SEO 效果&lt;/li&gt;
&lt;li&gt;如果省略描述，系统会自动使用 AI 生成的摘要（需运行 &lt;code&gt;pnpm generate:summaries&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;如果既没有手写描述也没有 AI 摘要，则自动提取文章正文的前 150 个字符&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关于 link 字段（自定义 URL）：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;重要&lt;/strong&gt;：&lt;code&gt;link&lt;/code&gt; 字段会被&lt;strong&gt;自动转换为小写&lt;/strong&gt;，以保持 URL 的一致性和规范性。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;规范化行为&lt;/strong&gt;：无论你输入 &lt;code&gt;MyPost&lt;/code&gt;、&lt;code&gt;myPost&lt;/code&gt; 还是 &lt;code&gt;mypost&lt;/code&gt;，最终 URL 都会是 &lt;code&gt;/post/mypost&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件名大小写无关&lt;/strong&gt;：文章文件名可以使用任意大小写（如 &lt;code&gt;MyPost.md&lt;/code&gt;），系统会自动处理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 摘要和相似度&lt;/strong&gt;：生成的 &lt;code&gt;summaries.json&lt;/code&gt; 和 &lt;code&gt;similarities.json&lt;/code&gt; 中的 key 也会统一为小写&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最佳实践&lt;/strong&gt;：建议直接使用小写和连字符（如 &lt;code&gt;my-awesome-post&lt;/code&gt;），避免混淆&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# ✅ 推荐写法&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; my-awesome-post&lt;/span&gt;&lt;span&gt;  # URL: /post/my-awesome-post&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# ⚠️ 会被转为小写&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MyAwesomePost&lt;/span&gt;&lt;span&gt;    # URL: /post/myawesomepost（不是 /post/MyAwesomePost）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; My-Awesome-Post&lt;/span&gt;&lt;span&gt;  # URL: /post/my-awesome-post&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果省略 &lt;code&gt;link&lt;/code&gt; 字段，系统会使用文件名（同样会转为小写）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 文件: src/content/blog/MyPost.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 省略 link 字段 → URL: /post/mypost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;分类系统&lt;a href=&quot;#分类系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;astro-koharu 支持灵活的分类配置：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;单层分类：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 工具&lt;/span&gt;&lt;span&gt; # 或者 [&apos;工具&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;对应 URL: &lt;code&gt;/categories/tools&lt;/code&gt;（根据 &lt;code&gt;categoryMap&lt;/code&gt; 映射）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多层嵌套分类：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;笔记&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; 前端&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; React&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这会创建层级关系：笔记 → 前端 → React&lt;/p&gt;
&lt;p&gt;对应 URL: &lt;code&gt;/categories/note/front-end/react&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;标签系统&lt;a href=&quot;#标签系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;标签是扁平的，不支持层级：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; TypeScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 学习笔记&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;所有标签会在 &lt;code&gt;/tags&lt;/code&gt; 页面展示，点击标签可查看该标签下的所有文章。&lt;/p&gt;
&lt;h3&gt;草稿功能&lt;a href=&quot;#草稿功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;设置 &lt;code&gt;draft: true&lt;/code&gt; 将文章标记为草稿：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 未完成的文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;行为：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本地开发&lt;/strong&gt; (&lt;code&gt;pnpm dev&lt;/code&gt;)：草稿可见，文章卡片右上角显示 &quot;DRAFT&quot; 标识&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生产构建&lt;/strong&gt; (&lt;code&gt;pnpm build&lt;/code&gt;)：草稿自动过滤，不会出现在任何列表中&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;置顶功能&lt;a href=&quot;#置顶功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;设置 &lt;code&gt;sticky: true&lt;/code&gt; 将文章置顶：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 重要公告&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;sticky&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;行为：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;置顶文章显示在首页 &quot;置顶文章&quot; 区域&lt;/li&gt;
&lt;li&gt;置顶文章按日期排序（最新的在前）&lt;/li&gt;
&lt;li&gt;不影响其他页面（分类、标签、归档）的排序&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;系列文章&lt;a href=&quot;#系列文章&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;配置了 &lt;code&gt;featuredSeries&lt;/code&gt; 的系列（见基本配置），其分类下的文章会：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;拥有专属的系列页面（URL 由 &lt;code&gt;slug&lt;/code&gt; 决定，如 &lt;code&gt;/weekly&lt;/code&gt;、&lt;code&gt;/reading&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;不出现在普通文章列表（&lt;code&gt;/posts&lt;/code&gt;）中&lt;/li&gt;
&lt;li&gt;如果系列设置了 &lt;code&gt;highlightOnHome: true&lt;/code&gt;，最新一篇会在首页高亮显示&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; FE Bits Vol.16&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 周刊&lt;/span&gt;&lt;span&gt; # 对应某个 featuredSeries 的 categoryName&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;excludeFromSummary&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 可选：排除 AI 摘要生成&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 《代码大全》读书笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 书摘&lt;/span&gt;&lt;span&gt; # 对应另一个 featuredSeries 的 categoryName&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：文章的 &lt;code&gt;categories&lt;/code&gt; 字段需要与 &lt;code&gt;featuredSeries&lt;/code&gt; 中某个系列的 &lt;code&gt;categoryName&lt;/code&gt; 匹配才会被归入该系列。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;独立页面&lt;a href=&quot;#独立页面&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;除了博客文章外，你可以在 &lt;code&gt;src/pages/&lt;/code&gt; 目录下创建 &lt;code&gt;.md&lt;/code&gt; 文件来添加独立页面（如&quot;关于&quot;、&quot;歌单&quot;等）。这些页面使用 &lt;code&gt;PageLayout.astro&lt;/code&gt; 布局，支持完整的 Markdown 增强语法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建独立页面：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;src/pages/&lt;/code&gt; 目录下新建 &lt;code&gt;.md&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;layout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ../layouts/PageLayout.astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;歌单&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;我喜欢的音乐&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;coverTitle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;我的歌单&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;comments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;页面内容...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Frontmatter 字段：&lt;/strong&gt;&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;/th&gt;&lt;th&gt;必填&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;layout&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;固定为 &lt;code&gt;../layouts/PageLayout.astro&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;页面标题（用于浏览器标签页）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;页面描述（用于 SEO）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;coverTitle&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;封面显示的标题（默认使用 &lt;code&gt;title&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;comments&lt;/code&gt;&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;是否显示评论区（默认 &lt;code&gt;true&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;添加导航入口：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;navigation&lt;/code&gt; 中添加对应菜单项：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;navigation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # ...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 歌单&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /music&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:music-2-fill&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：&lt;code&gt;src/pages/&lt;/code&gt; 下所有 &lt;code&gt;.md&lt;/code&gt; 文件会被 Koharu CLI 的备份功能自动覆盖，无需额外配置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;界面功能&lt;a href=&quot;#界面功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;主题切换&lt;a href=&quot;#主题切换&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;点击右上角的太阳/月亮图标切换深色/浅色模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码高亮：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;浅色模式：&lt;code&gt;github-light&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;深色模式：&lt;code&gt;github-dark&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;全站搜索&lt;a href=&quot;#全站搜索&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;基于 &lt;a href=&quot;https://pagefind.app/&quot;&gt;Pagefind&lt;/a&gt; 的静态站点搜索，无需后端服务器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;打开搜索：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击导航栏搜索图标&lt;/li&gt;
&lt;li&gt;快捷键：&lt;code&gt;Cmd/Ctrl + K&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持中文分词&lt;/li&gt;
&lt;li&gt;实时搜索结果&lt;/li&gt;
&lt;li&gt;高亮匹配关键词&lt;/li&gt;
&lt;li&gt;显示文章摘要和元信息&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;文章阅读功能&lt;a href=&quot;#文章阅读功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;目录导航 (Table of Contents)：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动提取文章标题（h2-h6）生成目录&lt;/li&gt;
&lt;li&gt;使用 CSS 计数器自动为标题添加层级编号（如 1., 1.1., 1.1.1.）&lt;/li&gt;
&lt;li&gt;支持通过 frontmatter 的 &lt;code&gt;tocNumbering: false&lt;/code&gt; 字段关闭编号显示&lt;/li&gt;
&lt;li&gt;点击目录项跳转到对应章节&lt;/li&gt;
&lt;li&gt;滚动时自动高亮当前章节&lt;/li&gt;
&lt;li&gt;桌面端显示在右侧边栏，移动端折叠&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;目录编号控制：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 我的文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tocNumbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 关闭目录编号（默认为 true）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;默认情况下，所有文章的目录都会显示层级编号&lt;/li&gt;
&lt;li&gt;设置 &lt;code&gt;tocNumbering: false&lt;/code&gt; 可以关闭特定文章的编号显示&lt;/li&gt;
&lt;li&gt;编号通过 CSS 计数器实现，零运行时开销&lt;/li&gt;
&lt;li&gt;同时适用于桌面端侧边栏和移动端下拉目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;阅读进度条：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;页面顶部显示阅读进度&lt;/li&gt;
&lt;li&gt;实时更新当前阅读位置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;标题锚点链接：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个标题自动生成 ID&lt;/li&gt;
&lt;li&gt;悬停标题时显示 &lt;code&gt;#&lt;/code&gt; 链接图标&lt;/li&gt;
&lt;li&gt;点击可复制带锚点的 URL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;系列文章导航：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文章底部显示同系列的上一篇/下一篇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基于最深层分类自动分组&lt;/li&gt;
&lt;li&gt;按发布日期排序&lt;/li&gt;
&lt;li&gt;显示文章标题和封面&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;阅读时间估算：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文章卡片显示预计阅读时间（基于字数计算）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;移动端文章阅读头部：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在移动端（≤992px）浏览文章时，顶部导航栏会显示专为阅读优化的头部：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;圆形阅读进度&lt;/strong&gt; - 实时显示当前阅读进度的圆形进度条&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;当前章节标题&lt;/strong&gt; - 显示当前所在的 H2/H3 章节标题，切换时带有平滑动画&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可展开目录&lt;/strong&gt; - 点击标题区域可展开完整的文章目录，快速跳转到任意章节&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;滚动时自动更新当前章节&lt;/li&gt;
&lt;li&gt;支持 &lt;code&gt;prefers-reduced-motion&lt;/code&gt; 减少动画&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;文章落款&lt;a href=&quot;#文章落款&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;落款用来告诉读者一篇文章是怎么写出来的、读之前要注意什么，比如「手写」「与 AI 合写」「含剧透」「可能已过时」。标记的字典定义在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;colophon&lt;/code&gt; 段，文章在 frontmatter 里按 id 引用：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 我的文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;colophon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; ai-cowrite&lt;/span&gt;&lt;span&gt; # 直接引用字典里的标记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; spoiler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; note&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 含《我推的孩子》第二季剧透&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt; # note 是本篇自己的补充说明&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &apos;fa6-solid:mug-hot&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 两杯咖啡&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt; # 一次性标记，不进字典&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;字典的结构：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;config/site.yaml&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;colophon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  groups&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    authorship&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 执笔&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      exclusive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 互斥组：一篇文章只能选一个&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      placement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; seal&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; card&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    notice&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 阅读提示&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      placement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; banner&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  marks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    handwritten&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      group&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; authorship&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:quill-pen-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 手写&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 每个字都是我自己敲的。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    spoiler&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      group&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; notice&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ri:eye-off-line&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 含剧透&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      tone&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; warn&lt;/span&gt;&lt;span&gt; # muted（默认）| accent | warn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认标记&lt;/strong&gt;：&lt;code&gt;handwritten&lt;/code&gt;（手写）、&lt;code&gt;ai-cowrite&lt;/code&gt;（与 AI 合写）、&lt;code&gt;ai-lead&lt;/code&gt;（AI 主笔）属于互斥的「执笔」组；&lt;code&gt;spoiler&lt;/code&gt;（含剧透）、&lt;code&gt;outdated&lt;/code&gt;（可能已过时）属于「阅读提示」组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显示位置&lt;/strong&gt;（&lt;code&gt;placement&lt;/code&gt;）：&lt;code&gt;meta&lt;/code&gt; 封面信息行、&lt;code&gt;banner&lt;/code&gt; 正文前的提示条、&lt;code&gt;seal&lt;/code&gt; 文末落款、&lt;code&gt;card&lt;/code&gt; 文章列表卡片。标记上的设置优先于分组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图标&lt;/strong&gt;：只能使用 &lt;code&gt;ri&lt;/code&gt;、&lt;code&gt;fa6-solid&lt;/code&gt;、&lt;code&gt;fa6-regular&lt;/code&gt;、&lt;code&gt;gg&lt;/code&gt; 四套 Iconify 图标，一次性标记也一样&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多语言&lt;/strong&gt;：在 &lt;code&gt;config/i18n-content.yaml&lt;/code&gt; 的 &lt;code&gt;&amp;lt;locale&amp;gt;.colophon&lt;/code&gt; 下覆盖分组和标记的文案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认标记&lt;/strong&gt;（&lt;code&gt;defaults&lt;/code&gt;）：文章没有某一组的标记时自动补上，主题默认 &lt;code&gt;defaults: [handwritten]&lt;/code&gt;，没写执笔的文章都显示「手写」。不想显示任何标记的文章写 &lt;code&gt;colophon: []&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删掉整个 &lt;code&gt;colophon&lt;/code&gt; 配置段即可关闭此功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;站内的示例文章：《我推的孩子》第二季观后感（手写 + 含剧透）、Tailwind CSS v4 升级笔记（可能已过时）、一篇 Markdown 在构建时经过了什么（AI 主笔）、容器查询实战（与 AI 合写 + 一次性标记）。&lt;/p&gt;
&lt;h3&gt;文章操作：复制 Markdown 与在写作室打开&lt;a href=&quot;#文章操作复制-markdown-与在写作室打开&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;文章页面包屑右侧有一组操作按钮：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;复制 Markdown&lt;/strong&gt;：复制整篇文章的原始 Markdown，包括 frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载&lt;/strong&gt;：把原文保存为 &lt;code&gt;.md&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;在写作室打开&lt;/strong&gt;：在写作室里打开这篇文章继续编辑&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;config/site.yaml&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;postActions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  copyMarkdown&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  downloadMarkdown&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  openInEditor&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; everyone&lt;/span&gt;&lt;span&gt; # off | dev | everyone&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;openInEditor&lt;/code&gt; 的三个取值：&lt;code&gt;off&lt;/code&gt; 不显示；&lt;code&gt;dev&lt;/code&gt; 只在本地开发服务器显示；&lt;code&gt;everyone&lt;/code&gt; 对所有访客显示，访客打开的是一份浏览器里的草稿副本，不会改动博客本身。这个按钮还要求 &lt;code&gt;editor.enabled: true&lt;/code&gt;，写作室没开启时不会出现。&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;设置了 &lt;code&gt;password&lt;/code&gt; 的整篇加密文章，以及正文里含 &lt;code&gt;:::encrypted&lt;/code&gt; 局部加密块的文章，都不提供原文，也不显示这些按钮，避免明文和密码随源文件公开。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;响应式设计&lt;a href=&quot;#响应式设计&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;桌面端：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;双栏布局（主内容 + 侧边栏）&lt;/li&gt;
&lt;li&gt;固定导航栏&lt;/li&gt;
&lt;li&gt;悬浮目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;平板：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自适应布局调整&lt;/li&gt;
&lt;li&gt;简化侧边栏&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;移动端：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单栏布局&lt;/li&gt;
&lt;li&gt;抽屉式导航菜单（汉堡菜单）&lt;/li&gt;
&lt;li&gt;折叠式目录&lt;/li&gt;
&lt;li&gt;触摸优化的交互&lt;/li&gt;
&lt;li&gt;文章页专属阅读头部（进度圈 + 当前标题 + 可展开目录）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;特色功能&lt;a href=&quot;#特色功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;系列文章系统&lt;a href=&quot;#系列文章系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;featuredSeries&lt;/code&gt; 支持配置多个系列，每个系列会自动生成独立页面：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;专属系列页面&lt;/strong&gt; (&lt;code&gt;/{slug}&lt;/code&gt;)：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个启用的系列都有独立页面（如 &lt;code&gt;/weekly&lt;/code&gt;、&lt;code&gt;/reading&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;显示该系列的所有文章&lt;/li&gt;
&lt;li&gt;系列头图和介绍&lt;/li&gt;
&lt;li&gt;相关链接（GitHub, RSS 等）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;首页展示：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置 &lt;code&gt;highlightOnHome: true&lt;/code&gt; 的系列，其最新文章会在首页高亮显示&lt;/li&gt;
&lt;li&gt;设置 &lt;code&gt;highlightOnHome: false&lt;/code&gt; 的系列不在首页展示&lt;/li&gt;
&lt;li&gt;所有系列文章独立于普通文章列表&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;设计说明：分离关注点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;featuredSeries 的设计初衷是&lt;strong&gt;将高产出分类从首页分离&lt;/strong&gt;，避免首页被单一类型文章刷屏。适用场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;周刊/日记&lt;/strong&gt;：更新频繁，数量庞大&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;读书笔记/书摘&lt;/strong&gt;：独立成系列，方便按系列浏览&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任何文章数量较多的分类&lt;/strong&gt;：当某分类文章数量远超其他分类时&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;首页行为&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系列文章从首页主列表排除&lt;/li&gt;
&lt;li&gt;设置 &lt;code&gt;highlightOnHome: true&lt;/code&gt; 时，最新一篇在首页顶部高亮&lt;/li&gt;
&lt;li&gt;其余文章通过系列专属页面（如 &lt;code&gt;/weekly&lt;/code&gt;）访问&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;其他页面正常展示&lt;/strong&gt;：系列文章在归档、分类、标签、搜索等页面仍与普通文章一起显示，仅首页主列表做了分离。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;配置示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;featuredSeries&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; slug&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; weekly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    categoryName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 周刊&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    highlightOnHome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 首页展示最新周刊&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # ...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; slug&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; reading&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    categoryName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 书摘&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    highlightOnHome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 不在首页展示&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;归档页面&lt;a href=&quot;#归档页面&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;访问 &lt;code&gt;/archives&lt;/code&gt; 查看所有文章的归档视图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按年份分组&lt;/li&gt;
&lt;li&gt;显示每年的文章数量&lt;/li&gt;
&lt;li&gt;时间线式展示&lt;/li&gt;
&lt;li&gt;包含文章发布日期、标题、分类&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;友链系统&lt;a href=&quot;#友链系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;访问 &lt;code&gt;/friends&lt;/code&gt; 查看友情链接页面：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;友链卡片展示&lt;/li&gt;
&lt;li&gt;友链申请表单（可自定义）&lt;/li&gt;
&lt;li&gt;支持头像、名称、描述、链接&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LQIP（低质量图片占位符）&lt;a href=&quot;#lqip低质量图片占位符&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;LQIP（Low Quality Image Placeholder）是一种图片加载优化技术，在高清图片加载完成前，先显示一个低质量的占位符，避免页面出现空白或布局抖动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🎨 构建时自动提取图片主色调，生成 CSS 渐变占位符&lt;/li&gt;
&lt;li&gt;⚡ 零运行时开销 —— 纯 CSS 实现，无需 JavaScript 解码&lt;/li&gt;
&lt;li&gt;📦 极小数据体积 —— 每张图片仅需 18 字符存储&lt;/li&gt;
&lt;li&gt;🔄 外部图片自动降级为纯色占位符&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;支持的组件：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文章卡片封面 (&lt;code&gt;PostItemCard&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;页面横幅 (&lt;code&gt;Cover&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;分类卡片背景 (&lt;code&gt;CategoryCards&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;系列封面 (&lt;code&gt;SeriesCover&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;侧边栏头像 (&lt;code&gt;HomeInfo&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用方式：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 生成 LQIP 数据（处理 public/img/ 下所有图片）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:lqips&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;生成效果：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LQIP 数据保存在 &lt;code&gt;src/assets/lqips.json&lt;/code&gt;，格式如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;&lt;/span&gt;&lt;span&gt;cover/1.webp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;87a3c4c2dfefbddae9&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;&lt;/span&gt;&lt;span&gt;cover/2.webp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;6e3b38ae7472af7574&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;每个值是 18 个十六进制字符（3 个颜色），运行时解码为 CSS 渐变：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;linear-gradient(135deg&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; #&lt;/span&gt;&lt;span&gt;87a3c4 0%&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; #&lt;/span&gt;&lt;span&gt;c2dfef&lt;/span&gt;&lt;span&gt; 50%&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; #&lt;/span&gt;&lt;span&gt;bddae9&lt;/span&gt;&lt;span&gt; 100%)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;原理：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 sharp 将图片缩放到 2×2 像素&lt;/li&gt;
&lt;li&gt;提取四象限的平均色（左上、右上、左下、右下）&lt;/li&gt;
&lt;li&gt;选取 3 个颜色生成 135 度斜向渐变&lt;/li&gt;
&lt;li&gt;存储为紧凑的十六进制字符串&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;在组件中使用：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; getLqipStyle&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; getLqipProps &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &apos;@lib/lqip&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 方式 1：直接获取样式字符串&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; style &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getLqipStyle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/img/cover/1.webp&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 返回: &quot;background-image:linear-gradient(...)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 方式 2：获取完整的 props（支持外部图片降级）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; lqipProps &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getLqipProps&lt;/span&gt;&lt;span&gt;(coverUrl)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 本地图片返回: { style: &quot;background-image:...&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 外部图片返回: { class: &quot;lqip-fallback&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;/img/cover/1.webp&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生成的 &lt;code&gt;src/assets/lqips.json&lt;/code&gt; 需要提交到 git&lt;/li&gt;
&lt;li&gt;添加新图片后需要重新运行 &lt;code&gt;pnpm generate:lqips&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;外部图片（http/https 开头）会自动使用纯色占位符降级&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;相关文章推荐&lt;a href=&quot;#相关文章推荐&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;参考 &lt;a href=&quot;https://alexop.dev/posts/semantic-related-posts-astro-transformersjs/&quot;&gt;No Server, No Database: Smarter Related Posts in Astro with &lt;code&gt;transformers.js&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基于语义相似度的智能文章推荐系统，使用 &lt;a href=&quot;https://huggingface.co/docs/transformers.js&quot;&gt;transformers.js&lt;/a&gt; 在本地生成文章嵌入向量，计算文章间的语义相似度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🧠 基于 AI 嵌入模型（Snowflake Arctic Embed）的语义理解&lt;/li&gt;
&lt;li&gt;📊 自动计算文章间的相似度，推荐最相关的 5 篇文章&lt;/li&gt;
&lt;li&gt;🚀 构建时预计算，运行时零开销&lt;/li&gt;
&lt;li&gt;🔧 支持通过 frontmatter 排除特定文章&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用方式：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 生成相似度数据（本地运行，会自动下载模型，约需 3-5 分钟）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:similarities&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 生成的文件会提交到 git，Vercel 等平台直接使用&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;排除特定文章：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在文章 frontmatter 中设置 &lt;code&gt;excludeFromSummary: true&lt;/code&gt; 可排除该文章：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 周刊第 1 期&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;excludeFromSummary&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 排除此文章的相似度计算和 AI 摘要生成&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：系列文章（如周刊）通常建议设置 &lt;code&gt;excludeFromSummary: true&lt;/code&gt;，避免影响其他文章的推荐质量。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;配置计算内容：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以选择是否将文章正文纳入相似度计算：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// true: 使用 标题 + 描述 + 正文（更准确，速度较慢）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// false: 仅使用 标题 + 描述（更快，适合文章数量较多的情况）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; INCLUDE_BODY &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;包含正文&lt;/strong&gt;：相似度更精确，能识别内容层面的相关性，但生成速度较慢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;仅标题+描述&lt;/strong&gt;：生成速度快，适合描述写得比较详细的博客&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 使用 Snowflake/snowflake-arctic-embed-m-v2.0 计算 168 篇文章（标题+描述）的时间&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Done!&lt;/span&gt;&lt;span&gt; Generated&lt;/span&gt;&lt;span&gt; similarities&lt;/span&gt;&lt;span&gt; for&lt;/span&gt;&lt;span&gt; 168&lt;/span&gt;&lt;span&gt; posts&lt;/span&gt;&lt;span&gt; in&lt;/span&gt;&lt;span&gt; 4.1s&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 使用 Snowflake/snowflake-arctic-embed-m-v2.0 计算 168 篇文章（标题+描述+正文）的时间&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Done!&lt;/span&gt;&lt;span&gt; Generated&lt;/span&gt;&lt;span&gt; similarities&lt;/span&gt;&lt;span&gt; for&lt;/span&gt;&lt;span&gt; 168&lt;/span&gt;&lt;span&gt; posts&lt;/span&gt;&lt;span&gt; in&lt;/span&gt;&lt;span&gt; 219.3s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这差别有点大，但是我个人很喜欢带正文的结果，效果显然会更好。所以索性再加一个跑 AI 总结的功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;模型选择：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认使用 &lt;code&gt;Snowflake/snowflake-arctic-embed-m-v2.0&lt;/code&gt; 模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模型大小&lt;/strong&gt;：约 90MB（首次运行会自动下载到 &lt;code&gt;.cache/transformers&lt;/code&gt; 目录）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量维度&lt;/strong&gt;：768 维&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能&lt;/strong&gt;：平衡了质量和速度，适合中文和英文内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成时间&lt;/strong&gt;：约 3-5 分钟（169 篇文章）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如需更换模型，编辑 &lt;code&gt;src/scripts/generateSimilarities.ts&lt;/code&gt; 中的 &lt;code&gt;MODEL_NAME&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; MODEL_NAME &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &quot;Snowflake/snowflake-arctic-embed-m-v2.0&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 可选替代方案：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// const MODEL_NAME = &apos;sentence-transformers/all-MiniLM-L6-v2&apos;; // 更小更快（约 23MB），384 维&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// const MODEL_NAME = &apos;BAAI/bge-small-zh-v1.5&apos;;  // 针对中文优化&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;其他可选模型对比：&lt;/strong&gt;&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模型&lt;/th&gt;&lt;th&gt;大小&lt;/th&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;优势&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Snowflake/snowflake-arctic-embed-m-v2.0&lt;/code&gt;&lt;/td&gt;&lt;td&gt;~90MB&lt;/td&gt;&lt;td&gt;768&lt;/td&gt;&lt;td&gt;质量高，中英文均衡&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt;&lt;/td&gt;&lt;td&gt;~23MB&lt;/td&gt;&lt;td&gt;384&lt;/td&gt;&lt;td&gt;轻量快速&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BAAI/bge-small-zh-v1.5&lt;/code&gt;&lt;/td&gt;&lt;td&gt;~95MB&lt;/td&gt;&lt;td&gt;512&lt;/td&gt;&lt;td&gt;中文专用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要本地运行生成脚本（Vercel 等平台无法运行模型）&lt;/li&gt;
&lt;li&gt;生成的 &lt;code&gt;src/assets/similarities.json&lt;/code&gt; 需要提交到 git&lt;/li&gt;
&lt;li&gt;如果没有生成相似度文件，相关文章模块不会显示&lt;/li&gt;
&lt;li&gt;模型文件会缓存在 &lt;code&gt;.cache/transformers&lt;/code&gt; 目录（已添加到 &lt;code&gt;.gitignore&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;AI 自动摘要&lt;a href=&quot;#ai-自动摘要&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;基于 &lt;a href=&quot;https://huggingface.co/docs/transformers.js&quot;&gt;transformers.js&lt;/a&gt; 的智能摘要生成系统，使用先进的 AI 模型为文章自动生成高质量摘要。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;与相关文章推荐的关系：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI 摘要功能与相关文章推荐功能相辅相成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;相似度计算&lt;/strong&gt;需要读取文章全文，计算成本较高（约 3-5 分钟）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 摘要&lt;/strong&gt;可以在不读取全文的情况下提供优质描述，同时生成的摘要也能帮助改善相似度计算的效果&lt;/li&gt;
&lt;li&gt;两者共享相同的模型缓存机制，节省存储空间&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🤖 基于先进的文本生成模型（Xenova/LaMini-Flan-T5-783M）&lt;/li&gt;
&lt;li&gt;📝 自动为缺少描述的文章生成摘要&lt;/li&gt;
&lt;li&gt;✨ 文章详情页支持打字机动画展示，增强阅读体验&lt;/li&gt;
&lt;li&gt;🎯 智能 fallback：优先使用手写 description，无描述时自动使用 AI 摘要&lt;/li&gt;
&lt;li&gt;🚀 构建时预生成，运行时零开销&lt;/li&gt;
&lt;li&gt;♿ 支持无障碍访问和 prefers-reduced-motion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用方式：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 生成 AI 摘要（本地运行，首次会下载模型，约需 5-10 分钟）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:summaries&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 生成的文件要提交到 git，然后可以在 Vercel 等平台直接使用&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;生成效果：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI 摘要会保存在 &lt;code&gt;src/assets/summaries.json&lt;/code&gt; 文件中，格式如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;&lt;/span&gt;&lt;span&gt;article-slug&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;文章标题&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;&lt;/span&gt;&lt;span&gt;summary&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;AI 生成的摘要内容...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;在哪里使用：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;文章详情页&lt;/strong&gt;：面包屑导航下方显示可折叠的 AI 摘要卡片&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认收起状态，点击&quot;展开&quot;按钮触发&lt;/li&gt;
&lt;li&gt;展开后以打字机动画逐字显示摘要内容&lt;/li&gt;
&lt;li&gt;打字机动画仅播放一次，支持 &lt;code&gt;prefers-reduced-motion&lt;/code&gt; 用户偏好&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;文章卡片&lt;/strong&gt;：作为描述的 fallback&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;优先级：手写 &lt;code&gt;description&lt;/code&gt; &amp;gt; AI 摘要 &amp;gt; Markdown 前 150 字&lt;/li&gt;
&lt;li&gt;在文章列表、首页、分类页等处自动使用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;模型选择：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认使用 &lt;code&gt;Xenova/LaMini-Flan-T5-783M&lt;/code&gt; 模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模型大小&lt;/strong&gt;：约 300MB（首次运行会自动下载到 &lt;code&gt;.cache/transformers&lt;/code&gt; 目录）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成质量&lt;/strong&gt;：高质量的中英文摘要生成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成时间&lt;/strong&gt;：约 5-10 分钟（169 篇文章）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如需更换模型，编辑 &lt;code&gt;src/scripts/generateSummaries.ts&lt;/code&gt; 中的 &lt;code&gt;MODEL_NAME&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; MODEL_NAME &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &quot;Xenova/LaMini-Flan-T5-783M&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 可选替代方案：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// const MODEL_NAME = &apos;Xenova/distilbart-cnn-6-6&apos;; // 更快，英文效果好&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// const MODEL_NAME = &apos;facebook/bart-large-cnn&apos;;   // 质量更高，但速度较慢&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;配置提示词：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以自定义生成摘要的提示词，编辑 &lt;code&gt;src/scripts/generateSummaries.ts&lt;/code&gt; 中的 &lt;code&gt;PROMPT_TEMPLATE&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; PROMPT_TEMPLATE&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; string&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; =&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  `请为以下文章生成一段简洁的摘要（100-150字）：&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;标题：&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;内容：&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要本地运行生成脚本（Vercel 等平台无法运行大模型）&lt;/li&gt;
&lt;li&gt;生成的 &lt;code&gt;src/assets/summaries.json&lt;/code&gt; 需要提交到 git&lt;/li&gt;
&lt;li&gt;如果没有生成摘要文件，会自动 fallback 到 Markdown 文本提取&lt;/li&gt;
&lt;li&gt;模型文件会缓存在 &lt;code&gt;.cache/transformers&lt;/code&gt; 目录（已添加到 &lt;code&gt;.gitignore&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;首次运行需要下载模型，建议在网络良好的环境下进行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最佳实践：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;与相似度计算配合使用&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 先生成摘要&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:summaries&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 再计算相似度（可以使用摘要代替全文，提升速度）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:similarities&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;选择性生成摘要&lt;/strong&gt;：为了节省时间，脚本会跳过已有 &lt;code&gt;description&lt;/code&gt; 的文章&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;提交到版本控制&lt;/strong&gt;：将生成的 JSON 文件提交到 git，避免在 CI/CD 环境重复生成&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;圣诞特辑&lt;a href=&quot;#圣诞特辑&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;节日限定的圣诞氛围特效系统，包含多种可独立开关的视觉效果，为博客增添节日气氛。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;雪花飘落 —— Canvas 实现的雪花动画，分前景和背景两层，支持视差效果&lt;/li&gt;
&lt;li&gt;圣诞配色 —— 红绿金主题色替换默认粉蓝配色，支持深色/浅色模式&lt;/li&gt;
&lt;li&gt;圣诞帽装饰 —— 侧边栏头像上的圣诞帽&lt;/li&gt;
&lt;li&gt;圣诞灯串 —— Header 顶部的装饰灯串动画&lt;/li&gt;
&lt;li&gt;圣诞饰品切换 —— 导航栏的装饰饰品&lt;/li&gt;
&lt;li&gt;运行时开关 —— 右下角浮动按钮可随时切换特效，设置自动保存&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;配置方式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;config/site.yaml&lt;/code&gt; 中的 &lt;code&gt;christmas&lt;/code&gt; 配置：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;christmas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 总开关&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  features&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    snowfall&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 雪花飘落&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    christmasColorScheme&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 圣诞配色&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    christmasCoverDecoration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 灯串装饰&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    christmasHat&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 圣诞帽&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    readingTimeSnow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 阅读时间雪花特效&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  snowfall&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    speed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 0.5&lt;/span&gt;&lt;span&gt; # 飘落速度（默认 0.5）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    intensity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 0.7&lt;/span&gt;&lt;span&gt; # 桌面端雪花密度（0-1）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mobileIntensity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 0.4&lt;/span&gt;&lt;span&gt; # 移动端雪花密度（0-1）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    maxLayers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 6&lt;/span&gt;&lt;span&gt; # 最大雪花层数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    maxIterations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 8&lt;/span&gt;&lt;span&gt; # 最大迭代次数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mobileMaxLayers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 4&lt;/span&gt;&lt;span&gt; # 移动端最大层数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mobileMaxIterations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 6&lt;/span&gt;&lt;span&gt; # 移动端最大迭代次数&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;用户控制：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;页面右下角悬浮按钮（雪花图标）可切换圣诞特效开关&lt;/li&gt;
&lt;li&gt;用户偏好自动保存到 localStorage，跨会话保持&lt;/li&gt;
&lt;li&gt;支持 &lt;code&gt;prefers-reduced-motion&lt;/code&gt; 偏好，自动禁用动画&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;技术实现：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;雪花使用 Canvas 2D 渲染，分层实现视差效果&lt;/li&gt;
&lt;li&gt;配色通过 CSS 变量覆盖，零运行时开销&lt;/li&gt;
&lt;li&gt;状态管理使用 nanostores，支持跨组件同步&lt;/li&gt;
&lt;li&gt;完全响应式，移动端自动降低雪花密度&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关闭圣诞特效：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置 &lt;code&gt;christmasConfig.enabled = false&lt;/code&gt; 即可完全关闭所有圣诞特效。&lt;/p&gt;
&lt;h3&gt;站点公告系统&lt;a href=&quot;#站点公告系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;无后端的站点公告系统，支持在配置文件中管理公告，首次访问自动弹出，关闭后可通过页脚入口再次查看。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无后端 —— 公告内容写在配置文件，无需数据库&lt;/li&gt;
&lt;li&gt;Toast 通知 —— 右下角浮动通知，支持多条堆叠显示&lt;/li&gt;
&lt;li&gt;多条公告 —— 支持配置多条公告，按优先级排序&lt;/li&gt;
&lt;li&gt;时间控制 —— 支持设置公告的开始/结束日期，自动控制显示&lt;/li&gt;
&lt;li&gt;自定义颜色 —— 每条公告可设置独立颜色，覆盖默认类型颜色&lt;/li&gt;
&lt;li&gt;时间线弹窗 —— 公告列表采用时间线样式，带渐变连接线&lt;/li&gt;
&lt;li&gt;Hover 已读 —— 悬停 Toast 1 秒后自动标记已读&lt;/li&gt;
&lt;li&gt;已读追踪 —— localStorage 记录已读状态，返回访问不重复弹出&lt;/li&gt;
&lt;li&gt;再次查看 —— 页脚入口可随时查看所有公告，带未读红点提示&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;配置方式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;config/site.yaml&lt;/code&gt; 添加公告：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;announcements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; welcome-2026&lt;/span&gt;&lt;span&gt; # 唯一标识&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2026 年新年快乐!&lt;/span&gt;&lt;span&gt; # 公告标题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 新年快乐! 感谢大家一直以来的支持~&lt;/span&gt;&lt;span&gt; # 公告内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; info&lt;/span&gt;&lt;span&gt; # 类型：info | warning | success | important&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    priority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 300&lt;/span&gt;&lt;span&gt; # 优先级（越高越先显示）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#ED788C&quot;&lt;/span&gt;&lt;span&gt; # 自定义颜色（可选，覆盖 type 默认色）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    publishDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;2026-01-01&quot;&lt;/span&gt;&lt;span&gt; # 显示日期（可选，用于时间线展示）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    startDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;2025-12-31T00:00:00+08:00&quot;&lt;/span&gt;&lt;span&gt; # 开始日期（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    endDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;2026-01-15T23:59:59+08:00&quot;&lt;/span&gt;&lt;span&gt; # 结束日期（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; site-update-01&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 站点更新公告&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 新增站点公告系统，现在支持多条公告同时显示！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; info&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    priority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 500&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;#6366F1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    publishDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;2025-01-02&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果需要添加链接（可选）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;announcements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; example-with-link&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 示例公告&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 公告内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; info&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://example.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 了解更多&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      external&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;公告类型样式：&lt;/strong&gt;&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;th&gt;默认颜色&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;info&lt;/code&gt;&lt;/td&gt;&lt;td&gt;信息通知&lt;/td&gt;&lt;td&gt;蓝色 (#3b82f6)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;warning&lt;/code&gt;&lt;/td&gt;&lt;td&gt;警告提示&lt;/td&gt;&lt;td&gt;黄色 (#eab308)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;success&lt;/code&gt;&lt;/td&gt;&lt;td&gt;成功消息&lt;/td&gt;&lt;td&gt;绿色 (#22c55e)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;important&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重要公告&lt;/td&gt;&lt;td&gt;红色 (#ef4444)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;设置 &lt;code&gt;color&lt;/code&gt; 字段可覆盖上述默认颜色&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;交互流程：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;首次访问&lt;/strong&gt;：0.5 秒后自动弹出未读公告 Toast（多条堆叠显示）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hover 已读&lt;/strong&gt;：悬停在 Toast 上 1 秒后自动标记已读&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手动关闭&lt;/strong&gt;：点击 Dismiss 关闭 Toast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;点击&quot;View all&quot;&lt;/strong&gt;：关闭所有 Toast，打开时间线弹窗&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时间线弹窗&lt;/strong&gt;：点击公告卡片标记已读，显示发布日期和渐变连接线&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;页脚入口&lt;/strong&gt;：随时可点击查看所有公告，未读时显示红点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;返回访问&lt;/strong&gt;：只显示真正未读的公告&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公告 &lt;code&gt;id&lt;/code&gt; 必须唯一，用于追踪已读状态&lt;/li&gt;
&lt;li&gt;省略 &lt;code&gt;startDate&lt;/code&gt; 表示立即生效，省略 &lt;code&gt;endDate&lt;/code&gt; 表示永不过期&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publishDate&lt;/code&gt; 用于时间线弹窗中的日期显示，省略时使用 &lt;code&gt;startDate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;过期公告建议从配置中删除，保持配置简洁&lt;/li&gt;
&lt;li&gt;已读状态存储在 localStorage，key 为 &lt;code&gt;announcement-read-ids:v1&lt;/code&gt;（旧 key 会自动迁移）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Markdown 增强&lt;a href=&quot;#markdown-增强&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;语法支持：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub Flavored Markdown (GFM)
&lt;ul&gt;
&lt;li&gt;表格&lt;/li&gt;
&lt;li&gt;任务列表&lt;/li&gt;
&lt;li&gt;删除线&lt;/li&gt;
&lt;li&gt;自动链接&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mermaid 图表：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;支持在 Markdown 中使用 Mermaid 语法绘制流程图、时序图、架构图等。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;mermaid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    A[构建时脚本] --&amp;gt; B[JSON 数据文件] --&amp;gt; C[运行时工具函数]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;pre&gt;flowchart LR
    A[构建时脚本] --&amp;gt; B[JSON 数据文件] --&amp;gt; C[运行时工具函数]&lt;/pre&gt;
&lt;p&gt;支持的图表类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flowchart&lt;/code&gt; / &lt;code&gt;graph&lt;/code&gt; - 流程图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sequenceDiagram&lt;/code&gt; - 时序图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;classDiagram&lt;/code&gt; - 类图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stateDiagram&lt;/code&gt; - 状态图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;erDiagram&lt;/code&gt; - ER 图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gantt&lt;/code&gt; - 甘特图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pie&lt;/code&gt; - 饼图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mindmap&lt;/code&gt; - 思维导图&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;图表会自动跟随深色/浅色主题切换。更多语法参考 &lt;a href=&quot;https://mermaid.js.org/&quot;&gt;Mermaid 官方文档&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Infographic 信息图：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;支持使用 &lt;a href=&quot;https://infographic.antv.vision/&quot;&gt;@antv/infographic&lt;/a&gt; 在 Markdown 中绘制精美的信息图表，适合展示流程、对比、层级、统计等数据。&lt;/p&gt;
&lt;p&gt;使用方式：在代码块中使用 &lt;code&gt;infographic&lt;/code&gt; 标记，第一行指定模板名称，然后使用类似 YAML 的语法定义数据：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;infographic&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;infographic list-grid-badge-card&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  title 技术栈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc 我的常用技术栈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  items&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label TypeScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 类型安全的 JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/language-typescript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label React&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 用户界面库&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/react&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label Astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 现代化静态站点生成器&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/rocket-launch&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;infographic list-grid-badge-card&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  title 技术栈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc 我的常用技术栈&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  items&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label TypeScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 类型安全的 JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/language-typescript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label React&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 用户界面库&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/react&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label Astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      desc 现代化静态站点生成器&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      icon mdi/rocket-launch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;可用模板类型：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;列表类&lt;/strong&gt; (&lt;code&gt;list-*&lt;/code&gt;)：展示信息列表&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;list-grid-badge-card&lt;/code&gt; - 卡片网格布局&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list-grid-candy-card-lite&lt;/code&gt; - 糖果风格卡片&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list-row-horizontal-icon-arrow&lt;/code&gt; - 水平图标箭头列表&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;流程/顺序类&lt;/strong&gt; (&lt;code&gt;sequence-*&lt;/code&gt;)：展示步骤、流程或阶段&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sequence-zigzag-steps-underline-text&lt;/code&gt; - 之字形步骤&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sequence-circular-simple&lt;/code&gt; - 圆形流程&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sequence-roadmap-vertical-simple&lt;/code&gt; - 垂直路线图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sequence-pyramid-simple&lt;/code&gt; - 金字塔结构&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;对比类&lt;/strong&gt; (&lt;code&gt;compare-*&lt;/code&gt;)：二元或多元对比&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;compare-binary-horizontal-simple-fold&lt;/code&gt; - 水平二元对比&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compare-swot&lt;/code&gt; - SWOT 分析&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compare-hierarchy-left-right-circle-node-pill-badge&lt;/code&gt; - 层级左右对比&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;层级类&lt;/strong&gt; (&lt;code&gt;hierarchy-*&lt;/code&gt;)：展示树形结构&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hierarchy-tree-tech-style-capsule-item&lt;/code&gt; - 科技风格树形图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hierarchy-tree-curved-line-rounded-rect-node&lt;/code&gt; - 曲线连接树形图&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;图表类&lt;/strong&gt; (&lt;code&gt;chart-*&lt;/code&gt;)：数据可视化&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;chart-column-simple&lt;/code&gt; - 柱状图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chart-bar-plain-text&lt;/code&gt; - 条形图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chart-pie-plain-text&lt;/code&gt; - 饼图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chart-line-plain-text&lt;/code&gt; - 折线图&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;其他&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;quadrant-*&lt;/code&gt; - 象限分析图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relation-*&lt;/code&gt; - 关系图&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据字段说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; - 标题（可选）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;desc&lt;/code&gt; - 描述文本（可选）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;items&lt;/code&gt; - 条目数组，每个条目可包含：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;label&lt;/code&gt; - 主标签文本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt; - 数值（用于图表类模板）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;desc&lt;/code&gt; - 描述文本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; - 图标名称（格式：&lt;code&gt;mdi/icon-name&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;children&lt;/code&gt; - 子条目（用于层级结构）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;主题定制：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以在数据后添加 &lt;code&gt;theme&lt;/code&gt; 块自定义颜色：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;infographic&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;infographic sequence-pyramid-simple&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  items&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label 基础层&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label 中间层&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - label 顶层&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;theme&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  palette&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - #3b82f6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - #8b5cf6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    - #f97316&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;信息图会自动跟随深色/浅色主题切换，并使用项目的寒蝉全圆体字体渲染。更多模板和语法参考 &lt;a href=&quot;https://infographic.antv.vision/&quot;&gt;Infographic 官方文档&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码高亮：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基于 Shiki&lt;/li&gt;
&lt;li&gt;支持双主题（深色/浅色）&lt;/li&gt;
&lt;li&gt;支持语言标注&lt;/li&gt;
&lt;li&gt;行号显示&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;javascript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; hello&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; hello&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;标题自动链接：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所有标题自动生成可点击的锚点链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;链接自动嵌入：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;独行的特殊链接会自动转换为嵌入组件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Twitter/X 链接&lt;/strong&gt;：自动嵌入 Tweet 组件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CodePen 链接&lt;/strong&gt;：自动嵌入交互式 CodePen 演示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他链接&lt;/strong&gt;：显示 OG 预览卡片（包含标题、描述、图片等）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;&amp;lt;!-- 独行链接会被嵌入 --&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;https://x.com/vercel_dev/status/1997059920936775706&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;https://codepen.io/botteu/pen/YPKBrJX/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;https://github.com/vercel/react-tweet&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;反爬严格，获取不到元信息的链接&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;https://zhuanlan.zhihu.com/p/1900483903984243480&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;!-- 段落中的链接保持不变 --&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是一个 &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;普通链接&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;https://example.com&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;，不会被嵌入。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/botteu/pen/YPKBrJX/&quot;&gt;YPKBrJX&lt;/a&gt; by botteu (&lt;a href=&quot;https://codepen.io/botteu&quot;&gt;@botteu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://github.com/vercel/react-tweet&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
          &lt;span&gt;github.com&lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;GitHub - vercel/react-tweet: Embed tweets in your React application.&lt;/div&gt;
        &lt;p&gt;Embed tweets in your React application. Contribute to vercel/react-tweet development by creating an account on GitHub.&lt;/p&gt;
        &lt;div&gt;
          &lt;span&gt;https://github.com/vercel/react-tweet&lt;/span&gt;
           
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/ad08ff11a8c065df661a7756add6ce3450c5f9fa5d4acff56680f93a29678d33/vercel/react-tweet&quot; alt=&quot;GitHub - vercel/react-tweet: Embed tweets in your React application.&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;反爬严格，获取不到元信息的链接&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://zhuanlan.zhihu.com/p/1900483903984243480&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;https://zhuanlan.zhihu.com/p/1900483903984243480&lt;/div&gt;
          &lt;div&gt;zhuanlan.zhihu.com&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      
        
      
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;这是一个 &lt;a href=&quot;https://example.com&quot;&gt;普通链接&lt;/a&gt;，不会被嵌入。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shoka 兼容 Markdown 语法：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;astro-koharu 从 Hexo Shoka 主题迁移了一套丰富的 Markdown 扩展语法，所有功能均可通过 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;content&lt;/code&gt; 配置项独立开关。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;文字特效（&lt;code&gt;enableShokaEffects&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;支持多种行内文字装饰效果：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;语法&lt;/th&gt;&lt;th&gt;效果&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;++文字++&lt;/code&gt;&lt;/td&gt;&lt;td&gt;下划线&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; 标签&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;++文字++{.wavy}&lt;/code&gt;&lt;/td&gt;&lt;td&gt;波浪下划线&lt;/td&gt;&lt;td&gt;支持 &lt;code&gt;.wavy&lt;/code&gt; 修饰符&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;++文字++{.dot}&lt;/code&gt;&lt;/td&gt;&lt;td&gt;着重点&lt;/td&gt;&lt;td&gt;支持 &lt;code&gt;.dot&lt;/code&gt; 修饰符&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;++文字++{.primary}&lt;/code&gt;&lt;/td&gt;&lt;td&gt;彩色下划线&lt;/td&gt;&lt;td&gt;支持 &lt;code&gt;.primary&lt;/code&gt; &lt;code&gt;.success&lt;/code&gt; &lt;code&gt;.warning&lt;/code&gt; &lt;code&gt;.danger&lt;/code&gt; &lt;code&gt;.info&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;==文字==&lt;/code&gt;&lt;/td&gt;&lt;td&gt;高亮&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; 标签&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;~文字~&lt;/code&gt;&lt;/td&gt;&lt;td&gt;下标&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;sub&amp;gt;&lt;/code&gt; 标签，如 H&lt;sub&gt;2&lt;/sub&gt;O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;^文字^&lt;/code&gt;&lt;/td&gt;&lt;td&gt;上标&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;sup&amp;gt;&lt;/code&gt; 标签，如 E=mc&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;p&gt;这是下划线文字 波浪下划线 着重点标记&lt;/p&gt;
&lt;p&gt;主色调 成功 警告 危险 信息&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;这是高亮文字&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;H&lt;sub&gt;2&lt;/sub&gt;O 是水的化学式，E = mc&lt;sup&gt;2&lt;/sup&gt; 是质能方程&lt;/p&gt;
&lt;p&gt;&lt;em&gt;颜色文字与特殊样式（&lt;code&gt;enableShokaAttrs&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;&lt;span&gt;文字&lt;/span&gt;&lt;/code&gt; 语法为文字添加颜色和样式：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;红色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.red} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;粉色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.pink} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;橙色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.orange} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;黄色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.yellow}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;绿色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.green} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;水色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.aqua} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;蓝色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.blue} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;紫色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.purple} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;灰色&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.grey}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;这段文字会有彩虹渐变效果&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.rainbow}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Ctrl&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} + &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} 复制，&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Ctrl&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} + &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.kbd} 粘贴&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;默认&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .default} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;主要&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .primary} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;信息&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .info}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;成功&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .success} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;警告&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .warning} &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;危险&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.label .danger}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;p&gt;&lt;span&gt;红色&lt;/span&gt; &lt;span&gt;粉色&lt;/span&gt; &lt;span&gt;橙色&lt;/span&gt; &lt;span&gt;黄色&lt;/span&gt; &lt;span&gt;绿色&lt;/span&gt; &lt;span&gt;水色&lt;/span&gt; &lt;span&gt;蓝色&lt;/span&gt; &lt;span&gt;紫色&lt;/span&gt; &lt;span&gt;灰色&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;这段文字会有彩虹渐变效果&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Ctrl&lt;/span&gt; + &lt;span&gt;C&lt;/span&gt; 复制，&lt;span&gt;Ctrl&lt;/span&gt; + &lt;span&gt;V&lt;/span&gt; 粘贴&lt;/p&gt;
&lt;p&gt;&lt;span&gt;默认&lt;/span&gt; &lt;span&gt;主要&lt;/span&gt; &lt;span&gt;信息&lt;/span&gt; &lt;span&gt;成功&lt;/span&gt; &lt;span&gt;警告&lt;/span&gt; &lt;span&gt;危险&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;隐藏文字 / Spoiler（&lt;code&gt;enableShokaSpoiler&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;这里有一段!!隐藏文字，点击显示!!&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里有一段!!模糊文字，鼠标悬停显示!!{.blur}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;p&gt;这里有一段隐藏文字，点击显示&lt;/p&gt;
&lt;p&gt;这里有一段&lt;span&gt;模糊文字，鼠标悬停显示&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认模式：点击后粒子消散动画揭示文字（基于 spoilerjs Web Component）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.blur&lt;/code&gt; 模式：鼠标悬停时模糊消失&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;注音标注 / Ruby（&lt;code&gt;enableShokaRuby&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;为 CJK 文字添加注音，适用于日语假名、汉语拼音等：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{漢字^かんじ}的注音示例&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{取り返す^とりかえす}是日语中&quot;取回&quot;的意思&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;p&gt;&lt;ruby&gt;漢字&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;かんじ&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;的注音示例。&lt;ruby&gt;取り返す&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;とりかえす&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;是日语中&quot;取回&quot;的意思。&lt;/p&gt;
&lt;p&gt;渲染为 HTML &lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt; 标签，浏览器原生支持。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;提醒块 / Note Blocks（&lt;code&gt;enableShokaContainers&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;:::&lt;/code&gt; 语法创建不同样式的提醒块：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;:::default&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是默认提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::primary&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是主要提醒块，用于重要提示&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::info&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是信息提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::success&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是成功提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::warning&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是警告提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::danger&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是危险提醒块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::info no-icon&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这是没有图标的信息块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;这是信息提醒块，用于提供额外信息&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是警告提醒块，请注意&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这是危险提醒块，务必谨慎&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;支持的样式：&lt;code&gt;default&lt;/code&gt;、&lt;code&gt;primary&lt;/code&gt;、&lt;code&gt;info&lt;/code&gt;、&lt;code&gt;success&lt;/code&gt;、&lt;code&gt;warning&lt;/code&gt;、&lt;code&gt;danger&lt;/code&gt;。添加 &lt;code&gt;no-icon&lt;/code&gt; 可隐藏图标。提醒块内部支持嵌套 Markdown 语法。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;折叠块 / Collapse（&lt;code&gt;enableShokaContainers&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;+++&lt;/code&gt; 语法创建可折叠内容（渲染为 &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; + &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt;）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;+++primary 点击展开详细内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;折叠的内容，支持 &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; 格式化。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 列表项 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 列表项 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++warning 注意事项&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;需要注意的内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++danger 危险操作&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;请确保你知道自己在做什么！&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;+++&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;

点击展开详细内容
&lt;div&gt;
&lt;p&gt;折叠的内容，支持 &lt;strong&gt;Markdown&lt;/strong&gt; 格式化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;列表项 1&lt;/li&gt;
&lt;li&gt;列表项 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


注意事项
&lt;div&gt;
&lt;p&gt;需要注意的内容&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;支持的样式：&lt;code&gt;primary&lt;/code&gt;、&lt;code&gt;info&lt;/code&gt;、&lt;code&gt;success&lt;/code&gt;、&lt;code&gt;warning&lt;/code&gt;、&lt;code&gt;danger&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;标签卡 / Tabs（&lt;code&gt;enableShokaContainers&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;;;;&lt;/code&gt; 语法创建标签页切换，同一组 ID 的标签卡会自动组合：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;;;;mygroup JavaScript&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;js&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;mygroup Python&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;python&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;mygroup Rust&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;rust&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;fn&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;;;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
JavaScript
Python
Rust
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;fn&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;;;;groupId 标签名&lt;/code&gt; 定义一个标签页，同一 &lt;code&gt;groupId&lt;/code&gt; 的标签自动组合&lt;/li&gt;
&lt;li&gt;第一个标签默认激活&lt;/li&gt;
&lt;li&gt;标签内支持任意 Markdown 内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;友链卡片（&lt;code&gt;enableShokaHexoTags&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;{% links %}&lt;/code&gt; 标签在文章中插入友链卡片网格：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% links %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; site: 博客名称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://example.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  owner: 站长昵称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc: 站点描述&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  image: https://example.com/avatar.png&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  color: &apos;#ed788b&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; site: 另一个博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://example2.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  owner: Alice&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  desc: 一个热爱技术的博客&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  image: https://api.dicebear.com/7.x/avataaars/svg?seed=Alice&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  color: &apos;#BEDCFF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endlinks %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;div&gt;
&lt;a href=&quot;https://blog.cosine.ren&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.cosine.ren/img/avatar.webp&quot; alt=&quot;余弦の博客&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;div&gt;余弦の博客&lt;/div&gt;&lt;div&gt;FE / ACG / 手工&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
&lt;a href=&quot;https://example.com&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://api.dicebear.com/7.x/avataaars/svg?seed=Alice&quot; alt=&quot;示例博客&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;div&gt;示例博客&lt;/div&gt;&lt;div&gt;一个热爱技术的博客&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;卡片数据使用 YAML 格式，支持 &lt;code&gt;site&lt;/code&gt;、&lt;code&gt;url&lt;/code&gt;、&lt;code&gt;owner&lt;/code&gt;、&lt;code&gt;desc&lt;/code&gt;、&lt;code&gt;image&lt;/code&gt;、&lt;code&gt;color&lt;/code&gt; 字段。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;音频播放器（&lt;code&gt;enableShokaHexoTags&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;{% media audio %}&lt;/code&gt; 标签嵌入音频播放器，支持网易云音乐、QQ 音乐等平台（通过 &lt;a href=&quot;https://github.com/metowolf/meting&quot;&gt;Meting&lt;/a&gt; API 解析）。&lt;/p&gt;
&lt;p&gt;默认使用 &lt;code&gt;https://163.hyc.moe/&lt;/code&gt; 作为 Meting API，可在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;bgm.metingApi&lt;/code&gt; 中自定义，推荐自部署以获得更稳定的服务。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media audio %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: 歌曲名称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://music.163.com/#/song?id=3339210292&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;支持歌单模式，可配置多个分组：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media audio %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; title: 歌单名称 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  list:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; https://music.163.com/#/playlist?id=8676645748&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; title: 歌单名称 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  list:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; https://music.163.com/#/playlist?id=17606384886&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;视频播放器（&lt;code&gt;enableShokaHexoTags&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;{% media video %}&lt;/code&gt; 标签嵌入视频播放器：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{% media video %}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: 视频 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://example.com/video1.mp4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name: 视频 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  url: https://example.com/video2.mp4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{% endmedia %}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;多个视频时自动显示播放列表。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;练习题系统（&lt;code&gt;enableQuiz&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;支持四种交互式题型，适合教程和学习笔记。需在文章 frontmatter 中设置 &lt;code&gt;quiz: true&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;单选题：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 下列哪个是 JavaScript 的基本数据类型？{.quiz}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Object{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Array{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Symbol{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Function{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：Symbol 是 ES6 引入的基本数据类型。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下列哪个是 JavaScript 的基本数据类型？
&lt;ul&gt;
&lt;li&gt;Object&lt;/li&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;Symbol&lt;/li&gt;
&lt;li&gt;Function&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：Symbol 是 ES6 引入的基本数据类型，而 Object、Array、Function 都是引用类型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;选项标记 &lt;code&gt;&lt;/code&gt; 为正确答案，&lt;code&gt;{.options}&lt;/code&gt; 为干扰项&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;多选题：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 以下哪些是 CSS 布局方式？{.quiz .multi}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Flexbox{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; jQuery{.options}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Grid{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Float{.correct}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：Flexbox、Grid 和 Float 都是 CSS 布局方式。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以下哪些是 CSS 布局方式？
&lt;ul&gt;
&lt;li&gt;Flexbox&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;li&gt;Grid&lt;/li&gt;
&lt;li&gt;Float&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：Flexbox、Grid 和 Float 都是 CSS 布局方式。jQuery 是一个 JavaScript 库。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;添加 &lt;code&gt;.multi&lt;/code&gt; 标记启用多选模式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;判断题：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; `const`&lt;/span&gt;&lt;span&gt; 声明的变量不能重新赋值，但可以修改其属性。{.quiz .true}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：&lt;/span&gt;&lt;span&gt;`const`&lt;/span&gt;&lt;span&gt; 只保证变量绑定不可变。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; HTML 是一种编程语言。{.quiz}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 解析：HTML 是标记语言，不是编程语言。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;const&lt;/code&gt; 声明的变量不能重新赋值，但可以修改其属性。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：&lt;code&gt;const&lt;/code&gt; 只保证变量绑定不可变，如果变量指向一个对象，其属性仍然可以修改。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;HTML 是一种编程语言。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;解析：HTML（超文本标记语言）是一种标记语言，不是编程语言。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;添加 &lt;code&gt;.true&lt;/code&gt; 表示陈述正确，不添加 &lt;code&gt;.true&lt;/code&gt; 则表示错误&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;填空题：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; CSS 中，&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Flexbox&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.gap} 适合一维布局，&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Grid&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.gap} 适合二维布局。{.quiz .fill}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;gt; 常见错误：&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Float&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{.mistake}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSS 中，&lt;span&gt;Flexbox&lt;/span&gt; 适合一维布局，&lt;span&gt;Grid&lt;/span&gt; 适合二维布局。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;常见错误：&lt;span&gt;Float&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[答案]&lt;/code&gt; 标记正确答案（支持多个空）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[错误答案]&lt;/code&gt; 标记常见错误（首次答错时提示）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; 引用块内容为解析说明&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;数学公式（&lt;code&gt;enableMath&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;基于 KaTeX 渲染数学公式。需在文章 frontmatter 中设置 &lt;code&gt;math: true&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;行内公式：$E = mc^2$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;块级公式：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;$$&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;p&gt;行内公式：&lt;span&gt;&lt;span&gt;E=mc2E = mc^2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;块级公式：&lt;/p&gt;
&lt;span&gt;&lt;span&gt;&lt;span&gt;∑n=1∞1n2=π26\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;∞&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;π&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;em&gt;代码块增强（&lt;code&gt;enableCodeMeta&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;代码块支持额外的元数据标注：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;js title=&quot;hello.js&quot; url=&quot;https://example.com&quot; linkText=&quot;查看源码&quot; mark:1,3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; greeting &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;Hello&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;World&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;bash command:(&quot;$&quot;:1-3)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;元数据&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;title=&quot;文件名&quot;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示代码块标题&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;url=&quot;链接&quot;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;添加外部源码链接&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;linkText=&quot;文字&quot;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自定义链接文字（默认为 URL）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;mark:1,3&lt;/code&gt;&lt;/td&gt;&lt;td&gt;高亮指定行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;command:(&quot;$&quot;:1-3)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;标记 shell 命令行（显示 &lt;code&gt;$&lt;/code&gt; 前缀）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;示例效果：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hello.js&lt;/span&gt;&lt;span&gt;查看源码&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; greeting &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;Hello&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;World&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; astro&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Shoka 功能配置总览：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;所有 Shoka 兼容功能均可在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;content&lt;/code&gt; 部分独立开关：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  # Shoka 兼容功能（默认全部启用，设为 false 可关闭）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaContainers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;   # :::提醒块 ;;;标签卡 +++折叠块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaAttrs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;        # &lt;span&gt;text&lt;/span&gt; 属性语法&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaEffects&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;      # ++下划线++ ==高亮== ~下标~ ^上标^&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaSpoiler&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;      # !!隐藏文字!!&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaRuby&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;         # {文字^注音} 注音标注&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableShokaHexoTags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;     # {% links %} {% media %} Hexo 标签&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableMath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;              # $数学公式$ KaTeX 渲染&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableCodeMeta&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;          # 代码块增强 (title, mark, command)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableQuiz&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;              # 练习题交互功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  enableEncryptedBlock&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;    # :::encrypted{password=&quot;...&quot;} 加密内容块&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：完整的语法演示可参考 &lt;a href=&quot;/post/shoka-features&quot;&gt;Shoka 主题 Markdown 语法演示&lt;/a&gt; 文章。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;内容加密（&lt;code&gt;enableEncryptedBlock&lt;/code&gt;）：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;博客支持两种加密方式，满足不同的内容保护需求：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 加密块 —— 文章局部加密&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在文章中使用 &lt;code&gt;:::encrypted{password=&quot;...&quot;}&lt;/code&gt; 语法包裹需要加密的内容：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;这部分内容公开可见。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::encrypted{password=&quot;demo&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这段内容需要输入密码 &quot;demo&quot; 才能查看。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;支持完整的 Markdown 语法，包括代码块、列表、图片等。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这部分也是公开的。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;加密块适合在一篇文章中&lt;strong&gt;部分隐藏&lt;/strong&gt;敏感内容（如答案、剧透、私密笔记），其余内容正常展示。需要在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中启用 &lt;code&gt;enableEncryptedBlock: true&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 加密文章 —— 整篇文章加密&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在文章的 frontmatter 中添加 &lt;code&gt;password&lt;/code&gt; 字段即可加密整篇文章：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 我的私密文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 2026-01-01&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; mySecretPassword&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; 笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这里的所有内容都会被加密...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;加密文章会显示一个全屏的解锁界面，输入正确密码后才能查看内容。解锁后代码高亮、目录导航、Mermaid 图表等增强功能会自动重新初始化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安全模型说明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;加密功能使用 &lt;strong&gt;AES-256-GCM&lt;/strong&gt; 算法，安全模型如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;构建时加密&lt;/strong&gt;：密码仅在 &lt;code&gt;pnpm build&lt;/code&gt; 时用于加密，生成的 HTML 中&lt;strong&gt;不包含密码明文&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客户端解密&lt;/strong&gt;：读者在浏览器中输入密码后，通过 Web Crypto API 在本地解密，密码不会发送到任何服务器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;密钥派生&lt;/strong&gt;：使用 PBKDF2（100,000 次迭代）从密码派生加密密钥，提高暴力破解成本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;搜索排除&lt;/strong&gt;：加密内容自动添加 &lt;code&gt;data-pagefind-ignore&lt;/code&gt;，不会被 Pagefind 搜索索引&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：此加密设计的主要目的是&lt;strong&gt;防止搜索引擎和爬虫索引加密内容&lt;/strong&gt;，而非抵御针对性攻击。密文和盐值嵌入在公开的 HTML 中，理论上可被离线暴力破解。请使用强密码，不要用于保护高度敏感的信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;加密文章的特殊行为：&lt;/strong&gt;&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方面&lt;/th&gt;&lt;th&gt;行为&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;RSS 订阅&lt;/td&gt;&lt;td&gt;标题前加 🔒 前缀，内容替换为&quot;此文章已加密&quot;提示&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SEO / meta&lt;/td&gt;&lt;td&gt;description 使用 frontmatter 中的 &lt;code&gt;description&lt;/code&gt;（若未设置则显示通用加密提示）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;搜索索引&lt;/td&gt;&lt;td&gt;加密内容不会被 Pagefind 索引&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;目录导航&lt;/td&gt;&lt;td&gt;解锁前不显示，解锁后自动重建&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AI 摘要&lt;/td&gt;&lt;td&gt;基于加密前的原文生成（构建时可访问明文）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;其他增强：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动目录生成&lt;/li&gt;
&lt;li&gt;阅读时间计算&lt;/li&gt;
&lt;li&gt;外部链接自动添加 &lt;code&gt;target=&quot;_blank&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;多语言支持（i18n）&lt;a href=&quot;#多语言支持i18n&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;博客内置完整的国际化支持，可轻松添加多种语言。&lt;/p&gt;
&lt;h4&gt;基本配置&lt;a href=&quot;#基本配置-1&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;i18n&lt;/code&gt; 部分配置支持的语言：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;i18n&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  defaultLocale&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zh&lt;/span&gt;&lt;span&gt;        # 默认语言（URL 无前缀）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  locales&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zh&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 中文&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; en&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; English&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      # enabled: false     # 设为 false 可暂时禁用（保留内容但不生成路由）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;配置多语言后：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认语言的页面 URL 不带前缀（如 &lt;code&gt;/post/hello&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;其他语言自动加前缀（如 &lt;code&gt;/en/post/hello&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;导航栏（桌面端）和移动端抽屉中自动显示语言切换器&lt;/li&gt;
&lt;li&gt;每个语言各自生成独立的 RSS 订阅源（如 &lt;code&gt;/en/rss.xml&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;HTML &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 中自动输出 hreflang 标签，有利于 SEO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只配置了一种语言，i18n 功能不会激活，不会产生额外的路由或 UI 元素。&lt;/p&gt;
&lt;h4&gt;翻译体系&lt;a href=&quot;#翻译体系&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;i18n 系统采用两层翻译架构：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. UI 字符串（TypeScript）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;界面上的按钮文字、提示信息等 UI 文本通过 TypeScript 翻译字典管理，位于 &lt;code&gt;src/i18n/translations/&lt;/code&gt; 目录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zh.ts&lt;/code&gt;：默认语言（中文），包含所有翻译 key（约 170 个），是唯一的 source-of-truth&lt;/li&gt;
&lt;li&gt;&lt;code&gt;en.ts&lt;/code&gt;：英文翻译，只需提供需要覆盖的 key，未提供的自动回退到中文&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;翻译字符串支持 &lt;code&gt;{param}&lt;/code&gt; 占位符插值：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// zh.ts&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&apos;post.totalPosts&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;共 {count} 篇文章&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// en.ts&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&apos;post.totalPosts&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;{count} posts&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. 内容字符串（YAML）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;分类名、系列名、精选分类描述等内容级文本通过 &lt;code&gt;config/i18n-content.yaml&lt;/code&gt; 管理。默认语言的值直接读取 &lt;code&gt;config/site.yaml&lt;/code&gt;，此文件仅存放非默认语言的翻译：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;en&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  categories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    life&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Life&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    note&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Notes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Tools&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  series&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    weekly&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; My Weekly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      fullName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; My Tech Weekly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  featuredCategories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    life&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Life&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Life journals and essays&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;categories&lt;/code&gt; 的 key 是分类的 URL slug（对应 &lt;code&gt;config/site.yaml&lt;/code&gt; 中 &lt;code&gt;categoryMap&lt;/code&gt; 的值），&lt;code&gt;series&lt;/code&gt; 的 key 是系列的 slug。&lt;/p&gt;
&lt;h4&gt;添加翻译文章&lt;a href=&quot;#添加翻译文章&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;将翻译文章放在 &lt;code&gt;src/content/blog/&amp;lt;locale&amp;gt;/&lt;/code&gt; 目录下，保持与默认语言相同的路径结构：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;src/content/blog/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── life/hello-world.md            # 默认语言 (zh)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── tools/getting-started.md       # 默认语言 (zh)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── en/life/hello-world.md         # 英文翻译&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└── en/tools/getting-started.md    # 英文翻译&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;回退机制&lt;/strong&gt;：当用户切换到非默认语言时，系统会显示该语言已有的翻译文章，对于尚未翻译的文章则自动回退显示默认语言内容，并在文章顶部标注提示信息。&lt;/p&gt;
&lt;h4&gt;添加新语言&lt;a href=&quot;#添加新语言&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;以添加日语（ja）为例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;i18n.locales&lt;/code&gt; 中添加新语言：&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;i18n&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  locales&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zh&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 中文&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; en&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; English&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ja&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      label&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 日本語&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;创建 UI 翻译文件 &lt;code&gt;src/i18n/translations/ja.ts&lt;/code&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; UIStrings &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &apos;../types&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; const&lt;/span&gt;&lt;span&gt; uiStrings&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; UIStrings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &apos;nav.home&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &apos;ホーム&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &apos;common.search&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &apos;検索&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  // ... 按需翻译，未提供的 key 自动回退到中文&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;src/i18n/translations/index.ts&lt;/code&gt; 中注册：&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; uiStrings &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; ja &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &apos;./ja&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; const&lt;/span&gt;&lt;span&gt; translations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Record&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; DefaultUIStrings &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; UIStrings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  zh&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  en&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ja&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; // 新增&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;4.（可选）在 &lt;code&gt;config/i18n-content.yaml&lt;/code&gt; 中添加日语的内容翻译。&lt;/p&gt;
&lt;p&gt;5.（可选）在 &lt;code&gt;src/content/blog/ja/&lt;/code&gt; 目录下添加日语文章。&lt;/p&gt;
&lt;h4&gt;在组件中使用翻译&lt;a href=&quot;#在组件中使用翻译&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Astro 组件&lt;/strong&gt;（&lt;code&gt;.astro&lt;/code&gt; 文件）中：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; getLocaleFromUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; localizedPath &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &apos;@/i18n&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; locale &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getLocaleFromUrl&lt;/span&gt;&lt;span&gt;(Astro&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pathname)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;(locale&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &apos;post.totalPosts&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; count&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 10&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;localizedPath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/archives&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; locale)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;归档&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;React 组件&lt;/strong&gt;（&lt;code&gt;.tsx&lt;/code&gt; 文件）中：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; useTranslation &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &apos;@hooks/useTranslation&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; MyComponent&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; locale&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; useTranslation&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;common.search&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;RSS 订阅&lt;a href=&quot;#rss-订阅&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;访问 &lt;code&gt;/rss.xml&lt;/code&gt; 获取 RSS feed。启用多语言时，每个语言有独立的 RSS 源（如 &lt;code&gt;/en/rss.xml&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;包含内容：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最新文章列表&lt;/li&gt;
&lt;li&gt;文章摘要&lt;/li&gt;
&lt;li&gt;发布日期&lt;/li&gt;
&lt;li&gt;文章链接&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;数据统计&lt;a href=&quot;#数据统计&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;集成 Umami 分析（可选）。&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中配置：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;analytics&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  umami&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; your-umami-id&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    endpoint&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://stats.example.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # 页面访问量展示（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    statistics_display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      token&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; your-umami-share-token&lt;/span&gt;&lt;span&gt;  # Umami 分享链接令牌（只读，可安全暴露到客户端）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      article_page_views&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;        # 在文章卡片和详情页显示访问量&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      footer_site_stats&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;         # 在页脚显示全站访问量&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;获取 Umami Share Token&lt;a href=&quot;#获取-umami-share-token&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;statistics_display.token&lt;/code&gt; 是 Umami 的&lt;strong&gt;分享链接令牌&lt;/strong&gt;，用于通过公开 API 读取统计数据（只读权限，可安全暴露到前端）。获取步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;登录你的 Umami 后台&lt;/li&gt;
&lt;li&gt;进入 &lt;strong&gt;Settings → Websites&lt;/strong&gt;，选择你的站点&lt;/li&gt;
&lt;li&gt;点击右侧 &lt;strong&gt;Share URL&lt;/strong&gt; 按钮（分享图标）&lt;/li&gt;
&lt;li&gt;开启 &lt;strong&gt;Enable share URL&lt;/strong&gt; 开关，此时会生成一个分享链接，形如：&lt;code&gt;https://stats.example.com/share/xxxxxxxx/site-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;链接中 &lt;code&gt;/share/&lt;/code&gt; 后面的那段字符串（如 &lt;code&gt;xxxxxxxx&lt;/code&gt;）即为 share token，将其填入 &lt;code&gt;statistics_display.token&lt;/code&gt; 即可&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;注：Share token 仅提供只读权限，无法通过它修改任何数据或配置，因此可以安全地暴露到客户端代码中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;开发指南&lt;a href=&quot;#开发指南&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;目录结构&lt;a href=&quot;#目录结构&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;astro-koharu/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── src/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── components/      # 组件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── common/      # 通用组件（错误边界等）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── ui/          # UI 组件（按钮、卡片等）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── layout/      # 布局组件（头部、侧边栏等）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── post/        # 文章相关组件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── category/    # 分类组件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   └── theme/       # 主题切换&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── content/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   └── blog/        # 博客文章（Markdown）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │       └── en/      # 英文翻译文章（按 locale 子目录组织）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── i18n/            # 国际化模块&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── config.ts    # locale 配置（读取 site.yaml）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── utils.ts     # 翻译函数、URL 工具&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   ├── content.ts   # 内容翻译加载（读取 i18n-content.yaml）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   └── translations/  # UI 翻译字典（zh.ts, en.ts）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── layouts/         # 页面布局模板&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── pages/           # 页面路由&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   │   └── [lang]/      # 非默认语言的镜像路由&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── lib/             # 工具函数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── hooks/           # React hooks&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── constants/       # 常量配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── store/           # 全局状态（nanostores）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── scripts/         # 构建脚本&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── styles/          # 全局样式&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── types/           # TypeScript 类型定义&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── public/              # 静态资源&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── img/             # 图片资源&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── config/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   ├── site.yaml        # 站点配置（含分类映射、i18n 配置）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── i18n-content.yaml  # 内容级翻译（分类名、系列名等）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── astro.config.mjs     # Astro 配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── tailwind.config.mjs  # Tailwind 配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└── tsconfig.json        # TypeScript 配置&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;路径别名&lt;a href=&quot;#路径别名&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;项目配置了以下路径别名（在 &lt;code&gt;tsconfig.json&lt;/code&gt; 中）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; something &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &quot;@/xxx&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // → src/xxx&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Component &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &quot;@components/xxx&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // → src/components/xxx&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; util &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &quot;@lib/xxx&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // → src/lib/xxx&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &quot;@constants/xxx&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // → src/constants/xxx&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// ... 更多别名见 tsconfig.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;常用命令&lt;a href=&quot;#常用命令&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 开发&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;span&gt;              # 启动开发服务器（默认 localhost:4321）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 构建&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;span&gt;            # 构建生产版本&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; preview&lt;/span&gt;&lt;span&gt;          # 预览生产构建&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 代码质量&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; lint&lt;/span&gt;&lt;span&gt;             # 运行 ESLint&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; lint-md&lt;/span&gt;&lt;span&gt;          # 检查 Markdown 文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; lint-md:fix&lt;/span&gt;&lt;span&gt;      # 自动修复 Markdown 问题&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; knip&lt;/span&gt;&lt;span&gt;             # 查找未使用的文件和依赖&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# Koharu CLI&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt;                   # 交互式主菜单&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt;               # 新建内容（交互式选择）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;          # 新建博客文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; friend&lt;/span&gt;&lt;span&gt;        # 新建友情链接&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; backup&lt;/span&gt;&lt;span&gt;            # 备份博客内容（--full 完整备份）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; restore&lt;/span&gt;&lt;span&gt;           # 还原备份（--latest, --dry-run）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; migrate&lt;/span&gt;&lt;span&gt;           # 迁移旧内容链接（--dry-run）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt;            # 更新主题（--check, --clean, --rebase, --tag, --dry-run 等）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt;          # 生成内容资产（交互式选择）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; lqips&lt;/span&gt;&lt;span&gt;    # 生成 LQIP 占位符&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; similarities&lt;/span&gt;&lt;span&gt;  # 生成相似度向量&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; summaries&lt;/span&gt;&lt;span&gt;     # 生成 AI 摘要&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; all&lt;/span&gt;&lt;span&gt;      # 生成全部资产&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; clean&lt;/span&gt;&lt;span&gt;             # 清理旧备份（--keep N）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span&gt;              # 查看所有备份&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 工具&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; change&lt;/span&gt;&lt;span&gt;           # 生成 CHANGELOG.md（基于 git-cliff）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Docker 部署&lt;a href=&quot;#docker-部署&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;astro-koharu 支持通过 Docker 进行容器化部署，适合需要自托管的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;快速开始：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 1. 编辑 config/site.yaml，配置 comment.remark42 和 analytics.umami 部分&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 2. 构建并启动&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; compose&lt;/span&gt;&lt;span&gt; -f&lt;/span&gt;&lt;span&gt; docker/docker-compose.yml&lt;/span&gt;&lt;span&gt; up&lt;/span&gt;&lt;span&gt; -d&lt;/span&gt;&lt;span&gt; --build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 3. 访问&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt; http://localhost:4321&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;目录结构：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;docker/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── Dockerfile           # 多阶段构建配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── docker-compose.yml   # 编排配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├── nginx/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;│   └── default.conf     # Nginx 静态服务配置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└── rebuild.sh           # 便捷重建脚本&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;关于生成脚本：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以下脚本&lt;strong&gt;需要在本地运行&lt;/strong&gt;，不能在 Docker 构建时执行：&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;脚本&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pnpm generate:lqips&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用 &lt;code&gt;sharp&lt;/code&gt; 原生模块处理图片&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pnpm generate:similarities&lt;/code&gt;&lt;/td&gt;&lt;td&gt;需下载 500MB+ 的 ML 模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pnpm generate:summaries&lt;/code&gt;&lt;/td&gt;&lt;td&gt;需连接本地 LLM 服务器&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;推荐工作流：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 本地开发：添加新图片或文章后&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; generate:all&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 提交生成的数据文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; add&lt;/span&gt;&lt;span&gt; src/assets/&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.json&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; commit&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; &quot;chore: update generated assets&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 重建 Docker 容器&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;./docker/rebuild.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;使用 rebuild.sh：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; docker&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;./rebuild.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;该脚本会：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查环境变量文件&lt;/li&gt;
&lt;li&gt;停止现有容器&lt;/li&gt;
&lt;li&gt;重新构建并启动&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;评论与统计配置：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中配置评论系统和统计：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 评论系统（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  remark42&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://your-remark-server.com/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    siteId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; your-site-id&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 统计系统（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;analytics&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  umami&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; your-umami-id&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    endpoint&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://your-umami-server.com&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # 页面访问量展示（可选，需要 share token）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # statistics_display:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    #   token: your-umami-share-token&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    #   article_page_views: true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    #   footer_site_stats: true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Docker 端口可在 &lt;code&gt;.env&lt;/code&gt; 中配置 &lt;code&gt;BLOG_PORT=4321&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;生成的 JSON 文件必须提交到 git，Docker 构建时会直接使用&lt;/li&gt;
&lt;li&gt;如果忘记运行生成脚本，相关功能（LQIP 占位符、相关文章推荐等）将不可用&lt;/li&gt;
&lt;li&gt;Docker 镜像基于 nginx&lt;div&gt;&lt;/div&gt;，仅包含静态文件，无需 Node.js 运行时&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Koharu CLI&lt;a href=&quot;#koharu-cli&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;博客自带交互式命令行工具，提供备份还原、主题更新、内容生成、新建内容等功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;启动方式：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt;              # 交互式主菜单&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;新建内容&lt;a href=&quot;#新建内容&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;使用 CLI 快速创建博客文章和友链：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 交互式选择创建类型（文章或友链）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 或直接指定类型&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;     # 新建博客文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; friend&lt;/span&gt;&lt;span&gt;   # 新建友情链接&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;新建博客文章功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;交互式输入文章信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标题&lt;/strong&gt; - 文章标题（必填）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slug&lt;/strong&gt; - 自定义 URL（可选，默认根据标题自动生成拼音）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;描述&lt;/strong&gt; - 文章摘要（可选）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分类&lt;/strong&gt; - 从已有分类中选择（必选）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标签&lt;/strong&gt; - 添加标签，逗号分隔（可选）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;草稿&lt;/strong&gt; - 是否保存为草稿（默认否）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自动生成 frontmatter（包含 title、date、categories、tags 等）&lt;/li&gt;
&lt;li&gt;检查文件是否已存在，避免覆盖&lt;/li&gt;
&lt;li&gt;文章保存在对应的分类目录下（如 &lt;code&gt;src/content/blog/note/front-end/my-post.md&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;新建友情链接功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;交互式输入友链信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;站点名称&lt;/strong&gt; - 友站的名称（必填）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;站点 URL&lt;/strong&gt; - 友站的链接（必填，需完整 URL）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;站长昵称&lt;/strong&gt; - 友站站长的昵称（必填）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;站点描述&lt;/strong&gt; - 友站的简介（必填）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;头像 URL&lt;/strong&gt; - 友站的头像链接（必填）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主题色&lt;/strong&gt; - 友站的主题色（可选，可选择预设颜色或自定义十六进制）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自动追加到 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;friends.data&lt;/code&gt; 数组&lt;/li&gt;
&lt;li&gt;保留 YAML 文件的格式和注释&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 创建新文章&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 按提示输入：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 标题: React Hooks 使用指南&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# Slug: (自动生成 react-hooks-shi-yong-zhi-nan，可修改或清空)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 描述: React Hooks 的完整使用教程&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 分类: 选择&quot;笔记 → 前端&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 标签: React, Hooks, 教程&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 草稿: 否&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 创建友链&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; friend&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 按提示输入友站信息&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;备份与还原&lt;a href=&quot;#备份与还原&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;更新主题前，建议先备份你的个人内容：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 基础备份（博客文章、配置、头像、.env）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; backup&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 完整备份（包含所有图片和生成的资产）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; backup&lt;/span&gt;&lt;span&gt; --full&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 查看所有备份&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 还原最新备份&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; restore&lt;/span&gt;&lt;span&gt; --latest&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 预览将要还原的文件（不实际还原）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; restore&lt;/span&gt;&lt;span&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 强制还原（覆盖已存在的文件）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; restore&lt;/span&gt;&lt;span&gt; --force&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 清理旧备份（保留最近 5 个）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; clean&lt;/span&gt;&lt;span&gt; --keep&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;备份文件存储在 &lt;code&gt;backups/&lt;/code&gt; 目录，格式为 &lt;code&gt;backup-YYYY-MM-DD-HHMMSS.tar.gz&lt;/code&gt;。&lt;/p&gt;
&lt;h4&gt;更新主题&lt;a href=&quot;#更新主题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;使用 CLI 自动更新主题，完成备份 → 拉取 → 合并 → 安装依赖的完整流程：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 完整更新流程（默认会先备份）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 仅检查是否有更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --check&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 跳过备份直接更新&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --skip-backup&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 强制模式（跳过工作区检查和确认）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --force&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 更新到指定版本（如 v2.1.0）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --tag&lt;/span&gt;&lt;span&gt; v2.1.0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# clean 模式（零冲突，强制备份，适合首次迁移或冲突较多时）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --clean&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# rebase 模式（重写历史，强制备份，适合熟悉 git 的用户）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --rebase&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 预览操作（不实际执行，可配合 --clean 或 --rebase 使用）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --dry-run&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;选项说明：&lt;/strong&gt;&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--check&lt;/code&gt;&lt;/td&gt;&lt;td&gt;仅检查更新，不执行合并&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--skip-backup&lt;/code&gt;&lt;/td&gt;&lt;td&gt;跳过备份步骤（clean/rebase 模式下无效，强制备份）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;跳过工作区脏检查和确认提示（不影响合并方式）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--tag&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定目标版本（如 &lt;code&gt;v2.1.0&lt;/code&gt;），支持升级和降级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--clean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Clean 模式，零冲突更新（替换主题文件 + 还原用户内容）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rebase&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Rebase 模式，重写历史完全同步上游（强制要求备份）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/td&gt;&lt;td&gt;预览操作，不实际执行&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;三种更新模式：&lt;/strong&gt;&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模式&lt;/th&gt;&lt;th&gt;命令&lt;/th&gt;&lt;th&gt;适合场景&lt;/th&gt;&lt;th&gt;备份&lt;/th&gt;&lt;th&gt;冲突处理&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;默认&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;pnpm koharu update&lt;/code&gt;&lt;/td&gt;&lt;td&gt;日常更新&lt;/td&gt;&lt;td&gt;可选&lt;/td&gt;&lt;td&gt;用户内容自动保留，主题冲突手动解决&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Clean&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;--clean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;首次迁移、冲突较多&lt;/td&gt;&lt;td&gt;强制&lt;/td&gt;&lt;td&gt;零冲突&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Rebase&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;--rebase&lt;/code&gt;&lt;/td&gt;&lt;td&gt;熟悉 git 的用户&lt;/td&gt;&lt;td&gt;强制&lt;/td&gt;&lt;td&gt;需手动解决&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;默认模式（Merge）：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;git merge --no-ff&lt;/code&gt; 合并上游更新，保留 merge-base 信息，让后续更新的冲突更少。&lt;/p&gt;
&lt;p&gt;智能冲突处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用户内容文件&lt;/strong&gt;（博客文章、配置、独立页面、图片等）发生冲突时，自动保留本地版本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主题文件&lt;/strong&gt;（组件、脚本、样式等）发生冲突时，需要手动解决&lt;/li&gt;
&lt;li&gt;如果所有冲突都是用户内容 → 整个更新自动完成，零手动操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📝 &lt;strong&gt;提交格式：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;chore: merge upstream theme v2.3.2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Clean 模式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用上游最新版本&lt;strong&gt;替换所有主题文件&lt;/strong&gt;，然后从备份&lt;strong&gt;还原用户内容&lt;/strong&gt;，实现零冲突更新。&lt;/p&gt;
&lt;p&gt;执行流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;强制备份你的博客内容&lt;/li&gt;
&lt;li&gt;创建 merge commit 记录版本关系&lt;/li&gt;
&lt;li&gt;用上游文件覆盖本地所有文件&lt;/li&gt;
&lt;li&gt;从刚才的备份还原用户内容（博客文章、配置、独立页面、图片、.env）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你对&lt;strong&gt;主题文件&lt;/strong&gt;的自定义修改（如改了某个组件、布局、样式）&lt;strong&gt;不会被保留&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;备份范围包含：&lt;code&gt;src/content/blog/&lt;/code&gt;、&lt;code&gt;config/site.yaml&lt;/code&gt;、&lt;code&gt;src/pages/*.md&lt;/code&gt;、&lt;code&gt;public/img/&lt;/code&gt;、&lt;code&gt;.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;--full&lt;/code&gt; 备份选项可额外保留 favicon、LQIP、相似度、AI 摘要等生成资产&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;适用场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首次从旧版本迁移，历史冲突太多无法正常 merge&lt;/li&gt;
&lt;li&gt;没有自定义主题文件，只写了博客内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Rebase 模式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;执行 &lt;code&gt;git rebase upstream/main&lt;/code&gt;（或指定的 tag），将本地提交重放到上游之上。适合熟悉 git 操作的用户。&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：Rebase 模式会重写 Git 历史，请确保已备份重要内容。CLI 会强制要求备份（忽略 &lt;code&gt;--skip-backup&lt;/code&gt; 和 &lt;code&gt;--force&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用 &lt;code&gt;--dry-run&lt;/code&gt; 预览：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所有模式都支持 &lt;code&gt;--dry-run&lt;/code&gt; 预览操作效果：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --dry-run&lt;/span&gt;&lt;span&gt;          # 预览默认 merge&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --clean&lt;/span&gt;&lt;span&gt; --dry-run&lt;/span&gt;&lt;span&gt;  # 预览 clean 模式&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; --rebase&lt;/span&gt;&lt;span&gt; --dry-run&lt;/span&gt;&lt;span&gt; # 预览 rebase 操作&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 给熟悉 git 的用户：&lt;/strong&gt; CLI 更新命令是对 git 操作的封装便利工具。如果你对 git 比较熟悉，建议直接使用 &lt;code&gt;git fetch upstream &amp;amp;&amp;amp; git rebase upstream/main&lt;/code&gt; 手动操作，这样能更精确地控制合并过程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;更新流程说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;检查 Git 状态&lt;/strong&gt; — 确保工作区干净（无未提交的更改）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;备份当前内容&lt;/strong&gt; — 可选（clean/rebase 模式强制备份）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设置 upstream&lt;/strong&gt; — 自动添加 &lt;code&gt;upstream&lt;/code&gt; remote（如果不存在）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;获取最新代码&lt;/strong&gt; — &lt;code&gt;git fetch upstream&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显示更新预览&lt;/strong&gt; — 列出新增的提交和更新日志&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行更新&lt;/strong&gt; — 根据所选模式执行 merge / clean / rebase&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装依赖&lt;/strong&gt; — &lt;code&gt;pnpm install&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;处理合并冲突：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认 merge 模式下，用户内容冲突会被自动解决（保留本地版本）。如果主题文件仍有冲突，CLI 会显示冲突文件列表。你可以：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择&quot;中止合并&quot;恢复到更新前状态&lt;/li&gt;
&lt;li&gt;手动解决冲突后运行 &lt;code&gt;git add . &amp;amp;&amp;amp; git commit&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 如果选择手动解决冲突&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;                    # 查看冲突文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 编辑冲突文件，保留需要的内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; add&lt;/span&gt;&lt;span&gt; .&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; commit&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; &quot;merge: resolve conflicts&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;更新时使用的 Git 命令：&lt;/strong&gt;&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作&lt;/th&gt;&lt;th&gt;命令&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;检查工作区状态&lt;/td&gt;&lt;td&gt;&lt;code&gt;git status --porcelain&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;获取当前分支&lt;/td&gt;&lt;td&gt;&lt;code&gt;git rev-parse --abbrev-ref HEAD&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;检查 upstream&lt;/td&gt;&lt;td&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;添加 upstream&lt;/td&gt;&lt;td&gt;&lt;code&gt;git remote add upstream https://github.com/cosZone/astro-koharu.git&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;获取更新&lt;/td&gt;&lt;td&gt;&lt;code&gt;git fetch upstream&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查看新提交数量&lt;/td&gt;&lt;td&gt;&lt;code&gt;git rev-list --left-right --count HEAD...upstream/main&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查看新提交列表&lt;/td&gt;&lt;td&gt;&lt;code&gt;git log HEAD..upstream/main --pretty=format:&quot;%h | %s | %ar | %an&quot;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;默认合并&lt;/td&gt;&lt;td&gt;&lt;code&gt;git merge --no-ff upstream/main&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Clean 合并&lt;/td&gt;&lt;td&gt;&lt;code&gt;git merge -s ours upstream/main&lt;/code&gt; + &lt;code&gt;git checkout upstream/main -- .&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rebase&lt;/td&gt;&lt;td&gt;&lt;code&gt;git rebase upstream/main&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中止合并&lt;/td&gt;&lt;td&gt;&lt;code&gt;git merge --abort&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;内容生成&lt;a href=&quot;#内容生成&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;生成各种内容资产：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 交互式选择生成类型&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 或直接指定类型&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; lqips&lt;/span&gt;&lt;span&gt;        # 生成 LQIP 图片占位符&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; similarities&lt;/span&gt;&lt;span&gt; # 生成语义相似度向量&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; summaries&lt;/span&gt;&lt;span&gt;    # 生成 AI 摘要&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; koharu&lt;/span&gt;&lt;span&gt; generate&lt;/span&gt;&lt;span&gt; all&lt;/span&gt;&lt;span&gt;          # 生成全部&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;如何添加新页面&lt;a href=&quot;#如何添加新页面&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;src/pages/&lt;/code&gt; 目录创建 &lt;code&gt;.astro&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;Astro 使用文件系统路由，文件路径即 URL 路径&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;src/pages/about.astro       → /about&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;src/pages/tags/[tag].astro  → /tags/:tag（动态路由）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;如何自定义样式&lt;a href=&quot;#如何自定义样式&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;全局样式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;src/styles/index.css&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;组件样式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用 Tailwind CSS 工具类或 Astro 的 &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; 标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tailwind 配置：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;tailwind.config.ts&lt;/code&gt; 自定义主题、颜色、字体等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主题变量：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;src/styles/index.css&lt;/code&gt; 中定义的 CSS 变量：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --primary-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; #&lt;/span&gt;&lt;span&gt;ff6b6b&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /* ... 更多变量 */&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;动画系统&lt;a href=&quot;#动画系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 CSS 动画以及 &lt;a href=&quot;https://motion.dev/&quot;&gt;Motion&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;动画配置：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;src/constants/anim/&lt;/code&gt; 目录中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spring.ts&lt;/code&gt; - 弹簧动画配置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;variants.ts&lt;/code&gt; - 动画变体定义&lt;/li&gt;
&lt;li&gt;&lt;code&gt;props.ts&lt;/code&gt; - 可复用的动画属性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; motion &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &quot;motion/react&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt; fadeIn &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt; &quot;@constants/anim/variants&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;motion.div&lt;/span&gt;&lt;span&gt; variants&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fadeIn&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; initial&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;hidden&quot;&lt;/span&gt;&lt;span&gt; animate&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;visible&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  内容&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;motion.div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;与 Hexo/Shoka 主题的对比&lt;a href=&quot;#与-hexoshoka-主题的对比&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;保留的特性&lt;a href=&quot;#保留的特性&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;✅ 分类和标签系统&lt;/li&gt;
&lt;li&gt;✅ 文章置顶功能&lt;/li&gt;
&lt;li&gt;✅ 深色/浅色主题切换&lt;/li&gt;
&lt;li&gt;✅ 响应式设计&lt;/li&gt;
&lt;li&gt;✅ 友链页面&lt;/li&gt;
&lt;li&gt;✅ 归档页面&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;改进之处&lt;a href=&quot;#改进之处&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;性能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚡ 静态站点生成 (SSG)，加载速度更快&lt;/li&gt;
&lt;li&gt;⚡ 按需加载 JavaScript&lt;/li&gt;
&lt;li&gt;⚡ 图片优化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;开发体验：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🛠️ TypeScript 类型安全&lt;/li&gt;
&lt;li&gt;🛠️ 热模块替换 (HMR)&lt;/li&gt;
&lt;li&gt;🛠️ 现代化的开发工具链&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;功能增强：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔍 更强大的全站搜索（Pagefind）&lt;/li&gt;
&lt;li&gt;📝 内容集合 (Content Collections) 类型安全&lt;/li&gt;
&lt;li&gt;🎨 Tailwind CSS 4.x 样式系统&lt;/li&gt;
&lt;li&gt;🌊 View Transitions API 页面过渡&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;技术栈差异&lt;a href=&quot;#技术栈差异&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方面&lt;/th&gt;&lt;th&gt;Hexo + Shoka&lt;/th&gt;&lt;th&gt;astro-koharu&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;框架&lt;/td&gt;&lt;td&gt;Hexo (Node.js)&lt;/td&gt;&lt;td&gt;Astro 7.x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模板引擎&lt;/td&gt;&lt;td&gt;EJS/Pug&lt;/td&gt;&lt;td&gt;Astro + React&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;样式&lt;/td&gt;&lt;td&gt;Stylus&lt;/td&gt;&lt;td&gt;Tailwind CSS 4.x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;构建工具&lt;/td&gt;&lt;td&gt;Webpack&lt;/td&gt;&lt;td&gt;Vite&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;类型检查&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;TypeScript&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;内容管理&lt;/td&gt;&lt;td&gt;文件系统&lt;/td&gt;&lt;td&gt;Content Collections&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;常见问题&lt;a href=&quot;#常见问题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;如何修改封面图片？&lt;a href=&quot;#如何修改封面图片&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在文章 frontmatter 中设置 &lt;code&gt;cover&lt;/code&gt; 字段：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cover&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /img/cover/1.webp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;图片放在 &lt;code&gt;public/img/&lt;/code&gt; 目录。如果不设置，会使用默认封面。&lt;/p&gt;
&lt;h3&gt;如何自定义域名？&lt;a href=&quot;#如何自定义域名&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;部署到 Vercel 后，在 Vercel 项目设置中添加自定义域名，然后更新 &lt;code&gt;config/site.yaml&lt;/code&gt; 中的 &lt;code&gt;site.url&lt;/code&gt; 字段。&lt;/p&gt;
&lt;h3&gt;如何添加评论功能？&lt;a href=&quot;#如何添加评论功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;项目支持四种评论系统：&lt;strong&gt;Waline&lt;/strong&gt;、&lt;strong&gt;Giscus&lt;/strong&gt;、&lt;strong&gt;Remark42&lt;/strong&gt;、&lt;strong&gt;Twikoo&lt;/strong&gt;。在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;comment&lt;/code&gt; 配置块中选择使用的提供商。&lt;/p&gt;
&lt;h4&gt;Waline（推荐）&lt;a href=&quot;#waline推荐&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://waline.js.org/&quot;&gt;Waline&lt;/a&gt; 是一个简洁、安全的评论系统，支持多种部署方式（Vercel、Railway、Zeabur 等）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🚀 部署简单，支持多种平台一键部署&lt;/li&gt;
&lt;li&gt;💬 支持 Markdown、表情、@提及、邮件通知&lt;/li&gt;
&lt;li&gt;📊 内置浏览量统计、评论管理后台&lt;/li&gt;
&lt;li&gt;🔐 支持多种登录方式（匿名、社交账号）&lt;/li&gt;
&lt;li&gt;🛡️ 内置反垃圾评论、敏感词过滤&lt;/li&gt;
&lt;li&gt;🎨 自动跟随站点深色/浅色主题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;前置要求：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;部署 Waline 服务端（&lt;a href=&quot;https://waline.js.org/guide/deploy/&quot;&gt;部署指南&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;获取服务端 URL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;配置示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  provider&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; waline&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  waline&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    serverURL&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://your-waline-server.vercel.app&lt;/span&gt;&lt;span&gt; # Waline 服务端地址（必填）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lang&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zh-CN&lt;/span&gt;&lt;span&gt; # 语言&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    dark&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; html.dark&lt;/span&gt;&lt;span&gt; # 暗黑模式 CSS 选择器&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    meta&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 评论者信息字段&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; nick&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; mail&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; link&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    requiredMeta&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 必填字段&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span&gt; nick&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    login&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; enable&lt;/span&gt;&lt;span&gt; # 登录模式 (&apos;enable&apos; | &apos;disable&apos; | &apos;force&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    wordLimit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; # 评论字数限制 (0 = 无限制)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    pageSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 10&lt;/span&gt;&lt;span&gt; # 每页评论数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    imageUploader&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 图片上传功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    highlighter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt; # 代码高亮&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    texRenderer&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # LaTeX 渲染&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    search&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 搜索功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    reaction&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 文章反应功能&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # recaptchaV3Key: &apos;&apos; # reCAPTCHA v3 Key (可选)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # turnstileKey: &apos;&apos; # Cloudflare Turnstile Key (可选)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参数说明：&lt;/strong&gt;&lt;/p&gt;





































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;默认值&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;serverURL&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;必填&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Waline 服务端地址&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;zh-CN&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;界面语言（支持 zh-CN, en, jp 等）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;dark&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;html.dark&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;暗黑模式 CSS 选择器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string[]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;[&apos;nick&apos;,&apos;mail&apos;,&apos;link&apos;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;评论者信息字段&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;requiredMeta&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string[]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;[&apos;nick&apos;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;必填字段&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;login&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;enable&apos;&lt;/code&gt; | &lt;code&gt;&apos;disable&apos;&lt;/code&gt; | &lt;code&gt;&apos;force&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;enable&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;登录模式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wordLimit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&lt;td&gt;评论字数限制（0 = 无限制）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pageSize&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&lt;td&gt;每页评论数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;imageUploader&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用图片上传&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;highlighter&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用代码高亮&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;texRenderer&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用 LaTeX 渲染&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;search&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用搜索功能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;reaction&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用文章反应功能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;recaptchaV3Key&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;reCAPTCHA v3 Key（可选，防垃圾评论）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;turnstileKey&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;Cloudflare Turnstile Key（可选）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;部署 Waline 服务端：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;推荐使用 Vercel 一键部署：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://waline.js.org/guide/get-started/&quot;&gt;Waline 快速开始&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;点击 &quot;Deploy with Vercel&quot; 按钮&lt;/li&gt;
&lt;li&gt;登录 Vercel，授权 GitHub 仓库&lt;/li&gt;
&lt;li&gt;配置环境变量（数据库连接、管理员邮箱等）&lt;/li&gt;
&lt;li&gt;部署完成后获取服务端 URL（如 &lt;code&gt;https://your-waline.vercel.app&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;主题自动切换：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Waline 组件已实现主题自动切换，通过 &lt;code&gt;dark&lt;/code&gt; 参数（默认 &lt;code&gt;html.dark&lt;/code&gt;）自动跟随站点深色/浅色模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考链接：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://waline.js.org/&quot;&gt;Waline 官网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://waline.js.org/guide/deploy/&quot;&gt;部署指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://waline.js.org/reference/client/&quot;&gt;配置参数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Remark42&lt;a href=&quot;#remark42&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://remark42.com/&quot;&gt;Remark42&lt;/a&gt; 是一个轻量级的自托管评论系统，隐私友好，无需第三方服务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔒 自托管，完全掌控数据&lt;/li&gt;
&lt;li&gt;🚫 无广告、无追踪&lt;/li&gt;
&lt;li&gt;💾 支持多种存储后端（BoltDB、Memory）&lt;/li&gt;
&lt;li&gt;🔐 支持多种社交登录（GitHub、Google、Twitter 等）&lt;/li&gt;
&lt;li&gt;📧 邮件通知、评论审核&lt;/li&gt;
&lt;li&gt;🎨 自动跟随站点深色/浅色主题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;前置要求：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;部署 Remark42 服务端（&lt;a href=&quot;https://remark42.com/docs/getting-started/installation/&quot;&gt;部署指南&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;配置站点 ID 和域名&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;配置示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  provider&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; remark42&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  remark42&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; https://comment.example.com/&lt;/span&gt;&lt;span&gt; # Remark42 服务器地址（必填）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    siteId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; your-site-id&lt;/span&gt;&lt;span&gt; # 站点 ID（必填）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参数说明：&lt;/strong&gt;&lt;/p&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Remark42 服务器地址（&lt;strong&gt;必填&lt;/strong&gt;，需带 &lt;code&gt;http://&lt;/code&gt; 或 &lt;code&gt;https://&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;siteId&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;站点 ID（&lt;strong&gt;必填&lt;/strong&gt;，在 Remark42 服务端配置中定义）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;部署 Remark42 服务端：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;推荐使用 Docker 部署：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; -d&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --name&lt;/span&gt;&lt;span&gt; remark42&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -p&lt;/span&gt;&lt;span&gt; 8080:8080&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -e&lt;/span&gt;&lt;span&gt; REMARK_URL=https://comment.example.com&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -e&lt;/span&gt;&lt;span&gt; SECRET=your-secret-key&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -e&lt;/span&gt;&lt;span&gt; SITE=your-site-id&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -e&lt;/span&gt;&lt;span&gt; AUTH_GITHUB_CID=your-github-client-id&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -e&lt;/span&gt;&lt;span&gt; AUTH_GITHUB_CSEC=your-github-client-secret&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -v&lt;/span&gt;&lt;span&gt; /path/to/data:/srv/var&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  umputun/remark42:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;详细配置请参考 &lt;a href=&quot;https://remark42.com/docs/getting-started/installation/&quot;&gt;Remark42 安装指南&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主题自动切换：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Remark42 组件已实现主题自动切换，使用 &lt;code&gt;MutationObserver&lt;/code&gt; 监听站点主题变化，自动调用 &lt;code&gt;window.REMARK42.changeTheme()&lt;/code&gt; 更新评论框主题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考链接：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://remark42.com/&quot;&gt;Remark42 官网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://remark42.com/docs/getting-started/installation/&quot;&gt;安装指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://remark42.com/docs/configuration/&quot;&gt;配置文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Giscus&lt;a href=&quot;#giscus&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://giscus.app&quot;&gt;Giscus&lt;/a&gt; 是基于 GitHub Discussions 的评论系统，无需自建后端，评论数据存储在你的 GitHub 仓库中。&lt;/p&gt;
&lt;p&gt;具体配置可以看看这篇文章：&lt;a href=&quot;https://zhuanlan.zhihu.com/p/693434928&quot;&gt;https://zhuanlan.zhihu.com/p/693434928&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;前置要求：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;仓库必须是&lt;a href=&quot;https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility#making-a-repository-public&quot;&gt;公开的&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;安装 &lt;a href=&quot;https://github.com/apps/giscus&quot;&gt;giscus app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在仓库中&lt;a href=&quot;https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/enabling-or-disabling-github-discussions-for-a-repository&quot;&gt;启用 Discussions 功能&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;获取配置参数：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://giscus.app/zh-CN&quot;&gt;giscus.app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;输入你的仓库名称（格式：&lt;code&gt;owner/repo&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;选择页面与 Discussion 的映射方式（推荐 &lt;code&gt;pathname&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;选择 Discussion 分类（推荐 &lt;code&gt;Announcements&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;启用所需功能（reactions、评论框位置等）&lt;/li&gt;
&lt;li&gt;复制生成的 &lt;code&gt;data-repo-id&lt;/code&gt; 和 &lt;code&gt;data-category-id&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;配置示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  provider&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; giscus&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  giscus&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    repo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; username/repo&lt;/span&gt;&lt;span&gt; # GitHub 仓库名 (owner/repo 格式)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    repoId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; R_kgDOxxxxxx&lt;/span&gt;&lt;span&gt; # 仓库 ID (从 giscus.app 获取)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    category&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Announcements&lt;/span&gt;&lt;span&gt; # Discussion 分类名称&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    categoryId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; DIC_kwDOxxxxxx&lt;/span&gt;&lt;span&gt; # 分类 ID (从 giscus.app 获取)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mapping&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; pathname&lt;/span&gt;&lt;span&gt; # 映射方式&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    reactionsEnabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;1&quot;&lt;/span&gt;&lt;span&gt; # 启用 reactions (&apos;1&apos; 启用, &apos;0&apos; 禁用)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    emitMetadata&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;0&quot;&lt;/span&gt;&lt;span&gt; # 发送元数据&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    inputPosition&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; top&lt;/span&gt;&lt;span&gt; # 输入框位置 (&apos;top&apos; | &apos;bottom&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lang&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; zh-CN&lt;/span&gt;&lt;span&gt; # 语言&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参数说明：&lt;/strong&gt;&lt;/p&gt;
















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;repo&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;GitHub 仓库，格式为 &lt;code&gt;owner/repo&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;repoId&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;仓库 ID，从 giscus.app 获取&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Discussion 分类名称&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;categoryId&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;分类 ID，从 giscus.app 获取&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;页面与 Discussion 的映射方式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;term&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;当 &lt;code&gt;mapping&lt;/code&gt; 为 &lt;code&gt;specific&lt;/code&gt; 或 &lt;code&gt;number&lt;/code&gt; 时使用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;strict&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;0&apos; | &apos;1&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;严格匹配模式，默认 &lt;code&gt;&apos;0&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;reactionsEnabled&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;0&apos; | &apos;1&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否启用 reactions，默认 &lt;code&gt;&apos;1&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;emitMetadata&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;0&apos; | &apos;1&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否发送页面元数据，默认 &lt;code&gt;&apos;0&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;inputPosition&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;top&apos; | &apos;bottom&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;评论输入框位置，默认 &lt;code&gt;&apos;top&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;界面语言，默认 &lt;code&gt;&apos;zh-CN&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自托管 Giscus 实例的地址（可选）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;theme&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;固定主题（不设置则跟随站点主题切换）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;loading&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&apos;lazy&apos; | &apos;eager&apos;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;加载方式，默认 &lt;code&gt;&apos;lazy&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;映射方式说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pathname&lt;/code&gt;（推荐）：使用页面路径匹配，如 &lt;code&gt;/post/my-article&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;url&lt;/code&gt;：使用完整 URL 匹配&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;：使用页面标题匹配&lt;/li&gt;
&lt;li&gt;&lt;code&gt;og:title&lt;/code&gt;：使用 Open Graph 标题匹配&lt;/li&gt;
&lt;li&gt;&lt;code&gt;specific&lt;/code&gt;：使用 &lt;code&gt;term&lt;/code&gt; 参数指定的值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;number&lt;/code&gt;：使用 &lt;code&gt;term&lt;/code&gt; 参数指定的 Discussion 编号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;主题自动切换：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本主题已实现 Giscus 评论框的主题自动切换，会跟随站点的深色/浅色模式自动调整。实现原理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;组件挂载时读取当前主题&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;MutationObserver&lt;/code&gt; 监听 &lt;code&gt;document.documentElement&lt;/code&gt; 的 &lt;code&gt;class&lt;/code&gt; 变化&lt;/li&gt;
&lt;li&gt;检测到主题切换时通过 &lt;code&gt;postMessage&lt;/code&gt; 通知 Giscus iframe 更新主题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;参考链接：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://giscus.app/zh-CN&quot;&gt;giscus 官网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/giscus/giscus-component&quot;&gt;giscus-component 文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Twikoo&lt;a href=&quot;#twikoo&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://twikoo.js.org/&quot;&gt;Twikoo&lt;/a&gt; 是一个搭建免费，部署简单，功能丰富的简洁、安全、易用的静态网站评论系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☁️ 云开发 / 自托管双部署模式&lt;/li&gt;
&lt;li&gt;🔒 隐私安全，无广告、无恶意追踪&lt;/li&gt;
&lt;li&gt;📧 支持邮件 / 微信公众号评论通知&lt;/li&gt;
&lt;li&gt;⚙️ 后台评论审核、敏感词过滤&lt;/li&gt;
&lt;li&gt;😊 内置表情包、支持图片上传&lt;/li&gt;
&lt;li&gt;🌙 原生支持深色 / 浅色主题切换&lt;/li&gt;
&lt;li&gt;👥 访客标记、评论点赞、楼中楼回复&lt;/li&gt;
&lt;li&gt;🛡️ 内置反垃圾评论防护&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;前置要求：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;部署 Twikoo 服务端（腾讯云开发 / 自托管，部署指南）&lt;/li&gt;
&lt;li&gt;配置云开发环境 ID 或 自托管服务地址&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;配置示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  provider&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; twikoo&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  twikoo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    envId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # Twikoo 环境 ID (腾讯云) 或 Vercel 环境地址 (必填)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    region&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 环境地域，默认为 ap-shanghai&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 用于区分不同文章的自定义 js 路径，如果您的文章路径不是 location.pathname，需传此参数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lang&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; # 语言 (默认: &apos;zh-CN&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参数说明：&lt;/strong&gt;&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;envId&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Twikoo 环境 ID (&lt;strong&gt;必填&lt;/strong&gt;，需带 &lt;code&gt;https://&lt;/code&gt; 或 &lt;code&gt;https://&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;region&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;环境地域，默认为 &lt;code&gt;&apos;ap-shanghai&apos;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;用于区分不同文章的自定义 js 路径，如果您的文章路径不是 location.pathname，需传此参数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;&lt;td&gt;语言 (默认: &lt;code&gt;&apos;zh-CN&apos;&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;部署 Twikoo 服务端：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参考 &lt;a href=&quot;https://twikoo.js.org/&quot;&gt;Twikoo 官网&lt;/a&gt; 获取详细部署指南。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主题自动切换：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Twikoo 已实现主题自动切换&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考链接：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twikoo.js.org/&quot;&gt;Twikoo 官网&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;草稿文章如何预览？&lt;a href=&quot;#草稿文章如何预览&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;运行 &lt;code&gt;pnpm dev&lt;/code&gt; 本地开发模式，草稿会自动显示（带 DRAFT 标识）。&lt;/p&gt;
&lt;h3&gt;如何关闭某些功能？&lt;a href=&quot;#如何关闭某些功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;关闭某个系列&lt;/strong&gt;：设置该系列的 &lt;code&gt;enabled: false&lt;/code&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;featuredSeries&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; slug&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; weekly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt; # 禁用此系列&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭所有系列&lt;/strong&gt;：将 &lt;code&gt;featuredSeries&lt;/code&gt; 设为空数组 &lt;code&gt;[]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭搜索&lt;/strong&gt;：移除 &lt;code&gt;astro.config.mjs&lt;/code&gt; 中的 &lt;code&gt;pagefind()&lt;/code&gt; 集成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭统计&lt;/strong&gt;：设置 &lt;code&gt;analytics.umami.enabled = false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭评论&lt;/strong&gt;：移除 &lt;code&gt;comment.provider&lt;/code&gt; 配置或将其设置为空&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭 Shoka 语法&lt;/strong&gt;：在 &lt;code&gt;config/site.yaml&lt;/code&gt; 的 &lt;code&gt;content&lt;/code&gt; 部分将对应功能设为 &lt;code&gt;false&lt;/code&gt;，如 &lt;code&gt;enableShokaContainers: false&lt;/code&gt;（关闭提醒块/折叠块/标签卡）、&lt;code&gt;enableShokaSpoiler: false&lt;/code&gt;（关闭隐藏文字）等&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭数学公式&lt;/strong&gt;：设置 &lt;code&gt;content.enableMath = false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关闭练习题&lt;/strong&gt;：设置 &lt;code&gt;content.enableQuiz = false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;如何更改文章 URL 格式？&lt;a href=&quot;#如何更改文章-url-格式&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;默认使用文件名作为 URL。可以通过 &lt;code&gt;link&lt;/code&gt; 字段自定义：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; my-custom-url&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;URL 特殊字符处理&lt;a href=&quot;#url-特殊字符处理&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;文章链接（&lt;code&gt;link&lt;/code&gt;）和标签（&lt;code&gt;tags&lt;/code&gt;）支持包含特殊字符，系统会自动进行 URL 编码处理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文章链接特殊字符：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; C# 学习笔记&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; test-C#&lt;/span&gt;&lt;span&gt; # 包含 # 字符&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;访问时 URL 会自动编码为 &lt;code&gt;/post/test-C%23&lt;/code&gt;，确保浏览器正确解析。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;标签特殊字符：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; C#&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; C++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; .NET&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; Node.js&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;标签会自动转换为 URL 安全的格式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;C#&lt;/code&gt; → &lt;code&gt;/tags/c%23&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C++&lt;/code&gt; → &lt;code&gt;/tags/c%2B%2B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.NET&lt;/code&gt; → &lt;code&gt;/tags/.net&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Node.js&lt;/code&gt; → &lt;code&gt;/tags/node.js&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;特殊字符包括：&lt;code&gt;#&lt;/code&gt;、&lt;code&gt;+&lt;/code&gt;、&lt;code&gt;&amp;amp;&lt;/code&gt;、&lt;code&gt;?&lt;/code&gt;、&lt;code&gt;%&lt;/code&gt;、空格等&lt;/li&gt;
&lt;li&gt;标签中的 &lt;code&gt;/&lt;/code&gt; 会被替换为 &lt;code&gt;-&lt;/code&gt;（如 &lt;code&gt;前端/React&lt;/code&gt; → &lt;code&gt;前端-react&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;分类名称通过 &lt;code&gt;categoryMap&lt;/code&gt; 映射，建议使用纯英文 slug 避免编码问题&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考资源&lt;a href=&quot;#参考资源&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwindcss.com/docs&quot;&gt;Tailwind CSS 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://motion.dev/docs&quot;&gt;Motion 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pagefind.app/&quot;&gt;Pagefind 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shoka.lostyu.me/computer-science/note/theme-shoka-doc/&quot;&gt;Shoka 主题文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;更新日志&lt;a href=&quot;#更新日志&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;查看 &lt;a href=&quot;https://github.com/cosZone/astro-koharu/blob/main/CHANGELOG.md&quot;&gt;CHANGELOG.md&lt;/a&gt; 了解版本更新历史。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;如有问题或建议，欢迎在 &lt;a href=&quot;https://github.com/cosZone/astro-koharu/issues&quot;&gt;GitHub Issues&lt;/a&gt; 中反馈。&lt;/p&gt;</content:encoded><category>category:备忘录</category><category>tag:Astro</category><category>tag:博客</category><category>tag:教程</category></item><item><title>Markdown 增强功能演示</title><link>https://dimpleblog.top/ja/post/markdown-features</link><guid isPermaLink="false">ja:markdown-features</guid><description>展示 astro-koharu 支持的所有 Markdown 增强功能，包括代码高亮、Mermaid 图表、GFM 表格、Shoka 兼容语法等。</description><pubDate>Mon, 01 Jan 2024 16:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本文展示 astro-koharu 支持的所有 Markdown 增强功能。&lt;/p&gt;
&lt;h2&gt;链接嵌入功能&lt;a href=&quot;#链接嵌入功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;astro-koharu 支持自动嵌入独行链接，包括 Tweet 和通用链接预览。&lt;/p&gt;
&lt;h3&gt;Tweet 嵌入测试&lt;a href=&quot;#tweet-嵌入测试&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下面是一条独行的 Twitter 链接，应该自动转换为 Tweet 组件：&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;这是普通段落中的链接 &lt;a href=&quot;https://twitter.com/vercel_dev/status/1997059920936775706&quot;&gt;Vercel Tweet&lt;/a&gt;，不应该被嵌入。&lt;/p&gt;
&lt;p&gt;使用新域名 x.com 的 Tweet：&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;通用链接预览测试&lt;a href=&quot;#通用链接预览测试&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这是段落中的链接 &lt;a href=&quot;https://github.com/vercel/react-tweet&quot;&gt;react-tweet&lt;/a&gt;，不应该被嵌入。&lt;/p&gt;
&lt;p&gt;下面是一个独行的普通链接，应该显示 OG 预览卡片：&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://github.com/vercel/react-tweet&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
          &lt;span&gt;github.com&lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;GitHub - vercel/react-tweet: Embed tweets in your React application.&lt;/div&gt;
        &lt;p&gt;Embed tweets in your React application. Contribute to vercel/react-tweet development by creating an account on GitHub.&lt;/p&gt;
        &lt;div&gt;
          &lt;span&gt;https://github.com/vercel/react-tweet&lt;/span&gt;
           
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/ad08ff11a8c065df661a7756add6ce3450c5f9fa5d4acff56680f93a29678d33/vercel/react-tweet&quot; alt=&quot;GitHub - vercel/react-tweet: Embed tweets in your React application.&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;这是没有 OG 图的链接&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://react-tweet.vercel.app/&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;react-tweet.vercel.app&lt;/div&gt;
          &lt;div&gt;https://react-tweet.vercel.app/&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      
        
      
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;这是获取不到 OG 信息的链接&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://zhuanlan.zhihu.com/p/1900483903984243480&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;https://zhuanlan.zhihu.com/p/1900483903984243480&lt;/div&gt;
          &lt;div&gt;zhuanlan.zhihu.com&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      
        
      
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;h3&gt;Codepen 链接嵌入&lt;a href=&quot;#codepen-链接嵌入&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/botteu/pen/YPKBrJX/&quot;&gt;YPKBrJX&lt;/a&gt; by botteu (&lt;a href=&quot;https://codepen.io/botteu&quot;&gt;@botteu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h3&gt;链接嵌入规则&lt;a href=&quot;#链接嵌入规则&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;独行的 Twitter/X 链接自动转换为 Tweet 组件&lt;/li&gt;
&lt;li&gt;独行的其他链接显示 OG 预览卡片&lt;/li&gt;
&lt;li&gt;段落内的链接保持原样&lt;/li&gt;
&lt;li&gt;支持深色/浅色主题切换&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;代码高亮&lt;a href=&quot;#代码高亮&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;支持多种编程语言的语法高亮，并自动跟随主题切换。&lt;/p&gt;
&lt;h3&gt;JavaScript&lt;a href=&quot;#javascript&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; greet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Hello, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;Welcome to astro-koharu&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    timestamp&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;greet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;World&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;TypeScript&lt;a href=&quot;#typescript&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; BlogPost&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; string&lt;/span&gt;&lt;span&gt;[]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BlogPost &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;My First Post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;astro&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &quot;blog&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;Hello World!&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Python&lt;a href=&quot;#python&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; fibonacci&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; -&amp;gt;&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;&quot;&quot;Generate Fibonacci sequence&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; n &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    elif&lt;/span&gt;&lt;span&gt; n &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    fib &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; n&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        fib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fib&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; +&lt;/span&gt;&lt;span&gt; fib&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; fib&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fibonacci&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Bash&lt;a href=&quot;#bash&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# Start development server&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &quot;Server is running at http://localhost:4321&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;GFM 表格&lt;a href=&quot;#gfm-表格&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;功能&lt;/th&gt;&lt;th&gt;支持状态&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;表格&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;支持对齐&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;任务列表&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;复选框&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;删除线&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;删除文本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自动链接&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;自动识别 URL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;任务列表&lt;a href=&quot;#任务列表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; 安装 astro-koharu&lt;/li&gt;
&lt;li&gt; 配置站点信息&lt;/li&gt;
&lt;li&gt; 写第一篇文章&lt;/li&gt;
&lt;li&gt; 部署到 Vercel&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Mermaid 图表&lt;a href=&quot;#mermaid-图表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;流程图&lt;a href=&quot;#流程图&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;flowchart LR
    A[编写文章] --&amp;gt; B[本地预览]
    B --&amp;gt; C{满意吗?}
    C --&amp;gt;|是| D[推送代码]
    C --&amp;gt;|否| A
    D --&amp;gt; E[自动部署]
    E --&amp;gt; F[上线成功]&lt;/pre&gt;
&lt;h3&gt;时序图&lt;a href=&quot;#时序图&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;sequenceDiagram
    participant U as 用户
    participant B as 浏览器
    participant S as 服务器

    U-&amp;gt;&amp;gt;B: 访问博客
    B-&amp;gt;&amp;gt;S: 请求页面
    S--&amp;gt;&amp;gt;B: 返回 HTML
    B--&amp;gt;&amp;gt;U: 渲染页面&lt;/pre&gt;
&lt;h3&gt;饼图&lt;a href=&quot;#饼图&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;pie title 博客内容分布
    &quot;技术笔记&quot; : 45
    &quot;生活随笔&quot; : 25
    &quot;项目分享&quot; : 20
    &quot;其他&quot; : 10&lt;/pre&gt;
&lt;h2&gt;文本样式&lt;a href=&quot;#文本样式&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;粗体文本&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;斜体文本&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;删除线&lt;/li&gt;
&lt;li&gt;&lt;code&gt;行内代码&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cosZone/astro-koharu&quot;&gt;链接文本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;引用&lt;a href=&quot;#引用&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这是一段引用文本。&lt;/p&gt;
&lt;p&gt;astro-koharu 让博客搭建变得简单而优雅。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;标题层级&lt;a href=&quot;#标题层级&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本文展示了 h2-h6 各级标题，它们都会自动生成锚点链接，方便分享和引用。&lt;/p&gt;
&lt;h3&gt;三级标题&lt;a href=&quot;#三级标题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;四级标题&lt;a href=&quot;#四级标题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;五级标题&lt;a href=&quot;#五级标题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h5&gt;
&lt;h6&gt;六级标题&lt;a href=&quot;#六级标题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h6&gt;
&lt;h2&gt;分割线&lt;a href=&quot;#分割线&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;hr /&gt;
&lt;h2&gt;列表&lt;a href=&quot;#列表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;无序列表&lt;a href=&quot;#无序列表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;项目一
&lt;ul&gt;
&lt;li&gt;子项目 A&lt;/li&gt;
&lt;li&gt;子项目 B&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;项目二&lt;/li&gt;
&lt;li&gt;项目三&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;有序列表&lt;a href=&quot;#有序列表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;第一步&lt;/li&gt;
&lt;li&gt;第二步
&lt;ol&gt;
&lt;li&gt;子步骤 A&lt;/li&gt;
&lt;li&gt;子步骤 B
&lt;ol&gt;
&lt;li&gt;子步骤 C&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;第三步&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;图片&lt;a href=&quot;#图片&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;图片会自动应用 LQIP（低质量图片占位符）效果：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/img/cover/3.webp&quot; alt=&quot;示例图片&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;示例图片&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2&gt;Shoka 兼容 Markdown 语法&lt;a href=&quot;#shoka-兼容-markdown-语法&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;除了上述标准 Markdown 增强外，astro-koharu 还支持从 Hexo Shoka 主题迁移的丰富扩展语法，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文字特效&lt;/strong&gt; — 下划线 ins、高亮 &lt;mark&gt;mark&lt;/mark&gt;、上下标 &lt;sub&gt;sub&lt;/sub&gt; / &lt;sup&gt;sup&lt;/sup&gt;、颜色文字&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐藏文字&lt;/strong&gt; — Spoiler 粒子动画 隐藏文字 和 &lt;span&gt;模糊效果&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注音标注&lt;/strong&gt; — Ruby &lt;ruby&gt;漢字&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;かんじ&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容器块&lt;/strong&gt; — 提醒块 &lt;code&gt;:::info&lt;/code&gt;、折叠块 &lt;code&gt;+++primary 标题&lt;/code&gt;、标签卡 &lt;code&gt;;;;tab&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;友链卡片&lt;/strong&gt; — &lt;code&gt;&lt;/code&gt; YAML 数据渲染为交互卡片&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;音视频播放器&lt;/strong&gt; — &lt;code&gt;&lt;/code&gt; 支持网易云/QQ 音乐歌单&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数学公式&lt;/strong&gt; — KaTeX 行内 &lt;span&gt;&lt;span&gt;E=mc2E=mc^2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 和块级 &lt;code&gt;$$...$$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码块增强&lt;/strong&gt; — title、mark 行高亮、command 提示符&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;练习题系统&lt;/strong&gt; — 单选、多选、判断、填空四种题型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加密内容块&lt;/strong&gt; — &lt;code&gt;:::encrypted&lt;/code&gt; AES-256-GCM 加密，防止爬虫收录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所有功能均可在 &lt;code&gt;config/site.yaml&lt;/code&gt; 中独立开关。完整语法演示和用法请参阅 &lt;a href=&quot;/post/note/shoka-features&quot;&gt;Shoka 主题 Markdown 语法演示&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;加密内容块&lt;a href=&quot;#加密内容块&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;:::encrypted{password=&quot;密码&quot;}&lt;/code&gt; 语法创建加密区块。内容在构建时使用 AES-256-GCM 真正加密，密码不会出现在最终 HTML 中，有效防止搜索引擎和爬虫收录敏感内容。&lt;/p&gt;
&lt;p&gt;加密块内的 Markdown 会获得与普通内容完全相同的渲染处理（Shiki 代码高亮、KaTeX 公式等），解密后直接展示。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前端无法实现真正意义上的加密，因为密码需在客户端输入，密文和算法对用户可见，安全性完全取决于密码强度。本功能的目的是&lt;strong&gt;防止搜索引擎和爬虫直接收录明文内容&lt;/strong&gt;，而非对抗有针对性的破解。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;:::encrypted{password=&quot;demo&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;这段内容已加密，输入密码 &lt;/span&gt;&lt;span&gt;`demo`&lt;/span&gt;&lt;span&gt; 即可查看。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;支持 &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;完整 Markdown 语法&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;，包括代码块：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;span&gt;python&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello from encrypted block!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;```&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;总结&lt;a href=&quot;#总结&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以上展示了 astro-koharu 支持的主要 Markdown 功能。更多功能请参考 &lt;a href=&quot;/post/astro-koharu-guide&quot;&gt;使用指南&lt;/a&gt;。&lt;/p&gt;</content:encoded><category>category:备忘录</category><category>tag:Markdown</category><category>tag:教程</category></item></channel></rss>