<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>教程 on September的个人空间</title><link>https://blog.september.win/tags/%E6%95%99%E7%A8%8B/</link><description>Recent content in 教程 on September的个人空间</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sat, 23 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.september.win/tags/%E6%95%99%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>把 Ren'Py 游戏翻译流程写成一个可复用 Skill</title><link>https://blog.september.win/p/renpy-game-translation-skill/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://blog.september.win/p/renpy-game-translation-skill/</guid><description>&lt;p&gt;最近把一套 Ren&amp;rsquo;Py 游戏翻译流程整理成了一个 Codex Skill。它的作用不是“教 AI 怎么随便翻译几句文本”，而是把 Ren&amp;rsquo;Py 汉化里那些很容易被忽略的规则，变成一份可以反复执行的检查清单。&lt;/p&gt;
&lt;p&gt;Ren&amp;rsquo;Py 游戏翻译看起来很简单：找到文本，翻成中文，保存。但真正做起来会发现，问题经常不在“这句话怎么翻”，而在“这句话到底会不会被 Ren&amp;rsquo;Py 正确匹配、正确加载、正确显示”。&lt;/p&gt;
&lt;p&gt;所以这个 Skill 的核心思路是：不要把翻译当成纯文本替换，而要把它当成一个小型补丁工程。&lt;/p&gt;
&lt;h2 id="为什么要写成-skill"&gt;为什么要写成 Skill
&lt;/h2&gt;&lt;p&gt;单次翻译靠经验可以做完，但下一次换一个游戏，很多坑还会再踩一遍。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;old&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;li&gt;直接改原脚本，更新游戏后补丁很难迁移&lt;/li&gt;
&lt;li&gt;批量脚本写文件时编码错了，中文变成乱码或问号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些不是“翻译水平”问题，而是流程问题。Skill 适合处理的正是这种流程：每次遇到 Ren&amp;rsquo;Py 项目，都按同一套顺序检查、修改和验证。&lt;/p&gt;
&lt;h2 id="工作区应该放在哪里"&gt;工作区应该放在哪里
&lt;/h2&gt;&lt;p&gt;Ren&amp;rsquo;Py 翻译最重要的目录是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;game/tl/&amp;lt;language&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Skill 里的第一条规则就是：优先在翻译目录里工作，能不改原始脚本就不改原始脚本。&lt;/p&gt;
&lt;p&gt;原因很现实。原脚本是游戏本体的一部分，直接改它虽然快，但后续更新、分发、回滚都会变麻烦。更稳的方式是把翻译、字体、界面覆盖、语言按钮、默认语言设置等内容尽量放进 &lt;code&gt;game/tl/&amp;lt;language&amp;gt;/&lt;/code&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;li&gt;不容易误伤原游戏逻辑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果原游戏没有 &lt;code&gt;.rpy&lt;/code&gt;，只有 &lt;code&gt;.rpyc&lt;/code&gt; 或资源包，那就先处理解包、反编译或生成翻译文件的问题，而不是直接乱改。&lt;/p&gt;
&lt;h2 id="oldnew-不能乱动"&gt;old/new 不能乱动
&lt;/h2&gt;&lt;p&gt;Ren&amp;rsquo;Py 里常见的翻译形式有两种。&lt;/p&gt;
&lt;p&gt;一种是对话块：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;translate chinese start_abc123:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;这里写翻译后的台词&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;另一种是字符串表：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;translate chinese strings:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; old &amp;#34;Start&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; new &amp;#34;开始&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里最容易犯的错是改 &lt;code&gt;old&lt;/code&gt;。&lt;br&gt;
&lt;code&gt;old&lt;/code&gt; 不是给你润色的原文，它是 Ren&amp;rsquo;Py 用来匹配原始文本的钥匙。空格、标点、文本标签、大小写、换行都可能影响匹配。&lt;/p&gt;
&lt;p&gt;所以规则很简单：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;old 保持原样
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;new 写翻译
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果一个 &lt;code&gt;old&lt;/code&gt; 看起来有点怪，比如带着 &lt;code&gt;{size=}&lt;/code&gt;、颜色标签、状态后缀，也不要顺手清理。真实运行时显示出来的字符串很可能就是这么匹配的。&lt;/p&gt;
&lt;h2 id="菜单和-ui-要单独查"&gt;菜单和 UI 要单独查
&lt;/h2&gt;&lt;p&gt;Ren&amp;rsquo;Py 自动生成翻译文件很有用，但它不一定能覆盖所有运行时可见文本。&lt;/p&gt;
&lt;p&gt;除了对话，还要主动搜索这些位置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Character&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;textbutton&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tooltip&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;renpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;renpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;default&lt;/span&gt; &lt;span class="n"&gt;xxx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;xxx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;xxx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;menu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;尤其是菜单选项。它们经常带条件、标签、样式或自定义 screen 处理。你在翻译文件里看到的 &lt;code&gt;old &amp;quot;Yes&amp;quot;&lt;/code&gt;，不一定覆盖了运行时真正显示的 &lt;code&gt;{color=#fff}Yes{/color}&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果某个选项死活不翻译，别先怀疑 Ren&amp;rsquo;Py。先把运行时原文和 &lt;code&gt;old&lt;/code&gt; 逐字节对一下，包括空格和标签。&lt;/p&gt;
&lt;h2 id="变量插值是隐藏大坑"&gt;变量插值是隐藏大坑
&lt;/h2&gt;&lt;p&gt;这次整理 Skill 时，最值得单独记下的是变量插值。&lt;/p&gt;
&lt;p&gt;Ren&amp;rsquo;Py 里常见写法是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;Welcome to [tribe_name], [player_name].&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果 &lt;code&gt;tribe_name&lt;/code&gt; 的值是 &lt;code&gt;&amp;quot;Wartribe&amp;quot;&lt;/code&gt;，即使你在字符串表里写了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;old &amp;#34;Wartribe&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;new &amp;#34;战族&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;最终显示时也不一定会自动变成中文。因为普通的 &lt;code&gt;[tribe_name]&lt;/code&gt; 插值只是把变量当前值拿出来显示，不会必然再走一遍翻译表。&lt;/p&gt;
&lt;p&gt;这种情况下要用翻译感知插值：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;欢迎来到 [tribe_name!t]，[player_name!t]。&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果变量翻译后还需要继续插值，可以看情况用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;variable&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个坑很隐蔽，因为外面的句子已经翻译了，只有嵌进去的人名、地名、阵营名还保留英文。看起来像漏翻，其实是插值方式不对。&lt;/p&gt;
&lt;h2 id="高级补丁放-zzzrpy"&gt;高级补丁放 zzz.rpy
&lt;/h2&gt;&lt;p&gt;有些问题不是一句 &lt;code&gt;old/new&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;调整中文 UI 样式&lt;/li&gt;
&lt;li&gt;覆盖 screen&lt;/li&gt;
&lt;li&gt;修正少量源代码层面的文本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类内容可以放到翻译目录里的补丁文件，例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;game/tl/chinese/zzz.rpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;常见做法是加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;init offset = 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;让补丁比原定义更晚加载。这样可以覆盖 screen、style、define 等内容，又不会直接动原文件。&lt;/p&gt;
&lt;p&gt;默认语言也要分清：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;define config.default_language = &amp;#34;chinese&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这更适合“首次启动默认中文”。&lt;br&gt;
如果用 &lt;code&gt;config.language&lt;/code&gt; 强行指定语言，就可能变成每次启动都锁死语言，不一定符合玩家预期。&lt;/p&gt;
&lt;h2 id="字体不是最后再想的事"&gt;字体不是最后再想的事
&lt;/h2&gt;&lt;p&gt;中文翻译里，字体问题经常到最后才暴露：文本已经翻好了，进游戏一看全是方块。&lt;/p&gt;
&lt;p&gt;Skill 里把字体和样式也放进检查范围。一般有几种处理方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;translate &amp;lt;language&amp;gt; style&lt;/code&gt; 里覆盖样式&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;translate &amp;lt;language&amp;gt; python&lt;/code&gt; 里设置 GUI 变量&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;game/tl/&amp;lt;language&amp;gt;/&lt;/code&gt; 下镜像放置字体资源&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;zzz.rpy&lt;/code&gt; 做语言限定的字体覆盖&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关键是尽量让字体修复只影响目标语言，不要全局改坏原版 UI。&lt;/p&gt;
&lt;h2 id="不要信任批量替换"&gt;不要信任批量替换
&lt;/h2&gt;&lt;p&gt;批量脚本很诱人，尤其是翻译量大的时候。但 Ren&amp;rsquo;Py 文件里有很多结构性内容：&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;code&gt;%&lt;/code&gt;、&lt;code&gt;\&lt;/code&gt;、&lt;code&gt;/&lt;/code&gt; 这类特殊符号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果脚本没有严格按 UTF-8 读写，中文很容易变成乱码、问号或损坏标签。&lt;/p&gt;
&lt;p&gt;所以 Skill 里明确写了：在 Windows 上做批量编辑时，要使用明确的 UTF-8 读写方式。改完后要扫一遍：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;乱码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;???? 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;� 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;损坏的 {tag}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;损坏的 [variable]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;翻译文件不是普通 Markdown，不能只看文本大概对不对。&lt;/p&gt;
&lt;h2 id="验证要看三个文件"&gt;验证要看三个文件
&lt;/h2&gt;&lt;p&gt;改完之后，不要只打开一两句台词看看。至少要检查：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;errors.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;traceback.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;text_overflow.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;它们分别对应不同问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;errors.txt&lt;/code&gt;：生成或启动阶段的问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;traceback.txt&lt;/code&gt;：运行时崩溃&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text_overflow.txt&lt;/code&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;/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;被覆盖的 label 或 screen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ren&amp;rsquo;Py 翻译不是“文件能保存就完成”，而是“游戏运行时每条路径都能正确显示”。&lt;/p&gt;
&lt;h2 id="这个-skill-最有用的地方"&gt;这个 Skill 最有用的地方
&lt;/h2&gt;&lt;p&gt;我觉得它最有用的不是告诉 AI “请翻译成中文”，而是强迫 AI 先尊重 Ren&amp;rsquo;Py 的工程规则。&lt;/p&gt;
&lt;p&gt;它会提醒我：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要乱改 &lt;code&gt;old&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;不要直接动原脚本&lt;/li&gt;
&lt;li&gt;不要忽略菜单和 UI&lt;/li&gt;
&lt;li&gt;不要忘记变量插值的 &lt;code&gt;!t&lt;/code&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;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;Ren&amp;rsquo;Py 游戏汉化本质上不是文本替换，而是一套围绕运行时匹配、语言加载、界面覆盖和补丁分发的工程流程。&lt;/p&gt;
&lt;p&gt;把这套流程写成 Skill 之后，AI 就不只是“会翻译”，而是会按固定步骤处理项目结构、翻译文件、UI 字符串、变量插值、字体、补丁和验证。&lt;/p&gt;
&lt;p&gt;下一次再做 Ren&amp;rsquo;Py 游戏翻译时，就不用从零回忆哪些坑要避开。直接让 Skill 接管检查清单，人只需要把关翻译质量和最终体验。&lt;/p&gt;</description></item><item><title>Markdown 基本语法指北</title><link>https://blog.september.win/p/markdown-%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95%E6%8C%87%E5%8C%97/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.september.win/p/markdown-%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95%E6%8C%87%E5%8C%97/</guid><description>&lt;p&gt;几乎所有现代的博客平台和静态网站生成器都完美支持 Markdown。它能让我们在纯文本环境下专注于内容创作，而无需被复杂的排版工具打断思路。&lt;/p&gt;
&lt;p&gt;以下是日常写作中最常用的 Markdown 基本语法。&lt;/p&gt;
&lt;h2 id="1-标题-headings"&gt;1. 标题 (Headings)
&lt;/h2&gt;&lt;p&gt;要在文档中创建标题，请在单词或短语前面添加井号 (&lt;code&gt;#&lt;/code&gt;)。&lt;code&gt;#&lt;/code&gt; 的数量代表了标题的级别。为了兼容性，请务必在 &lt;code&gt;#&lt;/code&gt; 和标题文字之间&lt;strong&gt;保留一个空格&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 一级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 二级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 三级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;#### 四级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;##### 五级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;###### 六级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="2-段落与换行-paragraphs--line-breaks"&gt;2. 段落与换行 (Paragraphs &amp;amp; Line Breaks)
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;段落：&lt;/strong&gt;
创建段落非常简单，只需要使用一或多个空白行将连续的文本分隔开即可。不要用空格（spaces）或制表符（tabs）缩进段落。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;换行：&lt;/strong&gt;
如果你想在段落内强行换行（创建 &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;），请在这一行的末尾添加&lt;strong&gt;两个或多个空格&lt;/strong&gt;，然后按回车键。&lt;/p&gt;
&lt;h2 id="3-强调语法-emphasis"&gt;3. 强调语法 (Emphasis)
&lt;/h2&gt;&lt;p&gt;通过添加星号或下划线，可以轻松实现加粗和斜体效果。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;加粗&lt;/strong&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;斜体&lt;/strong&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加粗斜体&lt;/strong&gt;：前后各添加三个星号或下划线。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;***加粗且斜体的文本***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-引用-blockquotes"&gt;4. 引用 (Blockquotes)
&lt;/h2&gt;&lt;p&gt;要在段落前添加块引用，请在段落的第一行或者每一行前面添加一个 &lt;code&gt;&amp;gt;&lt;/code&gt; 符号。引用不仅支持多段落，还可以嵌套其他 Markdown 元素。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;这是一段引用文本。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;&amp;gt; 这是一个嵌套的引用。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;&amp;gt; 里面还可以使用 **加粗** 等其他语法。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="5-列表-lists"&gt;5. 列表 (Lists)
&lt;/h2&gt;&lt;p&gt;你可以将项目组织成有序列表或无序列表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有序列表：&lt;/strong&gt;
在每个列表项前添加数字并紧跟一个英文句点。数字不必按数学顺序排列，但列表应当以数字 1 起始。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; 第一项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; 第二项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; 第三项
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;无序列表：&lt;/strong&gt;
在每个列表项前添加破折号 (&lt;code&gt;-&lt;/code&gt;)、星号 (&lt;code&gt;*&lt;/code&gt;) 或加号 (&lt;code&gt;+&lt;/code&gt;)。建议统一使用 &lt;code&gt;-&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 苹果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 橘子
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 香蕉
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="6-代码-code"&gt;6. 代码 (Code)
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;行内代码：&lt;/strong&gt;
如果要把句子中的某个单词或短语标记为代码，请将其包裹在反引号 (&lt;code&gt; \&lt;/code&gt; `) 中。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;示例：使用 &lt;code&gt;print(&amp;quot;Hello World&amp;quot;)&lt;/code&gt; 来输出文本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;代码块：&lt;/strong&gt;
要创建多行代码块，请将代码包裹在三个反引号 (&lt;code&gt;```&lt;/code&gt;) 中。在第一排的反引号后面加上编程语言的名称，就可以实现代码高亮。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hello, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="7-分隔线-horizontal-rules"&gt;7. 分隔线 (Horizontal Rules)
&lt;/h2&gt;&lt;p&gt;要创建一条水平分隔线，请在单独一行上使用三个或多个星号 (&lt;code&gt;***&lt;/code&gt;)、破折号 (&lt;code&gt;---&lt;/code&gt;) 或下划线 (&lt;code&gt;___&lt;/code&gt;)，并且不能包含其他内容。&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="8-链接-links"&gt;8. 链接 (Links)
&lt;/h2&gt;&lt;p&gt;链接文本放在中括号内，链接地址放在后面的括号内。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;语法：&lt;/strong&gt; &lt;code&gt;[超链接显示名](超链接地址 &amp;quot;可选的提示标题&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例：&lt;/strong&gt; 欢迎访问我的 &lt;a class="link" href="https://github.com/September6969/" title="点击访问 GitHub"
 target="_blank" rel="noopener"
 &gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果想直接显示网址并使其可点击，可以用尖括号将网址括起来：&lt;code&gt;&amp;lt;https://example.com&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;示例：&lt;/strong&gt; &lt;a class="link" href="https://blog.september.win/" target="_blank" rel="noopener"
 &gt;https://blog.september.win/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="9-图片-images"&gt;9. 图片 (Images)
&lt;/h2&gt;&lt;p&gt;插入图片的语法和链接非常相似，只是前面多了一个感叹号 (&lt;code&gt;!&lt;/code&gt;)。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;语法：&lt;/strong&gt; &lt;code&gt;![图片替代文字](图片链接地址 &amp;quot;可选的图片标题&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;美丽的风景图&lt;/span&gt;](&lt;span class="na"&gt;https://markdown.com.cn/assets/img/philly-magic-garden.9c0b4415.jpg &amp;#34;Magic Gardens&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="美丽的风景图" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" data-title-escaped="Magic Gardens" height="635" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://markdown.com.cn/assets/img/philly-magic-garden.9c0b4415.jpg" srcset="https://blog.september.win/philly-magic-garden.9c0b4415_6843228470022674623_hu_78d82337c1b49d1c.jpg 800w, https://markdown.com.cn/assets/img/philly-magic-garden.9c0b4415.jpg 847w" title="Magic Gardens" width="847"&gt;&lt;/p&gt;
&lt;h2 id="10-转义字符-escaping-characters"&gt;10. 转义字符 (Escaping Characters)
&lt;/h2&gt;&lt;p&gt;如果你需要显示原本用于格式化 Markdown 文档的字符（比如你不希望 &lt;code&gt;#&lt;/code&gt; 变成标题），可以在该字符前面添加反斜杠 (&lt;code&gt;\&lt;/code&gt;) 来转义。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\* 这不是一个无序列表项，而是一个普通的星号。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;掌握了以上基本语法，你就已经具备了使用 Markdown 撰写结构清晰、排版优雅的博客文章的能力。&lt;/p&gt;</description></item><item><title>Markdown 拓展语法指北</title><link>https://blog.september.win/p/markdown-%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%8C%87%E5%8C%97/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.september.win/p/markdown-%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%8C%87%E5%8C%97/</guid><description>&lt;p&gt;掌握了基本语法后，Markdown 的扩展语法将为你打开新世界的大门。Markdown 官方标准（Basic Syntax）仅包含基础元素，但在实际应用中，许多解析器（如 GitHub Flavored Markdown, Hugo 等）支持更强大的扩展语法。掌握这些进阶技能，能让你轻松处理表格、代码高亮和任务清单。&lt;/p&gt;
&lt;h2 id="1-表格-tables"&gt;1. 表格 (Tables)
&lt;/h2&gt;&lt;p&gt;要在 Markdown 中创建表格，请使用管道符 &lt;code&gt;|&lt;/code&gt; 分隔各列，并使用三个或多个连字符 &lt;code&gt;---&lt;/code&gt; 创建表头和内容的分隔线。&lt;/p&gt;
&lt;h3 id="对齐方式"&gt;对齐方式
&lt;/h3&gt;&lt;p&gt;通过在分隔线行添加冒号 &lt;code&gt;:&lt;/code&gt;，可以控制列的对齐方式：&lt;/p&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;:---:&lt;/code&gt;：居中对齐&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 语法 | 说明 | 示例 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| :--- | :---: | ---: |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 表格 | 居中 | $10 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 扩展 | 左对齐 | $20 |
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="2-围栏代码块-fenced-code-blocks"&gt;2. 围栏代码块 (Fenced Code Blocks)
&lt;/h2&gt;&lt;p&gt;扩展语法允许你使用三个反引号（```）或三个波浪号（~~~）来包裹多行代码。最强大的功能是支持&lt;strong&gt;语法高亮&lt;/strong&gt;，只需在开头反引号后指定语言名称（如 python, html, css 等）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;project&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;September&amp;#39;s Blog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Learning Markdown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="3-脚注-footnotes"&gt;3. 脚注 (Footnotes)
&lt;/h2&gt;&lt;p&gt;脚注用于对正文中的内容添加补充说明，而不会打断读者的阅读流。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法&lt;/strong&gt;：在词汇后面使用 &lt;code&gt;[^1]&lt;/code&gt;，然后在文档底部定义说明。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：这是一个使用了脚注的句子。&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-标题-id-heading-ids"&gt;4. 标题 ID (Heading IDs)
&lt;/h2&gt;&lt;p&gt;部分解析器支持给标题指定唯一的 ID，方便在文章内部进行跳转（锚点链接）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 我的目标 {#goals}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="5-定义列表-definition-lists"&gt;5. 定义列表 (Definition Lists)
&lt;/h2&gt;&lt;p&gt;定义列表允许你列出术语及其对应的定义。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;第一项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;: 这是第一项的定义。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;第二项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;: 这是第二项的定义。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;: 这是第二项的另一个定义。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="6-删除线-strikethrough"&gt;6. 删除线 (Strikethrough)
&lt;/h2&gt;&lt;p&gt;在文字前后各添加两个波浪号 &lt;code&gt;~~&lt;/code&gt; 来表示已被删除或错误的信息。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;del&gt;这件衣服原价 99 元&lt;/del&gt;，现在只需 19 元。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="7-任务列表-task-lists"&gt;7. 任务列表 (Task Lists)
&lt;/h2&gt;&lt;p&gt;任务列表非常适合管理待办事项或项目进度。使用带有空格或 &lt;code&gt;x&lt;/code&gt; 的中括号 &lt;code&gt;[ ]&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [x]&lt;/span&gt; 完成基础语法学习
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [x]&lt;/span&gt; 掌握扩展语法
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; 发布第一篇技术博客
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="8-使用-emoji-表情"&gt;8. 使用 Emoji 表情
&lt;/h2&gt;&lt;p&gt;在 Markdown 中添加表情有两种常见方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接从表情库复制并粘贴 Emoji 符号（如 🚀）。&lt;/li&gt;
&lt;li&gt;使用“短代码”（需解析器支持），例如输入 &lt;code&gt;:smile:&lt;/code&gt; 会被渲染成 😄。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="9-自动网址链接-automatic-url-linking"&gt;9. 自动网址链接 (Automatic URL Linking)
&lt;/h2&gt;&lt;p&gt;许多现代解析器会自动将纯文本形式的 URL（如 &lt;code&gt;https://google.com&lt;/code&gt;）直接转换为可点击的超链接，而无需额外添加中括号。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;通过灵活运用这些扩展语法，你的 Markdown 文档将不仅仅是文字，更是一个具备专业排版水准的数字化作品。&lt;/p&gt;
&lt;p&gt;这些扩展语法能显著提升你博客内容的专业度和丰富度。建议在使用前，先确认你所使用的博客主题或编辑器是否已完整开启这些功能支持。&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;这是在文档末尾自动生成的补充说明。&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>在安卓手机上搭建个人博客的赛博折腾记录</title><link>https://blog.september.win/p/android-hugo-blog-setup/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.september.win/p/android-hugo-blog-setup/</guid><description>&lt;p&gt;把一台安卓手机变成全天候运行的服务器，这里记录一下整个博客的底层架构、一键启动脚本以及日常编辑的工作流，作为个人记录用 Desuwa。&lt;/p&gt;
&lt;h2 id="1-核心底层架构搭建过程"&gt;1. 核心底层架构（搭建过程）
&lt;/h2&gt;&lt;p&gt;整个站点的运行不需要去购买云服务器，所有的计算和渲染都在手机里完成。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;运行环境&lt;/strong&gt;：安卓端安装 Termux，提供完整的 Linux 终端环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心引擎&lt;/strong&gt;：使用 Hugo 生成静态页面，并配置了功能齐全的 Stack 主题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;外网穿透&lt;/strong&gt;：通过 Cloudflared 建立加密隧道。把本机的 8080 端口映射到公网域名，同时打通了 SSH 通道。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云端编辑器&lt;/strong&gt;：在 Termux 内运行 &lt;code&gt;code-server&lt;/code&gt;，提供网页版的 VS Code 界面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-自动化启动方案"&gt;2. 自动化启动方案
&lt;/h2&gt;&lt;p&gt;手机重启后，手动敲命令拉起服务效率太低。为了实现“一键复活”，配置了结合 &lt;code&gt;tmux&lt;/code&gt; 的自动化脚本。&lt;/p&gt;
&lt;p&gt;手机开机打开 Termux 后，直接执行以下代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;termux-wake-lock
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new-session -d -s blog &lt;span class="s2"&gt;&amp;#34;cloudflared tunnel run&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new-window -t blog:1 &lt;span class="s2"&gt;&amp;#34;code-server --auth none --bind-addr 127.0.0.1:8443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new-window -t blog:2 &lt;span class="s2"&gt;&amp;#34;cd ~/myblog &amp;amp;&amp;amp; hugo server -D -p 8080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux attach -t blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&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;启动 SSH 服务，允许电脑远程接入。&lt;/li&gt;
&lt;li&gt;创建名为 &lt;code&gt;blog&lt;/code&gt; 的虚拟窗口，在后台并行三个任务：内网穿透、VS Code 服务、Hugo 本地实时预览。&lt;/li&gt;
&lt;li&gt;随时可以通过快捷键 &lt;code&gt;Ctrl+B&lt;/code&gt; 配合数字键 &lt;code&gt;0, 1, 2&lt;/code&gt; 切换查看不同服务的实时日志。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="3-跨端编辑流"&gt;3. 跨端编辑流
&lt;/h2&gt;&lt;p&gt;服务端跑通后，日常编辑不需要在手机屏幕上操作。&lt;/p&gt;
&lt;p&gt;在电脑端打开终端，执行端口转发：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ssh&lt;/span&gt; &lt;span class="n"&gt;-L&lt;/span&gt; &lt;span class="mf"&gt;8443&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;8443&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;接着，在电脑浏览器里打开 &lt;code&gt;http://localhost:8443/&lt;/code&gt;，即可接入完整的 VS Code 界面。工作流如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;敲击 &lt;code&gt;Ctrl + ~&lt;/code&gt; 呼出终端，使用 &lt;code&gt;hugo new post/文章名.md&lt;/code&gt; 创建新文章。&lt;/li&gt;
&lt;li&gt;直接在网页编辑器里撰写 Markdown 内容。&lt;/li&gt;
&lt;li&gt;按下 &lt;code&gt;Ctrl + S&lt;/code&gt; 保存，Hugo 会在毫秒级完成重新编译。&lt;/li&gt;
&lt;li&gt;刷新博客对应的公网页面，即可看到最新排版效果。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>