<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>璜珀的小屋</title><description>记录自己的摆烂日常与学习记录</description><link>https://blog.hpcesia.com/</link><item><title>Nix 配置：Dendritic 模式</title><link>https://blog.hpcesia.com/posts/nix-and-dendritic-pattern/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/nix-and-dendritic-pattern/</guid><pubDate>Wed, 31 Dec 2025 10:26:26 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;p&gt;你使用 NixOS（或者 nix-darwin/Home Manager）吗？你的 Nix 配置是什么样子的？这不是在查户口，也不是为了说一句「I use NixOS, btw」，而是想介绍一个全新（其实并不太新）的 Nix 配置范式：&lt;a href=&quot;https://github.com/mightyiam/dendritic&quot;&gt;Dendritic 模式&lt;/a&gt;。我承认，我就是想说那句「btw」。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;tips&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;如果你从来没有听说过 Nix 与 NixOS，可以去看看这篇 &lt;a href=&quot;https://nixos-cn.org/tutorials/concept/BinaryAndSourceDistribution.html&quot;&gt;关于 Nix 语言与 NixOS 的简单介绍&lt;/a&gt;；如果想更进一步了解，可以看看 &lt;a href=&quot;https://nixos-and-flakes.thiscute.world/zh/&quot;&gt;NixOS &amp;amp; Flakes Book&lt;/a&gt;。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;一般的 Nix 配置都长啥样&lt;a href=&quot;#一般的-nix-配置都长啥样&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于一个最小化安装的 NixOS 系统，整个系统的配置由一个固定的 &lt;code&gt;configuration.nix&lt;/code&gt; 文件与一个自动扫描生成的 &lt;code&gt;hardware-configuration.nix&lt;/code&gt; 两个 Nix 文件组成。理论上来说，可以一直只使用这两个文件，编写出几千上万行的单文件地狱级代码组成的配置文件，并构建出任何满足要求且可行的 NixOS 系统。但应该没人想阅读这种量级的单个源代码文件吧。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;写这段代码的时候，只有上帝和我知道它是干嘛的 &lt;/span&gt;&lt;span&gt;// 现在只有上帝知道。&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;没人想读，更没人想维护，除非你想跟未来的自己结仇。还好 Nix 有一个 &lt;code&gt;import&lt;/code&gt; 功能，不然故事到这里就结束了。Nix 的 &lt;code&gt;import&lt;/code&gt; 可以将一个 Nix 文件整体作为一个值来使用，例如 &lt;code&gt;a = import ./a.nix;&lt;/code&gt; 这一语句，与 &lt;code&gt;a = &amp;lt;a.nix 的内容&amp;gt;&lt;/code&gt; 是完全等价的。但如果只使用 Nix 原生的 &lt;code&gt;import&lt;/code&gt;，对于需要各种复杂输入参数的 Nix 配置来说，手动维护各个 Nix 文件的函数输入是一个很麻烦的事情，所以 Nixpkgs 为 Nix 带来了模块系统。只需一行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;imports = &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;./another-module.nix&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;就可以将另一个内容符合 Nix 模块定义的文件作为整个 Nix 配置的一部分。通过这种方式，可以很快速地将多个 Nix 文件组织起来。因此，对多 Nix 配置文件的组织结构与方式就成了一个 Nix 配置的重点之一。如果你简单翻看过 GitHub 上 Star 数量比较高的 Nix 配置仓库，你会发现，这些仓库或多或少地都遵循了一种类似的组织结构，即将不同的功能划分到不同路径的文件当中。&lt;/p&gt;
&lt;p&gt;以 &lt;a href=&quot;https://nixos-and-flakes.thiscute.world/zh/&quot;&gt;NixOS &amp;amp; Flakes Book&lt;/a&gt; 作者 &lt;a href=&quot;https://github.com/ryan4yan&quot;&gt;ryan4yin&lt;/a&gt; 的 &lt;a href=&quot;https://github.com/ryan4yin/nix-config&quot;&gt;Nix 配置&lt;/a&gt;为例，该配置将不同的功能按等级划分在了不同模块（例如基础、TUI、GUI 三个等级）下的不同文件中，并在多台主机中通过复用这些功能模块；通过一个手搓的函数实现自动导入一个文件夹中的所有 &lt;code&gt;.nix&lt;/code&gt; 文件。大概长下面这样：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nix-config/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── flake.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── hosts/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── laptop-01/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       ├── configuration.nix  # &amp;lt;-- NixOS 入口&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       └── home.nix           # &amp;lt;-- Home Manager 入口&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── modules/                   # &amp;lt;-- 系统级模块&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── nixos/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       ├── desktop.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       ├── server.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       └── ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── home/                      # &amp;lt;-- 用户级模块 (Home Manager)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── linux/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── gui/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   ├── vscode/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   │   └── default.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   └── ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── ...&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;每个模块的路径就是它的功能描述。这种“看文件名知其意”的模式，已经比“单文件地狱”好太多了。但生命不息折腾不止，Nix 玩家永远在找轮子和造轮子中无限循环。于是有人更进一步，将这种范式提炼出来，提出了这篇文章的主题——&lt;a href=&quot;https://github.com/mightyiam/dendritic&quot;&gt;Dendritic 模式&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;Dendritic 模式是什么？&lt;a href=&quot;#dendritic-模式是什么&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dendritic 模式是一种基于 &lt;a href=&quot;https://flake.parts/&quot;&gt;&lt;code&gt;flake-parts&lt;/code&gt;&lt;/a&gt; 的 Nix 配置组织方式，在这种组织方式下，每一个 &lt;code&gt;.nix&lt;/code&gt; 文件都是一个 &lt;code&gt;flake-parts&lt;/code&gt; 模块。而 &lt;code&gt;flake-parts&lt;/code&gt; 是一个 Nix 配置框架，用于将一个 Nix flake 配置拆分为多个独立的可重用模块，以保持 flake 的整洁性和可维护性。Dendritic 模式利用了 &lt;a href=&quot;https://flake.parts/options/flake-parts-modules.html&quot;&gt;&lt;code&gt;flake-parts&lt;/code&gt; 的 &lt;code&gt;modules&lt;/code&gt; 功能&lt;/a&gt;定义并集成模块化的配置。&lt;/p&gt;
&lt;p&gt;Dendritic 的名字意为“树枝状的”，它也确实以一种树状结构来组织文件。所有的模块都存放在 &lt;code&gt;modules&lt;/code&gt; 目录下，并根据功能进行分类，通过 &lt;a href=&quot;https://github.com/vic/import-tree&quot;&gt;vic/import-tree&lt;/a&gt; 自动导入所有的模块。&lt;/p&gt;
&lt;p&gt;一段时间以前，我把之前的 Nix 配置重构为了 Dendritic 模式。在此之前，我的 Nix 配置总体上是从 &lt;a href=&quot;https://github.com/ryan4yin/nix-config&quot;&gt;Ryan Yin 的 Nix 配置&lt;/a&gt; 那里抄来的架构，我自己只是稍微改了改 (毕竟天下代码一大抄)。一开始的时候，抄来的成熟的配置架构用起来还是很快乐的——直到我遇到需要横跨 NixOS 和 Home Manager 的配置。一旦配置需要横跨 NixOS 和 Home Manager，整个配置就会变得比较繁琐：虽然配置对应的功能与文件路径是相关的，但是几个从文件路径上看关系不大的配置文件事实上是耦合在一起的。&lt;/p&gt;
&lt;p&gt;一个简单的例子是在启用某类软件时禁用桌面环境提供的同类软件包。比如我选择使用 DeaDBeeF 作为我的音乐播放器后，我想禁用 KDE Plasma 6 自带的音乐播放器 Elisa。为此，在旧的架构中，我需要依靠注释手动维护 &lt;code&gt;home&lt;/code&gt; 和 &lt;code&gt;modules&lt;/code&gt; 两个目录中的不同的文件的同步关系：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;modules/nixos/desktop.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plasma6&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;excludePackages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;kdePackages; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;konsole &lt;/span&gt;&lt;span&gt;# 因为 Ghostty&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kdepim-runtime &lt;/span&gt;&lt;span&gt;# 因为 Thunderbird&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kate &lt;/span&gt;&lt;span&gt;# 因为 VSCode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;elisa &lt;/span&gt;&lt;span&gt;# 因为 DeaDBeeF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;home/linux/gui/thunderbird.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;programs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;thunderbird&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ture&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;这些关联的配置是否可以同步，完全取决于我修改配置时有没有按照注释去同步修改其他地方的配置。这可不兴赌啊！要知道，最不可靠的就是未来的自己会不会记得遵守过去的约定，注释和文档过时也是家常便饭的事。然而，在 Dendritic 模式中，我完全可以通过同一个文件中编写不同的模块来实现跨 NixOS 与 Home Manager 的配置的同步：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;modules/desktop/thunderbird.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixos&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;desktop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plasma6&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;excludePackages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;kdePackages; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kdepim-runtime &lt;/span&gt;&lt;span&gt;# No needed if using Thunderbird.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;homeManager&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;desktop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;programs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;thunderbird&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;此时 &lt;code&gt;kdepim-runtime&lt;/code&gt; 是否启用是与 Thunderbird 这一模块是否被导入是完全一致的。&lt;/p&gt;
&lt;p&gt;为什么原先就要这么麻烦？因为通常情况下，Nixpkgs 提供的 &lt;code&gt;imports&lt;/code&gt; 功能是局限于 NixOS/Home Manager/nix-darwin 内部的，你在 Home Manager 里导入的模块无法修改外层的 NixOS 配置。与此同时，在外层的 NixOS 配置中，也难以访问 Home Manager 中的配置，除非硬编码 Home Manager 的用户名。&lt;/p&gt;
&lt;p&gt;那为什么不自定义几个 option？就像这样：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&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; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;myoption&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deadbeef&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &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;mkEnableOption &lt;/span&gt;&lt;span&gt;&quot;Enable DeaDBeeF&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &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;mkIf config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;myoption&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deadbeef&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enable &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plasma6&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;excludePackages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;kdePackages; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;elisa&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;osConfig&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &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;mkIf osConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;myoption&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deadbeef&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enable &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;home&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;packages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;当然可以！但每加一个横跨 NixOS 与 Home Manager 的程序就得写一套这样的 option，久而久之，你就创造了一个全新的复杂系统，只有上帝看得懂，真是可喜可贺可喜可贺。况且由于 Nix 的几个 LSP 实现的功能都并不够强大，这种方式在自动补全上也没有什么优势。&lt;/p&gt;
&lt;p&gt;通过上面的例子，我们可以看到 Dendritic 模式的核心优势：&lt;strong&gt;将高度耦合的配置项聚合到同一个文件中&lt;/strong&gt;。这带来了几个显而易见的好处：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;原子性：一个功能的所有相关配置都在一个模块里。启用或禁用这个功能，只需要在主机配置中添加或移除这一个模块的导入，而不需要在文件系统的多个角落里进行增删改查。&lt;/li&gt;
&lt;li&gt;可发现性：想了解一个程序或一项服务是如何配置时，不再需要在 &lt;code&gt;nixos/&lt;/code&gt;、&lt;code&gt;home/&lt;/code&gt;、&lt;code&gt;services/&lt;/code&gt; 等多个目录中来回跳转，寻找散落的配置片段。所有相关的逻辑都集中在一个地方，极大地提高了配置的可读性和可维护性。&lt;/li&gt;
&lt;li&gt;减少心智负担：不再需要通过注释或者单纯依靠记忆来维护不同配置文件之间的隐式依赖。配置本身就是自洽和内聚的。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;编写一个符合 Dendritic 模式的配置&lt;a href=&quot;#编写一个符合-dendritic-模式的配置&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;叽里咕噜说半天搞啥名堂呢，快把焚决交出来！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有的，兄弟/姐妹/any pronoun you want，有的，这不就给你安排上了！Dendritic 模式的介绍仓库里提供了一个&lt;a href=&quot;https://github.com/mightyiam/dendritic/tree/master/example&quot;&gt;最基础的模板&lt;/a&gt;，不过我个人更推荐去啃别人实际的 Dendritic 模式的配置来做参考。啃别人的仓库是一个麻烦事，因为一个显而易见的事实：个人的配置仓库不是为了让别人学习而设计的。我自然也「深受其害」，啃了半天才大概看明白配置仓库的大致结构。&lt;/p&gt;
&lt;p&gt;首先创建一个简单的目录结构，这就是接下来的配置的主要内容。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nix-config/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── flake.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── modules/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── flake/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── hosts/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── ...      # &amp;lt;--- 任何你想要的功能分类方式&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;首先自然是最基本的，给 &lt;code&gt;flake.nix&lt;/code&gt; 添加主要的输入和唯一的输出：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;flake.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;flake-parts&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github:hercules-ci/flake-parts&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import-tree&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github:vic/import-tree&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;nixpkgs&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github:NixOS/nixpkgs/nixos-unstable&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;outputs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;flake-parts&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;mkFlake &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;imports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[(&lt;/span&gt;&lt;span&gt;inputs&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;tree &lt;/span&gt;&lt;span&gt;./modules&lt;/span&gt;&lt;span&gt;)];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;import-tree ./modules&lt;/code&gt; 的作用就是导入 &lt;code&gt;./modules&lt;/code&gt; 文件夹中所有不以 &lt;code&gt;_&lt;/code&gt; 开头的 &lt;code&gt;.nix&lt;/code&gt; 文件，方便省略掉大部分的 &lt;code&gt;imports = [...]&lt;/code&gt;；&lt;code&gt;flake-parts&lt;/code&gt; 是 Dendritic 模式的核心组件；&lt;code&gt;nixpkgs&lt;/code&gt; 应该不用多说，不过使用的分叉也不一定是 &lt;code&gt;unstable&lt;/code&gt;，根据实际情况选择即可。接下来就该构建整个配置了。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;modules/flake/default.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;imports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;flake-parts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;flakeModules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 使用 flake module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &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;x86_64-linux&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 根据实际情况添加对应的平台，例如 aarch64-darwin 等。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;modules/flake/nixos.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;withSystem&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;prefix&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;hosts/&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 主机对应的 flake module 的前缀，可以修改&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;collectHostsModules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;filterAttrs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&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; lib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;hasPrefix prefix name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixosConfigurations&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;pipe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;collectHostsModules config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixos&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 此处依照实际的 NixOS 配置所在的 flake module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 删除主机配置名称的前缀，例如 `hosts/abc` -&amp;gt; `abc`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &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;mapAttrs&apos; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&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;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&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; lib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;removePrefix prefix name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 生成 NixOS 配置所需的结构&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &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;mapAttrs&apos; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&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;module&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inputs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixpkgs&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;nixosSystem &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;networking&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;hostName&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;这样一来，名称为 &lt;code&gt;&quot;hosts/&amp;lt;hostname&amp;gt;&quot;&lt;/code&gt; 的 flake module 的内容就会变成一个名为 &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; 的 NixOS 配置。在这之后，只需在 &lt;code&gt;modules/hosts&lt;/code&gt; 目录中添加主机对应的 flake module，并在该模块中导入所有该主机需要的功能即可，例如：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;modules/hosts/foobar.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixos&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;hosts/foobar&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;nixpkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;system&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;x86_64-linux&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;imports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixos; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 这些 flake module 的名称仅作为示范，不代表你只能这样取名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;core&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;hardware/cpu/intel&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;hardware/gpu/amd&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;services/caddy&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;services/ollama&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fileSystems&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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;而导入的这些模块，则写在 &lt;code&gt;modules/{core,hardware,services}/*.nix&lt;/code&gt; 这样与模块名和功能相对应的路径中。&lt;/p&gt;
&lt;h2&gt;写在结尾&lt;a href=&quot;#写在结尾&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;说实话，断更四个月然后憋出来一个三千字不到的水货文章（甚至包含这三段话），我的码字速度还是太懈怠了。虽然开的草稿越来越多，但实际上写了超过三分之一的少之又少。&lt;a href=&quot;/posts/serbia-travel-journal-1/&quot;&gt;塞尔维亚游记&lt;/a&gt;发出来已经一年多了，到现在也没写好中下两篇，以至于实际上已经快把当时的故事给忘光了。看到隔壁&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;动不动就更新一篇万字长文，压力更大了。&lt;/p&gt;
&lt;p&gt;这篇文章断断续续写了大概两个月，从刚换到 Dendritic 模式之后就开始动笔了，但是由于之前在备战考研二战，考完了又在到处旅游，实在是没什么空写东西，所以一直拖到了现在。好在赶在 2025 年的尾巴上写完了，不然 2025 年的更新状况就太难看了，可喜可贺可喜可贺。&lt;/p&gt;
&lt;p&gt;希望后面还有更多东西能够写出来吧，2026 再见！&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>杂记（三）</title><link>https://blog.hpcesia.com/posts/essays-3/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/essays-3/</guid><pubDate>Fri, 29 Aug 2025 05:09:47 GMT</pubDate><content:encoded>&lt;article&gt; &lt;h2&gt;小屋装修&lt;a href=&quot;#小屋装修&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;趁着之前赶上，有了些动力，花了点时间给小屋狠狠装修了一下。&lt;/p&gt;
&lt;p&gt;首先是把图片灯箱给换掉了。此前小屋使用的是非常轻量所以功能也很少的 MediumZoom，这个灯箱库在博文的图片里用用还行，但是遇到动态生成的图片和裁切过的图片就有点力不从心了，而&lt;a href=&quot;/musings&quot;&gt;我的 Fediverse 贴文展示页面&lt;/a&gt; 的图片都是动态生成和前端裁切过的，所以需要更换灯箱库。&lt;/p&gt;
&lt;p&gt;PhotoSwipe 是一个更重一点的灯箱库，默认的效果很好，可自定义程度也更高。选择 PhotoSwipe 的主要原因是 GoToSocial 的前端也是用的这个库，兼容性不用多说。目前只实现了 Fediverse 的图片附件的灯箱效果，从 GoToSocial 的源码来看还可以实现视频附件的灯箱效果，不过我一是还没有发过带视频附件的贴文，二是 GoToSocial 的实现是 AGPL v3 的不能直接抄，所以暂且搁置到我真的发了带视频附件的公开贴文再说。&lt;/p&gt;
&lt;p&gt;下一个重构的就是&lt;a href=&quot;/musings&quot;&gt;碎语&lt;/a&gt;页面。此前小屋的碎语页是&lt;a href=&quot;/posts/miscellaneous-notes-2/&quot;&gt;基于 RSS 的&lt;/a&gt;，写起来非常简单的代价是功能也非常少，不支持敏感内容隐藏，每个贴文的图片在 RSS 里只会有第一张（所以我干脆没有展示）。&lt;/p&gt;
&lt;p&gt;现在改为了基于调用 GoToSocial API 的方式来实现。默认情况下，GoToSocial 的绝大多数 API 端点都需要身份验证，而我不打算暴露多余的 API（比如可以设置公共时间线可以无认证访问，但是我还保留着这个实例未来加人的可能，不像公开整个时间线），所以我 Vibe Coding 了一层 Cloudflare Worker 套壳，用来把查询 API 暴露给前端。&lt;/p&gt;
&lt;p&gt;接着又把代码块的美化给换掉了。在此之前我使用的是自己手搓的代码块美化，主题切换、复制、行号等都是靠 remark 插件 + shiki 插件实现的。现在我换成了更好看功能也更多的 &lt;a href=&quot;https://expressive-code.com&quot;&gt;Expressive Code&lt;/a&gt;，并更新了一下过往文章进行适配，结果还是不错的。&lt;/p&gt;
&lt;p&gt;最后是换了一下配色方案，改成了 &lt;a href=&quot;https://catppuccin.com/&quot;&gt;Catppuccin Latte/Macchiato&lt;/a&gt;，比自己之前搓的要好看一些。&lt;/p&gt;
&lt;h2&gt;新服务器&lt;a href=&quot;#新服务器&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nix 的优势区就是管理多个主机的配置，所以在&lt;a href=&quot;/posts/miscellaneous-notes-2/&quot;&gt;把笔记本换成 NixOS 系统&lt;/a&gt;以后，我便把目光看向了服务器。但是现有的服务器不能乱动――第一次配远程 NixOS，肯定是错误百出，要是直接在现有服务器上搞，跑着的服务多半要停上几周。正好我也对现在服务器的配置和续费价格不甚满意，很快就趁着主机商周年庆打折，入手了一个新的 2C4G 云服务器。&lt;/p&gt;
&lt;p&gt;到手后 SSH 上去传一下公钥并开启仅密钥登录，然后就可以根据服务器的硬件配置写对应的 NixOS 配置，写完就可以准备推送过去了。主机商没有提供挂载任意镜像的功能，，可选的系统镜像里也没有 NixOS，所以需要自行安装。这里我参考的是 Lan Tian 的&lt;a href=&quot;https://lantian.pub/article/modify-computer/nixos-low-ram-vps.lantian/&quot;&gt;这篇文章&lt;/a&gt;，不过我的 VPS 内存足够大，所以就直接使用 nix-anywhere 来部署系统了。（PS：从 NixOS 的 TG 群里了解到还有个&lt;a href=&quot;https://github.com/bin456789/reinstall&quot;&gt;自动重装/更换系统的脚本&lt;/a&gt;，下次再远程部署 NixOS 就准备用这个了）&lt;/p&gt;
&lt;p&gt;部署 NixOS 的过程里最大的错误是图省事，没有写一个最简系统配置，而是直接在我的现有配置基础上写了对应主机的配置，结果就是状况不断，排查起来相当麻烦。安装 NixOS 的时候，LLM 出力不少，让我这个对非 NixOS 的 Linux 系统两眼一抹黑的人能够快速开始编写主机的启动配置。中间三番五次使用 nix-anywhere 部署完毕后连不上 SSH，好在主机商提高了网页 VNC，我还能看到报错信息，不至于一直重装。&lt;/p&gt;
&lt;p&gt;在成功连上部署好的 NixOS 的 SSH 之后，接下来就属于是重复性工作了。把原本 VPS 上的服务容器停掉，在 Nix 配置里启用对应的服务，把配置迁移到 Nix 上，再把数据也拉到服务器上，迁移就算完工了。迁移也有一些无伤大雅的小 Bug，比如 Forgejo 以前部署在容器里，存储的 Git 仓库的权限和 Nix 部署的不一样，chown 改了一下权限后所有仓库的文件修改时间都被刷新了；比如 Forgejo 的密钥发生变化，导致以前的 SSH 仓库镜像推送全炸了，但总的来说修起来都不难。&lt;/p&gt;
&lt;h2&gt;离开 GitHub&lt;a href=&quot;#离开-github&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;8 月 11 日，&lt;a href=&quot;https://www.theverge.com/news/757461/microsoft-github-thomas-dohmke-resignation-coreai-team-transition&quot;&gt;一则重磅消息&lt;/a&gt;在开发者圈子里传开了：GitHub 的 CEO Thomas Dohmke 辞职了，而微软不打算找一个新的 CEO，而是让 GitHub 直接由微软的 CoreAI 部门管理，这意味着 GitHub 不再是微软的一个独立子公司，并且 GitHub 会更加注重 AI 的发展 意思就是 GitHub 可以改名叫 Microsoft 365 Copilot Version Control Platform 了。虽然我还在使用薅资本主义羊毛学生免费的 GitHub Copilot Pro，没啥底气喷 GitHub 的 AI 发展方向，但也得给自己留点后路了。&lt;/p&gt;
&lt;p&gt;后路自然是 Codeberg 和自托管 Forgejo。在 Forgejo 的联邦功能基本可用之前，我选择暂时将 Codeberg 作为主要活动区域。完全脱离 GitHub 是不太现实的，我有不少东西是完全依赖于 GitHub 的，比如学生认证薅的 Copilot Pro，比如 Nix 整个生态都严重依赖于 GitHub，所以现在只是部分迁移。&lt;/p&gt;
&lt;h2&gt;Hello, Jujutsu&lt;a href=&quot;#hello-jujutsu&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://jj-vcs.github.io/&quot;&gt;Jujutsu&lt;/a&gt; 是一个兼容 Git&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 的版本管理系统，非常适合喜欢干净漂亮的提交历史的人和喜欢 Vibe Coding 的人。我自己在 Fediverse 上刷到它以后，装上使用了 Jujutsu 半个月，就已经完全离不开它了。Jujutsu 到底好在哪里呢？我觉得是非常灵活的提交管理方式和稳定的快照机制。&lt;/p&gt;
&lt;p&gt;你可以随心所欲地在任何一个你想在的提交上开始工作，可以随心所欲地去修改自己的提交历史，不管是拆分还是合并还是移动，Jujutsu 绝不会在你进行这些工作的时候跳出一堆冲突让你处理，或是让你手动处理分支的变基，不会打断工作的心流。合并和变基的冲突当然存在，但 Jujutsu 把他们放到后面去了，你可以在任何你想处理的时候去处理那些冲突，而不是每次操作都要马上处理冲突。&lt;/p&gt;
&lt;p&gt;快照机制保存了每次操作时当前提交的快照，且每次修改追踪的文件都会创建一个快照――用 Git 的方式来形容的话，就是每改一次文件都新建一个分支提交。所以，你永远不用担心手滑/手贱的自己、LLM Agent、闯进你房间的亲戚家小孩、不悦的机魂等各路神仙把你的仓库改得乱七八糟无法挽回，只需一行 &lt;code&gt;jj undo&lt;/code&gt;，仓库便会回到原来的状态。&lt;/p&gt;
&lt;p&gt;例如我喜欢一次性修改许多功能，再通过暂存来拆分提交，有时候还会使用修补功能来小幅修改提交记录。使用 Git 时，一旦手滑把不该修补的东西加进去了，再想改回来就会很麻烦。而 Jujutsu 的 squash 和空提交功能，天生就是为我这种需求而生的。我可以在当前修改前面创建任意个空的提交，然后通过交互式的 squash 将各个不同的功能拆分到新建的提交中，并随时移动到拆分的提交中进行小修小补。&lt;/p&gt;
&lt;p&gt;不过目前而言，Jujutsu 也有一些痛点。比如自带的 jj graph 在特定场合下可阅读性相当差，尤其是在我的博客的分支中：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;看到这一堆竖线，很难忍住不笑。我也尝试过 Jujutsu 的 GUI 版本 &lt;a href=&quot;https://github.com/gulbanana/gg&quot;&gt;GG&lt;/a&gt;，graph 也是一模一样，还是一大堆竖线堆成一座高山。只有 VSCode 插件 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=jjk.jjk&quot;&gt;Jujutsu Kaizen&lt;/a&gt; 的图像没那么抽象。而 VSCode 的 Git Graph 插件给出的提交图（Jujutsu 与 Git 提交同步）就很简洁直观明了：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个问题确实是影响我用 Jujutsu 用得舒服的一大弊病。&lt;/p&gt;
&lt;h2&gt;迈向封闭&lt;a href=&quot;#迈向封闭&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;8 月 25 日，&lt;a href=&quot;https://www.androidauthority.com/android-developer-verification-requirements-3590911/&quot;&gt;谷歌宣布了一个重磅的新政策&lt;/a&gt;：2026 年中起，被安装或侧载的应用的开发者必须进行实名认证。谷歌宣称此举是为「让 Android 更安全」及「保护 Android 的开放环境」，政策将于 2026 年九月在部分地区（巴西、印尼、新加坡、泰国等）生效；后续将覆盖更多地区。&lt;/p&gt;
&lt;p&gt;结合此前 8 月 14 日&lt;a href=&quot;https://bbs.oneplus.com/thread/1926504022886318086&quot;&gt;一加宣布 ColorOS 16 系统将开始限制 Bootloader 解锁&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，7 月 26 日&lt;a href=&quot;https://xdaforums.com/t/bootloader-unlocking-option-removed-from-one-ui-8-0.4751904/#post-90208099&quot;&gt;三星在 One UI 8 中移除了 Bootloader 解锁选项&lt;/a&gt;，这种事在短短一个月的时间里就上演了三次，迈向封闭已成大势所趋。&lt;/p&gt;
&lt;p&gt;我一个用着华为全家桶（除了电脑）的人，自是没有什么特别重的自由系统情结，换 Linux 系统也只是因为 Linux 的文件结构和开发体验更好。但看到所有大厂都在迈向封闭，还是有点不爽。之前 618 那会儿手机价格低的时候，有考虑过买个骁龙 8 Elite 处理器的一加安卓手机来折腾，但最后还是作罢；现在一看，8 Elite 这代怕不是安卓机最后的荣光了。8 Elite 还蹭到了高通 X Elite 的驱动和内核，或许过上两年，8 Elite 就会成为继 845 后又一个可以刷桌面系统的手机 CPU；过上五六年，还能看到不少 8 Elite 一代的「钉子户」。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;准确地说，是支持（且目前仅支持）使用 Git 作为后端。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;此前一加是最后一个完全不限制 Bootloader 解锁的国内手机大厂品牌。 &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>写于一周年 - 新的故事行将启航</title><link>https://blog.hpcesia.com/posts/1st-anniversary/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/1st-anniversary/</guid><description>小屋也算是迎来一周年纪念日了，真是可喜可贺可喜可贺。另：文章链接进行了大批量更新，此次应该是最后一次更新链接，如有打扰，非常抱歉。</description><pubDate>Tue, 19 Aug 2025 05:46:53 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;小屋也算是迎来一周年纪念日了，真是可喜可贺可喜可贺。&lt;/p&gt;
&lt;p&gt;其实我自己早已记不清小屋到底是什么时间建的了，最早使用的主题的相关仓库都已经删掉了，没法通过查 commit 记录来获取时间，所以就用了小屋的发布时间来作为小屋的建立时间。&lt;/p&gt;
&lt;p&gt;这篇文章也是 7 月初就开了草稿――因为我知道自己有多能拖更 拖了多久了都，8 月再开坑包写不完的。开坑的契机则是看到首页侧边栏的建站时间已经变成了一年（dayjs 的相对时间默认逻辑似乎是满 10 个月就显示一年），才意识到已经建站快一周年了。&lt;/p&gt;
&lt;h2&gt;回望过去一年&lt;a href=&quot;#回望过去一年&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;新的一年开始前，总得回头看看吧。有的博主会把过去一年以来的站点数据都搬上来，不过我在从 Hexo 迁移到 Astro 之后，直到最近部署了 GoatCounter 为止，将近半年的时间里没有使用网站统计工具，我之前用的自建 Unami 也把库都删了，所以这里没什么可以放的。不过也可以放一点 GoatCounter 一个月以来的访问统计数据：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第二名真是毫不意外，这种东西看的人就是多。第三名倒是有些小意外，没想到 Typst 会是第三名虽然和前两名有断崖般差距。从 GoutCounter 的操作系统统计数据来看，GoatCounter 统计到的大部分访问量应该都是活人贡献的，毕竟 AI 爬虫怎么想都会用 Linux 吧（）。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;统计的部分到这里就差不多了，一个月的数据也没啥好看的，只写这么点东西也不够一篇文章的量，索性再详细聊聊里写过的东西吧。去年 8 月的暑假，抱着分享我辛辛苦苦写的的想法，先是去了 CSDN，结果我当时没有密码管理器，把以前注册的账号密码给忘了；然后去了博客园，结果当时博客园正处于困难阶段，到处筹钱，加上还要实名申请发博客的功能，也就放弃了这个选项；最后便盯上了独立博客，使用搜索引擎找到了静态博客里用得最多的 Hexo，挑了个还将就的主题 Fluid，便使用 GitHub Pages 搭建了这个博客，发布了我的。&lt;/p&gt;
&lt;p&gt;显然，这种专业性稍微强一点的东西，除了和我一样被计算数学折磨的冤种外，是没什么人看的。于是我就水了一个，顺便给博客加上了 Twikoo 评论系统，以及去 Bing 把博客给收录了（还）。&lt;/p&gt;
&lt;p&gt;Fluid 主题挺美观的，该有的什么 SEO 啊什么 PWA 啊都有，但一些花里胡哨的功能就比较欠缺了。在后，我决定换成一个自带更多花里胡哨功能的主题。Hexo 博客里，比较出名的就是&lt;a href=&quot;https://blog.zhheo.com/&quot;&gt;张洪Heo&lt;/a&gt; 的了。我从&lt;a href=&quot;https://blog.starsharbor.com/&quot;&gt;星港&lt;/a&gt;的主题链接了解到了 &lt;a href=&quot;https://solitude.js.org/cn&quot;&gt;Solitude&lt;/a&gt; 主题，其效果足够炫酷，所以最终选择了这一主题。&lt;/p&gt;
&lt;p&gt;Solitude 主题的持久度比较高，我用了刚好半年时间（2024.09 - 2025.03）。刚开始对于这个主题我还是非常喜欢的，经过了一番简单的魔改，把它变成了&lt;a href=&quot;https://solitude.blog-archive.hpcesia.com/&quot;&gt;自己喜欢的样子&lt;/a&gt;。但很快，Hexo 的弊病就暴露出来了。&lt;/p&gt;
&lt;p&gt;Hexo 是一个比较&lt;em&gt;古老&lt;/em&gt;的静态站点框架――React 和 Hexo 是同一时代的产物，而 React 就是现代 Web 框架本身。所以，Hexo 使用的是现代 Web 框架以前的字符串拼接技术生成 HTML，并且至今也只支持直接使用 CommonJS。后者在 &lt;a href=&quot;https://github.com/HPCesia/hexo-highlighter-shiki&quot;&gt;hexo-highlighter-shiki&lt;/a&gt; 的初步开发中给了我不小苦头，最后还是抄了别人的代码，靠 ESBuild 打包解决了问题。在和 Shiki 进行搏斗的时候，我在文档里看到 Astro 是默认使用 Shiki 进行代码高亮渲染的，所以心中也就种下了改用 Astro 写一个自己的博客主题的想法。&lt;/p&gt;
&lt;p&gt;真正付诸实践则是在 25 年的 1 月初，此时的我考研失败，只有毕业论文需要花时间，于是便开始鼓捣起了博客。当时的我对 Astro 几乎没有了解，对 TypeScript 的了解仅限于给 Solitude 魔改和贡献时的那一小点积累，从 GitHub 上拉了 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt; 的源码下来就直接边抄边写边学，少量借用 LLM 补全，花费两个多月完成了一个基本可用的博客主题 &lt;a href=&quot;https://codeberg.org/HPCesia/AstralHalo&quot;&gt;Astral Halo&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;在完成绝大部分需要的功能以后，博客的开发也就放慢了脚步（事实上，抛开周年纪念前的小装修不谈，上次修改博客源码已经是一个月前了）。博客文章也放慢了脚步，六月七月都是月更状态。并不是我没写东西，只是单纯没写完不能发出来，比如拖了大半年的的中下两篇其实都写了一半多点，还有另外两篇完成度比较高但是一直拖着没写完的文章没发。开的只有标题和一点点思路的坑也有四五个，没有整理和扩充的随笔草稿也一大堆，只是单纯的不想动。除去杂谈和经验以外，我还是希望写点新的东西的，比如找一个自己比较感兴趣又比较小众的东西，深挖一下历史，然后写出来，目前开的坑有：排版、终端、TSF&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 作品。写完不一定会发出来，尤其是最后那个肯定是含 NSFW&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 内容的，发出来需要做一些心理准备。&lt;/p&gt;
&lt;h2&gt;新的开始&lt;a href=&quot;#新的开始&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;可能有人注意到了，小屋文章的永久链接不一样了。小屋最初使用 Hexo 的 abbrlink 插件，为每个文章生成随机字符串，作为永久链接使用。当时的考量是这样一来，修改标题也不会影响链接，不会导致标题和链接对不上。后来我才发现这是个伪需求――我压根不会去改已发布文章的标题，文章更新量也轮不到我费心思去想不重复的标题。所以正好在一周年之际，我把博客文章的永久链接换成了有意义的英文字符串。&lt;/p&gt;
&lt;p&gt;当然永久链接需要处理的事情也不能少――我在修改旧文章永久链接时，也加上了对旧永久链接的重定向，就像之前我更换博客主题并舍弃部分主题特定文章时那样。好在文章不算太多~~（拖更还骄傲上了）~~，花了一点时间挨个在 &lt;code&gt;astro.mjs&lt;/code&gt; 里加上了路径重定向。此外，我还删掉了一些现在看来并无用处的和重复的标签，重新整理了一遍过去的文章。&lt;/p&gt;
&lt;p&gt;下一步准备使用 API 重构一下目前&lt;a href=&quot;/posts/miscellaneous-notes-2/&quot;&gt;使用 RSS 制作的 GoToSocial&lt;/a&gt; 的&lt;a href=&quot;/musings&quot;&gt;碎语&lt;/a&gt;页面，目前出于半成品状态，正在和一些 corner case 进行搏斗。此外还准备把图片灯箱&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;库从虽然超轻量但是功能太少不好用的 &lt;a href=&quot;https://github.com/francoischalifour/medium-zoom&quot;&gt;Medium Zoom&lt;/a&gt; 换成 GoToSocial 前端也在用的 &lt;a href=&quot;https://github.com/dimsemenov/photoswipe&quot;&gt;PhotoSwipe&lt;/a&gt;，以便适配修改后的&lt;a href=&quot;/musings&quot;&gt;碎语&lt;/a&gt;页面，顺便还自动适配了 Artalk 的评论里的图片灯箱功能 虽然只有我能直接发图片。还有一个受&lt;a href=&quot;https://i.myriad-dreamin.com/&quot;&gt;纸夜姐姐&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;启发的使用 Typst 来直接编写博客文章的想法，不过目前 Typst 的手机端编辑体验实在烂透了，暂时不做过多打算。&lt;/p&gt;
&lt;p&gt;此外，本站也正式&lt;a href=&quot;https://github.com/HPCesia/blog-astral-halo-oss&quot;&gt;开源&lt;/a&gt;了。但这不是中文通常意义下的「开源」，而只是&lt;em&gt;公开网页构建必须源代码&lt;/em&gt;。这意味着你可以从这份源代码中构建一个原封不动的本站同款站点，但你不会看到我在我自己博客站点分支中的实际提交，而是定期同步的、清理了与网站生产构建无关部分的提交。用这种方式来开放源代码获取，是因为我当初把草稿部分也纳入了 Git 管理，因此我的实际提交中包含不少我还没写完的草稿，这些内容我不想公开。公开则是因为我写了 GoToSocial 的贴文展示页面，而这部分代码我不准备放到 Astral Halo 的主线中。&lt;/p&gt;
&lt;h2&gt;后话&lt;a href=&quot;#后话&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这篇文章最后一行字编写于 2025-08-19 04:22:00 (UTC+8:00)，从七月初断断续续写到现在，只能说拖延症和死线冲刺还在发力。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;rans &lt;strong&gt;S&lt;/strong&gt;exual &lt;strong&gt;F&lt;/strong&gt;iction/&lt;strong&gt;F&lt;/strong&gt;antasy &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;N&lt;/strong&gt;ot &lt;strong&gt;S&lt;/strong&gt;afe/&lt;strong&gt;S&lt;/strong&gt;uitable &lt;strong&gt;F&lt;/strong&gt;or &lt;strong&gt;W&lt;/strong&gt;ork &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;指「点击图片放大查看」的功能 &lt;a href=&quot;#user-content-fnref-3&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Typst 最常用的 LSP &lt;a href=&quot;https://github.com/Myriad-Dreamin/tinymist&quot;&gt;tinymist&lt;/a&gt; 的主要开发者 &lt;a href=&quot;#user-content-fnref-4&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>杂记（二）</title><link>https://blog.hpcesia.com/posts/miscellaneous-notes-2/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/miscellaneous-notes-2/</guid><pubDate>Thu, 03 Jul 2025 10:17:56 GMT</pubDate><content:encoded>&lt;article&gt; &lt;h2&gt;Hello, Fediverse&lt;a href=&quot;#hello-fediverse&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近在&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的蛊惑下我搭建了一个 &lt;a href=&quot;https://gotosocial.org/&quot;&gt;GoToSocial&lt;/a&gt; 实例，加入了联邦宇宙（Fediverse）。我是个起名废，所以实例的名字就在喜欢的二次元角色里面选了。在综合考虑喜爱程度、角色故事与联邦宇宙契合度和域名 hack 后，我选择的实例名称是 Trinnon――来自星穹铁道的&lt;a href=&quot;https://mzh.moegirl.org.cn/%E7%BC%87%E5%AE%9D&quot;&gt;缇宁&lt;/a&gt;，域名则是根据选定的名字简单 hack 一下的 &lt;a href=&quot;https://trin.one/&quot;&gt;trin.one&lt;/a&gt;。&lt;a href=&quot;https://mzh.moegirl.org.cn/%E7%BC%87%E5%AE%9D&quot;&gt;缇宁&lt;/a&gt;的角色背景设定之一：分身千瓣，跨越门扉，在世界各地传信，也算是与联邦宇宙的概念略有契合。&lt;/p&gt;
&lt;p&gt;联邦宇宙这个概念，最初还是看&lt;a href=&quot;https://www.eallion.com/&quot;&gt;大大的小蜗牛&lt;/a&gt;的文章了解到的。当时我还没买现在博客的域名，对联邦这个东西只觉得「看起来还行」，没啥特别想法。最近因为我自己 Memos 用法也是全部公开，加上用联邦实例还可以有人互动，所以就换成了 GoToSocial。&lt;/p&gt;
&lt;p&gt;在联邦宇宙里发贴文，目前最大感受是：写 &lt;ruby&gt;ALT&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;Alternative Text&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt; 是真费劲，经常出现 ALT 比正文还长的情况。虽然也有 ALT bot 这种使用 AI 识别图像内容生成 ALT 文本的工具，但我还是更喜欢手写。不写其实也不是不行，因为反正也没几个人会看我发的贴文。&lt;/p&gt;
&lt;p&gt;我也在博客里做了个&lt;a href=&quot;/musings&quot;&gt;简单的 Fediverse 时间线展示页面&lt;/a&gt;，目前用的是 GoToSocial 自带的 RSS 功能，将 RSS 处理为展示页面。但是这种方式不能正常地不显示某些东西，所以后续准备用 API 重构一次。&lt;/p&gt;
&lt;h2&gt;Hello, NixOS&lt;a href=&quot;#hello-nixos&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;出于对 &lt;a href=&quot;https://trin.one/@hpcesia/statuses/01JW6GKZJ7VKMJWDAEVDEBVCY9&quot;&gt;WSL 的不满&lt;/a&gt;，以及又双叒叕受到&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的&lt;a href=&quot;https://spect.im/@chlorine/statuses/01JW6J2SW73G193PZASAPRZ9TX&quot;&gt;蛊惑&lt;/a&gt;， 我把笔记本上原来装的 Windows 11 换成了 Windows 10 + &lt;a href=&quot;https://nixos.org/&quot;&gt;NixOS&lt;/a&gt; 双系统。&lt;/p&gt;
&lt;p&gt;选择 NixOS，有几个原因。琪一是因为 NixOS 的包数量够多，即便去掉 Haskell 的一堆包，也仅次于 &lt;a href=&quot;https://archlinux.org/&quot;&gt;Arch Linux&lt;/a&gt; 的包数量，并且也有类似 &lt;a href=&quot;https://aur.archlinux.org/&quot;&gt;AUR&lt;/a&gt; 的 &lt;a href=&quot;https://nur.nix-community.org/&quot;&gt;NUR&lt;/a&gt;；其二是因为决心换双系统的时候 &lt;a href=&quot;https://typst-doc-cn.github.io/guide/&quot;&gt;Typst 中文群&lt;/a&gt;里正好在聊 NixOS，看着挺感兴趣的；其三是因为 Nix 的「环境只配一次」的卖点很对我胃口，换电脑的环境配置确实让人不爽；其四是因为 NixOS 的雪花标志很适合在中间放个蓝色系的二次元角色，比如&lt;a href=&quot;https://mzh.moegirl.org.cn/%E7%90%AA%E9%9C%B2%E8%AF%BA&quot;&gt;琪露诺&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不过我对东方不熟，放&lt;a href=&quot;https://mzh.moegirl.org.cn/%E7%90%AA%E9%9C%B2%E8%AF%BA&quot;&gt;琪露诺&lt;/a&gt;似乎不太合适。于是自己 P 了个自己喜欢的&lt;ruby&gt;蓝色系二次元角色&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;格蕾修&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;上去，效果还算不错。不过在用 fastfetch 的时候才发现，zellij 只支持 Sixel 终端图像协议，而 fastfetch 的 Sixel 版 logo 不能很好的显示透明背景，有点可惜。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;MCP&lt;a href=&quot;#mcp&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近尝试用 Context7 这个 MCP 来加强 Roo Code + Copilot 的开发能力，不得不说，很猛。Context7 部分地解决了 LLM 出幻觉瞎编 API 或者调用老版本 API 的问题，对我这种喜欢用新东西的人来说很舒服。&lt;/p&gt;
&lt;p&gt;曾见过一种论调，认为 LLM 需要借助 MCP 才能正确完成一些任务，说明 LLM 还不够智能。但是人也不能立刻报出两个大数相乘的结果，需要借助计算器（MCP）或者心算（推理模型），正确使用工具本就是致力于「模仿人类行为」的人工智能应有的行为。&lt;/p&gt;
&lt;h2&gt;延毕&lt;a href=&quot;#延毕&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;是的，虽然很突兀，但是，我要延毕了。&lt;/p&gt;
&lt;h3&gt;发生什么事了&lt;a href=&quot;#发生什么事了&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;并不是因为毕业论文没写好。虽然我论文答辩答得很烂，但是结果多少还算是能看的。厦门大学有一个必修的学分，名为「创新学分」，其获取方式是：参加竞赛得奖、大创项目，或者获取专利。不幸的是，我只参加过一次数学建模竞赛，还没拿奖，而参加竞赛未获奖至多只能获得一个创新学分――毕业必修两个。结果就是，我的创新学分到月底还是不够，喜提延毕。&lt;/p&gt;
&lt;h3&gt;不走心的挣扎&lt;a href=&quot;#不走心的挣扎&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;面对延毕，有些病急乱投医。在小红书上找到，隔壁经济学院有人用一个线上答题就能拿获奖证书的水货竞赛申请成功了学分，于是我也赶紧去参加并申报剩下的一个学分。很不幸，厦大数院笑话&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&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;/a&gt;&lt;/h3&gt;
&lt;p&gt;延毕这事对我的实际影响其实不是很大。因为各种工作所需经验都很匮乏（比如前端刚需 Vue 经验，而我的水平约等于培训班两天），我本就将「回家认真复习，再战一次考研」放在了找不到工作的备选项中，而现在不过是把备选项变成了必选项罢了。在就业市场竞争越发激烈的当下，我不幸地选择了大部分人读了都没啥用的数学专业，属实有些难受。但幸运地是我有一个还算富裕的家庭，能够为我提供一个兜底的选择，也不缺我刚出来工作能挣的那点钱。&lt;/p&gt;
&lt;p&gt;每年的十二月还有一次毕业认定机会，我也就差点创新学分，完全可以不用待在学校上课，只要把现在的博客主题申请一下软著或者买一个软著就行了。理论上还可以利用延毕的时间刷实习经历，不过我更想通过读研来逃避就业问题。&lt;/p&gt;
&lt;p&gt;因为只差创新学分没有拿，我大概率是不需要再回学校待上一整个学期了。这段时间，就待在家里安静再次备考考研了。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;参看知乎问题：&lt;a href=&quot;https://www.zhihu.com/question/666296682&quot;&gt;「如何看待厦门大学数学科学学院 2024 年毕业生去向？」&lt;/a&gt;。题主虽然因为深受厦大数院所害（在大三下转外语专业跑路了），情绪很大，但厦大数院的「严格」还是可见一斑。不幸的是，我为 25 届学生的毕业率「添砖加瓦」了。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>解决 NixOS + Home Manager 配置 VSCode 出现的 settings.json 写入问题</title><link>https://blog.hpcesia.com/posts/solve-vscode-write-settings-in-nixos-home-manager/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/solve-vscode-write-settings-in-nixos-home-manager/</guid><pubDate>Mon, 16 Jun 2025 07:02:21 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;2025-08-15
&lt;ul&gt;
&lt;li&gt;更新为更完善的版本&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2025-06-16
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如果使用 Home Manager 配置 VSCode 的设置的话，因为 VSCode 启动时会写入 settings.json，导致每次打开 VSCode 都会弹出一个 settings.json 无法保存的弹窗。最简单的解决方案是直接不用 Nix 配置 VSCode。好处是简单粗暴，但是这样就需要用其他方法管理 VSCode 的配置了，和 Nix 的哲学不符。&lt;/p&gt;
&lt;p&gt;通过搜索，我找到了一个 21 年的相关 issue &lt;a href=&quot;https://github.com/nix-community/home-manager/issues/1800&quot;&gt;#1800&lt;/a&gt;，里面获赞最多的是一个 &lt;a href=&quot;https://gist.github.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa&quot;&gt;gist&lt;/a&gt;，给出了一个模块，可以让 &lt;code&gt;home.file&lt;/code&gt; 引入的文件变得可写。但是我更想使用 Home Manager 提供的 &lt;code&gt;profile&lt;/code&gt; 选项来配置我的 VSCode，于是我注意到了该 issue 下还有一个比较简短的&lt;a href=&quot;https://github.com/nix-community/home-manager/issues/1800#issuecomment-853589961&quot;&gt;评论&lt;/a&gt;，给出了第三种解决方案的可能。&lt;/p&gt;
&lt;p&gt;显然，一条 21 年的评论里的代码是没法直接用的，于是我顺藤摸瓜找到了&lt;a href=&quot;https://github.com/kamadorueda/machine&quot;&gt;评论者的 Nix 配置仓库&lt;/a&gt;（顺带一提，这位也是一个相当好用的 Nix 格式化软件 &lt;a href=&quot;https://github.com/kamadorueda/alejandra&quot;&gt;Alejandra&lt;/a&gt; 的作者），在里面找到了他最新的 &lt;a href=&quot;https://github.com/kamadorueda/machine/blob/0c61ad9d7ce988d81c4180a4d4b630d27b53a7e5/nixos-modules/editor/default.nix&quot;&gt;VSCode 配置代码&lt;/a&gt;。简单总结一下，就是改了一下 VSCode 的配置和扩展文件存储位置，再在开机时清理掉该位置的文件，把 Home Manager 生成的配置和扩展文件复制过去。这种方法既可以避免弹窗，还快速调试 VSCode 的配置，而不需要改一两行配置就要 &lt;code&gt;nix-rebuild&lt;/code&gt;；同时也保证了 Nix 配置的稳定性。&lt;/p&gt;
&lt;p&gt;但是由于用到了这位作者自己定义的一些库，并且他也不是为了 Home Manager 管理的配置编写的，这个配置代码也是不能直接用的。我这里给一个我的 NixOS 25.05 版本的 Home Manager 模块配置，以供参考：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;第一版&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;./home/linux/gui/vscode.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &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;lists&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;concatLists&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt; &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;home&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;homeDirectory&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userDataDir&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;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.data/vscode/data&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;extensionsDir&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;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.data/vscode/extensions&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pkg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pkgs&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;override &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;commandLineArgs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; concatLists &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;--extensions-dir&quot;&lt;/span&gt;&lt;span&gt; extensionsDir&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;--user-data-dir&quot;&lt;/span&gt;&lt;span&gt; userDataDir&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;imports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;./profiles&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;programs&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pkg&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;mutableExtensionsDir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# To solve VSCode wants to write settings.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# VSCode will reset per reboot/rebuild.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;systemd&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;vscode-setup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&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;&quot;VSCode Setup service&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;After&lt;/span&gt;&lt;span&gt; &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;graphical-session-pre.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Wants&lt;/span&gt;&lt;span&gt; &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;graphical-session-pre.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Install&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WantedBy&lt;/span&gt;&lt;span&gt; &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;graphical-session.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Type&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;oneshot&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;ExecStart&lt;/span&gt;&lt;span&gt; &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;getExe &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeShellApplication &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&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;&quot;vscode-setup&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rm -rf &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/User&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rm -rf &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extensionsDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mkdir -p &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mkdir -p &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extensionsDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cp -r --dereference --no-preserve=mode,ownership \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.config/Code/User&quot; &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/User&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cp -r --dereference --no-preserve=mode,ownership \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.vscode/extensions/.&quot; &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extensionsDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;第一版缺陷很多，所以我编写了第二版：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;./home/linux/gui/vscode.nix&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt; &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;home&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;homeDirectory&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;dataDir&lt;/span&gt;&lt;span&gt; &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;xdg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;dataHome&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userDataDir&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;${&lt;/span&gt;&lt;span&gt;dataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/vscode/data&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;extensionsDir&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;${&lt;/span&gt;&lt;span&gt;dataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/vscode/extensions&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;programs&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;mutableExtensionsDir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# To solve VSCode wants to write settings.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# VSCode will reset per reboot/rebuild.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;systemd&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;vscode-setup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&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;&quot;VSCode Setup service&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;After&lt;/span&gt;&lt;span&gt; &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;graphical-session-pre.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Wants&lt;/span&gt;&lt;span&gt; &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;graphical-session-pre.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Install&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WantedBy&lt;/span&gt;&lt;span&gt; &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;graphical-session.target&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Type&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;oneshot&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;UMask&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;0022&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;ExecStart&lt;/span&gt;&lt;span&gt; &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;getExe &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeShellApplication &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&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;&quot;vscode-setup&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;runtimeInputs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; pkgs; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;coreutils gnutar jq&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&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;let&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;userSrc&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;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.config/Code/User&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;userDst&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;${&lt;/span&gt;&lt;span&gt;userDataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/User&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;extSrc&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;${&lt;/span&gt;&lt;span&gt;homeDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/.vscode/extensions&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;extDst&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; extensionsDir&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;dirsToPreserve&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;workspaceStorage&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;History&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;backupCmds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builtins&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;concatStringsSep &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&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;map&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if [ -e &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; ]; then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Backing up data/User/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mv &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; &quot;/tmp/vscode-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-$$&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dirsToPreserve &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;globalStorage&quot;&lt;/span&gt;&lt;span&gt;]));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;restoreCmds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builtins&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;concatStringsSep &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&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;map&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if [ -e &quot;/tmp/vscode-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-$$&quot; ]; then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Restoring data/User/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mv &quot;/tmp/vscode-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&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;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirsToPreserve&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;set -eu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;backupCmds&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Cleaning old directories...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rm -rf &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rm -rf &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mkdir -p &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDataDir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mkdir -p &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Copying user settings from &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userSrc&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cp -r --dereference --no-preserve=mode,ownership &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userSrc&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Copying extensions from &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extSrc&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tar -h -C &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extSrc&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; -cf - . | tar -C &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; -xf - --no-same-owner --no-same-permissions --mode=&apos;u=rX,go=rX&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chmod u+w -R &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;extDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; 2&amp;gt;/dev/null || true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;restoreCmds&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Restoring and merging data/User/globalStorage...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if [ -e &quot;/tmp/vscode-globalStorage-$$&quot; ]; then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cp -rT &quot;/tmp/vscode-globalStorage-$$&quot; &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/globalStorage&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;src_storage_json=&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userSrc&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/globalStorage/storage.json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dst_storage_json=&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userDst&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/globalStorage/storage.json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if [ -f &quot;$src_storage_json&quot; ] &amp;amp;&amp;amp; [ -f &quot;$dst_storage_json&quot; ]; then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Merging data/globalStorage/storage.json with new data...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;merged_json=$(mktemp)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jq -s &apos;.[0] * .[1]&apos; &quot;$dst_storage_json&quot; &quot;$src_storage_json&quot; &amp;gt; &quot;$merged_json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mv &quot;$merged_json&quot; &quot;$dst_storage_json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Merge complete.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;Skipping storage.json merge: one or both files do not exist.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;No backed-up globalStorage found to restore.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &quot;VSCode setup complete.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;你也可以直接查看&lt;a href=&quot;https://codeberg.org/HPCesia/nix-config&quot;&gt;我的 Nix 配置文件仓库&lt;/a&gt;。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>星铁 LAND 纪念与回忆</title><link>https://blog.hpcesia.com/posts/notes-of-starrail-land/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/notes-of-starrail-land/</guid><pubDate>Fri, 23 May 2025 11:43:29 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;这是 2024 年五一假期期间居然都是一年前的事了吗，我前往上海参加&lt;a href=&quot;https://act.mihoyo.com/puzzle/hkrpg/pz_IGTUvZSn2l/index.html&quot;&gt;星铁 LAND 活动&lt;/a&gt;的旅行回忆。这也是旅行回忆这个分类里的第二篇文章。塞尔维亚的中篇在写了在写了&lt;/p&gt;
&lt;h2&gt;Day1 - 赶路休整与群友与 KTV&lt;a href=&quot;#day1---赶路休整与群友与-ktv&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于买的是 5 月 4 日的门票，所以我决定 5 月 2 日再出发前往上海。5 月 2 日一早，我便坐上了前往上海的火车。一路上，我基本都是在小桌板上用笔记本打绝区零的三测，打累了就写计算机辅助几何设计这门课程的期末大作业放松（?）一下。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6 个小时的火车旅程并不算长，很快，我就成功到达上海虹桥火车站。出火车站的时候就看到了不少穿着 cos 服进站的人；刚进入火车站的地铁，又看到了一大群提着星铁 LAND 袋子的乘客。想必这些大都是参加完当天的星铁 LAND，准备坐火车/飞机回家的人。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;到达住处后躺了大半小时，接到了同在上海的群友&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;em&gt;红白&lt;/em&gt;的邀请，前往南京路逛步行街。逛街过程说不上美好，因为人太多了，五一假期常态了属于是。本来&lt;em&gt;红白&lt;/em&gt;想去线下买点周边的，但排了半天队进了大楼以后，发现里面商店买周边还得继续排队，只能放弃这个打算。&lt;/p&gt;
&lt;p&gt;随后又接到了来着另一个群友&lt;em&gt;天使羊&lt;/em&gt;的邀请，前往纯 K 和几个参加了第一天星铁 LAND 的群友一起唱歌。由于先前逛步行街拖了不少时间，等我和&lt;em&gt;红白&lt;/em&gt;到达 KTV 的时候，几个要赶当天飞机/火车的群友正准备离开，算是一点小小的遗憾。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以一首&lt;a href=&quot;https://music.163.com/#/song?id=1480344409&quot;&gt;《未来再见》&lt;/a&gt;为结尾，聚众 K 歌环节算是圆满结束。虽然我会唱的歌数量不多，但唱完下来，嗓子还是有点累的。&lt;em&gt;天使羊&lt;/em&gt;作为发起者实力相当强悍，作为唯一的女生也是直接霸占大部分高音环节；&lt;em&gt;红白&lt;/em&gt;倒是没怎么唱，一直推脱不会唱歌。&lt;/p&gt;
&lt;p&gt;从纯 K 出来，和几个群友对付了一顿晚饭，今天就算到此为止，回去打打游戏睡觉。&lt;/p&gt;
&lt;h2&gt;Day2 - 米哈游大楼与崩三线下活动&lt;a href=&quot;#day2---米哈游大楼与崩三线下活动&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;前一天晚上一不留神打游戏打到了凌晨四点，但不管怎样，今天还是得出来逛的。早上十点，我从住处出发，前往米哈游的光启园总部参观。&lt;/p&gt;
&lt;p&gt;中午十一点半，我来到了光启园的外面。从地铁站出来的时候，还碰到个穿着米哈游工服的小姐姐，站在树荫下发着微信。一进园区，就看到了米哈游的楼下排着的长队。所幸队伍看着长，但排起来却很快，不到十分钟，我便踏入了米哈游总部大楼。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一进门，最显眼的就是各种大型周边了，比如看起来应该是 1:2 比例的七天神像，袖珍版的正机之神上半身等。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当然也有等比的可爱猫猫糕。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;除去这些大型周边外，还有琳琅满目的各种正常大小周边。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因为只开发一楼大厅参观，本身大小也不算大，大概逛个不到十分钟，米哈游就算逛完了。从米哈游大楼出来，下一站则是崩坏三在上海美罗城的线下快闪活动。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;虽说只用集三个章就可以领集章奖励，但是嘛，「来都来了」，不是吗？当然得全部打卡地点都走一遍才行！&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;快闪活动的打卡地点附加有很多前来参加活动的普通玩家 coser，当然也有官方请来负责让大伙拍照的高质量 coser。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;暴走一个小时，把所有打卡地点都走了一遍后，总算是可以回到开始的地方抽取集章奖励。当时运气比较一般，只抽到一张合影卡&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。不过值得一提的是，有一个打卡地点的打卡要求是在社交平台发布带打卡地点照片和活动 tag 的动态，而这刚好也是 B 站上一个抽奖活动的参与要求。我的意思是――&lt;em&gt;你怎么知道我那个动态中奖了？&lt;/em&gt;(*´ω｀*)&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;咳咳，言归正传。领完奖励，正好旁边也有不少群友在坐着休息，于是我也跟着凑过去蹲着玩会儿手机。玩到了下午两点，赶紧跟着大部队一起去线下音乐演出的地方占位置。但赶到的时候还是稍微晚了点，没能挤到最好的位置，只能在稍微靠边的点的位置占到最前排。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;听完演出，我又跟着大部队回到领奖的地方附加坐着。附近有与线下活动同期开放的崩坏三线下周边快闪店，本来我是不打算进去逛的，但正巧有个群友（印象里应该是&lt;em&gt;红白&lt;/em&gt;，但记不清了）预约了两个时间段的快闪店名额，已经逛过一遍了，我也就用着群友的名额进去逛了逛。逛线下周边店的结果嘛……当然是新周边喜加 N 了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;逛完又坐了十来分钟，实在是饿得不行了，下楼去肯德基对付了一顿。好在已是下午三点半，人不算太多――至少我还有位置可坐。&lt;/p&gt;
&lt;p&gt;吃完迟到的午饭，我也不想再多跑几轮打卡地点多抽几次周边了。正好离美罗城不算远的地方，有一个米游社的线下快闪周边店，我也就跑去那边看看有没有别的周边可以看看。结果嘛，到了地方才发现，人实在是太多了，只好放弃这个想法。连给米哈游送钱的机会都没有&lt;/p&gt;
&lt;p&gt;简单逛上一圈后，我和几个群友前往附近的一家自助烤肉聚餐。当时还在上交读书的群友&lt;em&gt;蓝老师&lt;/em&gt;也被&lt;em&gt;红白&lt;/em&gt;拉过来一起吃饭了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;烤肉没太多好说的，很常规的自助烤肉体验。吃完饭，有几个比较急着赶路的群友先行离开了，剩下的几个人则是跑到了深空之锚前面合影――就是上面那张 coser 照片背后的摆设。&lt;/p&gt;
&lt;h2&gt;Day3 - 星铁LAND!!!&lt;a href=&quot;#day3---星铁land&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;很不幸地，前一天晚上又没睡好觉，大概是&lt;a href=&quot;/posts/weekly-journal-2/&quot;&gt;小学生春游综合症&lt;/a&gt;犯了吧。不过这三天其实都只睡了三四个小时就是了什么大学生特种兵。&lt;/p&gt;
&lt;p&gt;总之勉强从两点睡到了早上五点，就被闹钟吵起来了。一起床，我就先在外卖上买了个小折叠凳，免得今天一天都要站着等到脚麻。等待外卖送达的时候吃了点昨天买好的面包当早餐，再收拾了一下要带进场馆的袋子，便出门拿着外卖送来的凳子出发，前往半公里外的国家会展中心。&lt;/p&gt;
&lt;p&gt;本以为早上六点来排队已经算早的了，没想到一到会场，已是一大群人在排队了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;从 6 点 等到 8 点，终于开始正式入场了。来之前就问了参加了前两天星铁 LAND 的群友，知道了一个不第一时间去排队就几乎不可能再排到的项目：匹诺康尼 VR 游览。&lt;/p&gt;
&lt;p&gt;说不可能排到，是因为这个项目体验很好的同时，单次只能容纳 10 人游玩（其中有 5 个是靠运气抽的快速体验票的位置），每轮包含上下设备的时间需要五分钟。所以，只有第一时间前往排队，才能在两个小时以内玩到这个项目。于是从安检开始我便是一路狂奔，总算是赶在比较靠前的位置，排在了 VR 项目的队伍中。&lt;/p&gt;
&lt;p&gt;好在虽然不是特别靠前，但我来得也算够早。排了一个半小时后，我总算来到了队伍的最前端。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在等待我前面一批人游玩项目的时候，跟我同一批的几个人还顺便和一旁的志愿者小姐姐聊了聊星铁 LAND 第一天的乱象。听小姐姐说，第一天的时候，上午是半天不开检票口的，伴手礼是缺周边的，排队也很少有工作人员来维持秩序；前一天志愿者招募的时候，还闹出了一大群志愿者等几个小时，结果被工作人员放鸽子的闹剧。&lt;/p&gt;
&lt;p&gt;聊了一会儿，前一批体验完了，终于轮到了我。VR 的体验相当不错，实际上是 VR + 体感椅子 + &lt;a href=&quot;https://mzh.moegirl.org.cn/%E6%B5%81%E8%90%A4&quot;&gt;流萤&lt;/a&gt;的 ASMR。反正我是一脸傻笑地走出来的&lt;/p&gt;
&lt;p&gt;从 VR 项目出来，就不用考虑买官方的场贩周边了――排队的人和 VR 项目一样多，搞不好得下午四点才能排到。伴手礼中有一个纪念票，可以通过游玩项目来集章兑换一个小周边盲盒，所以我也就到处找找人比较少的项目排队集章，排累了就到处转悠看看场馆布设。下面就随便放点图吧。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;特别大的三只猫猫糕，看起来应该是充气的。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;等比的罗浮龙尊雕像，属于本次展出的牌面了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一尊在场馆内的 KFC 附近当气氛组的金人雕像。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以及一个等比的匹诺康尼钟表小子雕像。而在钟表小子雕像下面，有一对 coser 正在排队接受合照。这对 coser 分别 cos 的是&lt;a href=&quot;https://mzh.moegirl.org.cn/%E6%B5%81%E8%90%A4&quot;&gt;流萤&lt;/a&gt;和装甲「&lt;a href=&quot;https://mzh.moegirl.org.cn/%E8%90%A8%E5%A7%86&quot;&gt;萨姆&lt;/a&gt;」，&lt;a href=&quot;https://mzh.moegirl.org.cn/%E8%90%A8%E5%A7%86&quot;&gt;萨姆&lt;/a&gt;的这身 cos 道具服做工还行，我也去凑热闹合了个影。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;走半天走不动了，就在群聊水一水，找今天同在星铁 LAND 的群友会合。聚在那一块的群友大概有七八个，已经记不得有哪些人了，还有印象的只有&lt;em&gt;凋零的迷罪&lt;/em&gt;和&lt;em&gt;磁暴步兵54&lt;/em&gt;两位，一位是身高一米九的狱警，另一位举着个希儿表情包牌子蹲着（昨天崩三快闪活动里他也举着这个牌子），很难不印象深刻。&lt;/p&gt;
&lt;p&gt;跟算不上很熟（至少不记得名字）的群友们随便寒暄了几句，也饿得差不多了。虽然场馆里面也有肯德基，但是排队的人很多，要等上一个小时才有饭吃，所以我选择临时离场，和&lt;em&gt;红白&lt;/em&gt;一起去楼下的麦当劳吃饭。结果因为吃饭，错过了群友们的合影环节，有点可惜。&lt;/p&gt;
&lt;p&gt;吃完饭上楼，慢慢把章集完。走在路上却是看到一群人围着一位坐着轮椅的&lt;a href=&quot;https://zh.moegirl.org.cn/%E5%8F%AF%E5%8F%AF%E5%88%A9%E4%BA%9A%C2%B7%E5%85%B0%E5%BE%B7&quot;&gt;可可利亚&lt;/a&gt; coser，打开 B 站刷了一会儿动态才知道，原来是&lt;a href=&quot;https://zh.moegirl.org.cn/%E5%8F%AF%E5%8F%AF%E5%88%A9%E4%BA%9A%C2%B7%E5%85%B0%E5%BE%B7&quot;&gt;可可利亚&lt;/a&gt;的中文 CV &lt;a href=&quot;https://zh.moegirl.org.cn/%E6%B2%90%E9%9C%8F&quot;&gt;沐霏&lt;/a&gt;，于是赶紧过去排队合了个影。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;逛到下午三点左右，就算是逛得差不多了。离场回民宿躺了一个小时，又被群友叫去聚餐。这次是吃海底捞。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;吃完这顿，这个五一假期旅行就算是结束了。回到民宿睡了几天来第一次好觉，第二天中午就坐火车回学校了。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;本文中所有「群友」，均特指我加入的一个米哈游游戏相关 QQ 群的群友。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一种印有二次元角色的透明小卡片，可以放在相机前面用于和二次元角色合影。 &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>Hello, Authelia</title><link>https://blog.hpcesia.com/posts/hello-authelia/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/hello-authelia/</guid><pubDate>Thu, 15 May 2025 13:54:24 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;什么是 Authelia&lt;a href=&quot;#什么是-authelia&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.authelia.com/&quot;&gt;Authelia&lt;/a&gt; 是一个开源的身份验证和授权服务器，它通过 Web 界面提供应用程序的两因素认证（2FA）和单点登录（SSO）。它作为反向代理的伴侣，能够允许、拒绝或重定向请求。&lt;/p&gt;
&lt;h2&gt;为什么是 Authelia&lt;a href=&quot;#为什么是-authelia&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;随着服务器上的服务越来越多，为每个服务都设置一个单独的密码实在是有些麻烦了（而且还加重 &lt;a href=&quot;https://github.com/dani-garcia/vaultwarden&quot;&gt;VaultWarden&lt;/a&gt; 负担），更直接的原因是 &lt;a href=&quot;https://gethomepage.dev/&quot;&gt;Homepage&lt;/a&gt; 不支持用户密码登录功能，而反向代理的密码功能用起来又实在是不舒服，因此我需要一个 SSO 应用，用于统合各个服务，并为无登录系统的服务添加一个好用的登录系统。&lt;/p&gt;
&lt;p&gt;其实 1Panel 上是有现成的 SSO 应用 &lt;a href=&quot;https://logto.io/zh-CN/&quot;&gt;Logto&lt;/a&gt; 可以部署的，但问题在于：Logto 刚需 PostgreSQL，而我不想在小服务器上部署这种比较重的应用，因此我只能选择支持 SQLite 的 Authelia。&lt;/p&gt;
&lt;h2&gt;使用 1Panel 部署轻量 Authelia&lt;a href=&quot;#使用-1panel-部署轻量-authelia&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于我个人使用 &lt;a href=&quot;https://1panel.cn/&quot;&gt;1Panel&lt;/a&gt; 来可视化管理我的服务器，因此我写了一个 1Panel 的本地应用，方便使用 1Panel 的功能。由于应用写得有点拉胯，暂不打算 PR 到官方或第三方仓库，你可以在我的 &lt;a href=&quot;https://github.com/HPCesia/1panel-apps/&quot;&gt;GitHub 仓库&lt;/a&gt;上获取&lt;a href=&quot;https://github.com/HPCesia/1panel-apps/tree/main/apps/authelia&quot;&gt;该本地应用&lt;/a&gt;，放到服务器上就可以快速部署了。个人的轻量级使用环境建议部署 lite 版本，可以省去其他服务（目前只有 lite 版本，全量版本因为自己暂时用不上，还没做）。&lt;/p&gt;
&lt;p&gt;安装完成后先不急着使用，先打开应用的安装目录，在 data 目录下找到 configuration.yml 文件，这里就是 Authelia 的配置文件。以下是应用自带的默认配置文件，我将需要修改的部分进行了高亮。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;configuration.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;tcp://:9091&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;authentication_backend&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;/config/users_database.yml&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;totp&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;disable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;issuer&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;authelia.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 改为你的域名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;identity_validation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;reset_password&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;jwt_algorithm&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;HS512&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;identity_providers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;oidc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;jwks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;example&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 随便改个名字&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;algorithm&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;RS256&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;sig&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&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;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;secret &quot;/config/secrets/oidc/jwks/rsa.2048.key&quot; | mindent 10 &quot;|&quot; | msquote&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;session&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;cookies&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;authelia_session&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 随便改个名字&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;domain&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;example.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 改为你的域名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;authelia_url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://authelia.example.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;expiration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1 hour&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;inactivity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;5 minutes&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;remember_me&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1 week&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;access_control&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;default_policy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;deny&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rules&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;domain&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;public.example.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 改为你的域名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;policy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;bypass&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;domain&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;private.example.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 改为你的域名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;policy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;one_factor&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;domain&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;secure.example.com&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 改为你的域名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;policy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;two_factor&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;regulation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;max_retries&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;find_time&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;2 minutes&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ban_time&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;5 minutes&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;/config/db.sqlite3&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;notifier&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;filesystem&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/config/notification.txt&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# smtp: # 要用 smtp 就把上面的注释掉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;#   username: &apos;test&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;#   password: &apos;password&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;#   address: &apos;smtp://mail.example.com:25&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;#   sender: &apos;admin@example.com&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着要修改保存在文件中的各个机密：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;STORAGE_ENCRYPTION&lt;/code&gt;：应为不低于 20 位的随机字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SESSION_SECRET&lt;/code&gt;：应为不低于 64 位，且仅包含大小写字母与数字的随机字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JWT_SECRET&lt;/code&gt;：应为不低于 64 位，且仅包含大小写字母与数字的随机字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HMAC_SECRET&lt;/code&gt;：应为不低于 64 位，且仅包含大小写字母与数字的随机字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oidc/jwks/rsa.2048.key&lt;/code&gt; 与 &lt;code&gt;oidc/jwks/rsa.2048.key.pub&lt;/code&gt;：应为使用 RSA 方法生成的、位数不低于 2048 的一对公私钥&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所有机密均可通过 Authelia 提供的生成器生成，在容器终端中执行命令即可：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;随机字符串：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;authelia&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crypto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--charset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alphanumeric&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RSA 密钥对：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;authelia&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crypto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pair&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rsa&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--directory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/config/secrets/oidc/jwks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--file.private-key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rsa.2048.key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--file.public-key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rsa.2048.key.pub&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后修改 users_database.yml，添加上自己的账户，其中密码需要在容器终端中执行命令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;authelia&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crypto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;argon2&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;&apos;password&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;或者直接生成随机密码：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;authelia&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crypto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;argon2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--random&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--random.length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--random.charset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alphanumeric&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后将 &lt;code&gt;Digest&lt;/code&gt; 的内容放到 &lt;code&gt;password&lt;/code&gt; 字段中，Authelia 就算是部署完成了。&lt;/p&gt;
&lt;h2&gt;站点接入单点登录&lt;a href=&quot;#站点接入单点登录&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;当我们部署的站点较多的时候，管理大量非公开站点的登录信息就成了一个问题。如果只是单人使用，或许还可以靠密码管理工具来简单管理；但使用人数一多，光是帮每个使用者注册账户就够喝一壶了。Authelia 这类单点登录工具便为此而生。下面我以官方文档中没有示例的 &lt;a href=&quot;https://alistgo.com/zh/&quot;&gt;Alist&lt;/a&gt; 接入为例，演示如何为一步步为一个支持 OIDC 登录，但是没有 Authelia 教程的站点接入 Authelia。&lt;/p&gt;
&lt;p&gt;阅读 Alist 文档，可以找到 Alist 单点登录的 callback 链接：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://your.alist.domain/api/auth/sso_callback\?method=sso_get_token&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://your.alist.domain/api/auth/sso_callback\?method=get_sso_id&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;于是可以根据这个链接使用 Authelia 设置单点登录。首先在 Authelia 的 configuration.yml 中添加如下设置：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;configuration.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;identity_providers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;oidc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;clients&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;alist&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;client_name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Alist&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;client_secret&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;$pbkdf2-sha512$310000$c8p78n7pUMln0jzvd4aK4Q$JNRBzwAo0ek5qKn50cFzzvE9RXV88h1wJn5KGiHrD0YKtZaR/nCb2CJPOsKaPK0hjf.9yHxzQGZziziccp6Yng&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 示例密钥哈希值，对应客户端示例密钥为 `insecure_secret`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;authorization_policy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;one_factor&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;redirect_uris&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://alist.example.com/api/auth/sso_callback?method=sso_get_token&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://alist.example.com/api/auth/sso_callback?method=get_sso_id&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;scopes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;openid&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;profile&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;userinfo_signed_response_alg&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;none&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;token_endpoint_auth_method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;client_secret_post&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Alist 使用 POST 进行单点登录，不设置会报错，提示使用该设置。&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后，在 Alist 的单点登录设置页面选择平台为 OIDC，设置如下选项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;单点登录客户端 ID&lt;/strong&gt;: &lt;code&gt;alist&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单点登录客户端机密&lt;/strong&gt;: &lt;code&gt;insecure_secret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sso oidc 用户名键&lt;/strong&gt;: &lt;code&gt;preferred_username&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单点登录端点名称&lt;/strong&gt;: &lt;code&gt;https://authelia.example.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;重启 Authelia，退出 Alist 登录，现在就可以通过单点登录登录到 Alist 了。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;一些设置项的来历&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sso oidc 用户名键&lt;/strong&gt;: 来自 Authelia 的文档，一部分集成指南中使用了类似的配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单点登录端点名称&lt;/strong&gt;: 先随意设置了一个名称，报错信息显示其访问了 .well_know-known 路径，所以使用 Authelia 部署根路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;站点外挂登录系统&lt;a href=&quot;#站点外挂登录系统&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;还有一些站点根本没有用户登录这个功能，但有时候我们又不想对外公开这个站点，因此我们需要为网站外挂一个登录系统。Authelia 便可以很好地承担这项任务，对于 1Panel 用户来说，只需要在网站的配置文件中添加少量代码，即可为网站接入 Authelia 的登录系统。&lt;/p&gt;
&lt;p&gt;1Panel 的网站管理使用的是基于 Nginx 的 OpenRestry，因此只要是基于 Nginx 的反向代理网站管理系统，都可以参考接下来的配置方法。&lt;/p&gt;
&lt;p&gt;打开 1Panel 中需要外挂登录的网站配置页面，找到反向代理一栏，添加一个新的反向代理，修改源文如下：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; /internal/authelia/authz {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_pass &lt;/span&gt;&lt;span&gt;http://127.0.0.1:9091/api/authz/auth-request&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 取决于 Authelia 部署的位置与端口号&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Host $host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Original-URL $scheme://$http_host$request_uri&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-Proto $scheme&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-Host $http_host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-URI $request_uri&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-Ssl &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-For $remote_addr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Original-Method $request_method&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Original-URL $scheme://$http_host$request_uri&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Forwarded-For $remote_addr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Content-Length &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Connection &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_pass_request_body &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_next_upstream &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; timeout invalid_header http_500 http_502 http_503&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_redirect &lt;/span&gt;&lt;span&gt;http:// $scheme://&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_http_version &lt;/span&gt;&lt;span&gt;1.1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_cache_bypass &lt;/span&gt;&lt;span&gt;$cookie_session&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_no_cache &lt;/span&gt;&lt;span&gt;$cookie_session&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后修改默认的反向代理源文，添加一段内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; / {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request &lt;/span&gt;&lt;span&gt;/internal/authelia/authz&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request_set &lt;/span&gt;&lt;span&gt;$user $upstream_http_remote_user&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request_set &lt;/span&gt;&lt;span&gt;$groups $upstream_http_remote_groups&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request_set &lt;/span&gt;&lt;span&gt;$name $upstream_http_remote_name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request_set &lt;/span&gt;&lt;span&gt;$email $upstream_http_remote_email&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Remote-User $user&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Remote-Groups $groups&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Remote-Name $name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Remote-Email $email&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;auth_request_set &lt;/span&gt;&lt;span&gt;$redirection_url $upstream_http_location&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;error_page &lt;/span&gt;&lt;span&gt;401&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=302&lt;/span&gt;&lt;span&gt; $redirection_url&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_pass &lt;/span&gt;&lt;span&gt;http://127.0.0.1:23423&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;Host $host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;proxy_set_header &lt;/span&gt;&lt;span&gt;X-Real-IP $remote_addr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;就算大功告成了。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>杂记（一）</title><link>https://blog.hpcesia.com/posts/miscellaneous-notes-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/miscellaneous-notes-1/</guid><pubDate>Mon, 05 May 2025 14:59:47 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;因为更新时间实在是波动极大，月记/周记已经不能描述这一系列杂记的更新时间了明明是你拖更拖久了导致的吧 ，所以本系列直接叫杂记了。诶这个人怎么这么起名废啊，你看隔壁&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;就起名一套一套的。反观这个人连自托管的 Git Forge 平台都懒得改名，博客也只想得到小屋这种烂大街名。&lt;/p&gt;
&lt;h2&gt;需要被推着走的人&lt;a href=&quot;#需要被推着走的人&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在一次次拖延中，我的论文总算是给导师交上了初稿。其实也不算初稿，因为还没有查重，不过也算是告一段落了，可以稍微休息几天，打打游戏放松一下。&lt;/p&gt;
&lt;p&gt;如果专心写论文的话，这份初稿大概半个月前就该交到导师手上了。但是这段时间里我花了不少时间在搓博客代码、打游戏和随缘找工作中渡过，直到导师来催论文了，我才紧赶慢赶地把论文搞完――第一次来催初稿的时候我论文甚至还没有开始动笔。这属于是我这个 DDL&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 战士日常了。&lt;/p&gt;
&lt;p&gt;我刚才说说到了「随缘找工作」。正所谓「金三银四」，到了四月底，春招已经快结束了，我却还在随缘找工作，完全不上心。这大概是因为我有「后路」：家里虽说不算大富大贵，但也算是小有资产，还轮不到我来赚钱养家，实在找不到工作也可以选择回家继承家业。这使得我在找工作这方面没有 DDL 可言，于是 DDL 战士就开始华丽地摆烂了。&lt;/p&gt;
&lt;p&gt;我是一个需要被推着走的人。在大二那年，我就意识到了这一点。那时我开始了持续至大四的学习状态：上课刷手机，偶尔看看教材自学一下勉强跟进度，能独立（含查资料）做完作业就算成功。得到的结果是：大部分专业课程，我的分数都比较一般，只有几门重实践的课分数好看点。&lt;/p&gt;
&lt;p&gt;类似的状态曾出现在我的初三与高一上的时候，那段时间我上课的时候，右手里一定揣着一个小 mp3 在看小说。高一下的时候，因为差点被老师抓现行，以及上课看小说对成绩影响很大，我丢掉了 mp3，只在中午、下午与晚上的时候，在宿舍里偷偷玩手机。那时我有学校的规则推着走，最后成绩至少还算说得过去。&lt;/p&gt;
&lt;p&gt;对我自己来说，这种性格感觉改也不知道怎么改了。「学习搭子」这种机制大概会有点用，或者是花钱找人管也不失为一种办法。就连这篇文章都是在「再不更新就会被博客寥寥几个读者来问」的状态下完成的。&lt;/p&gt;
&lt;h2&gt;Hello, Codeberg&lt;a href=&quot;#hello-codeberg&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; 这个非盈利代码仓库托管服务商，我还是从小氯那里知道的。&lt;/p&gt;
&lt;p&gt;Codeberg 很小众——小众到整个站点最高 star 的仓库 &lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;Forgejo&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 也只有 2.2k star。这个 star 数量是什么概念呢？GitHub Copilot Pro 对「知名开源仓库的维护者」免费开放，而这个「知名开源仓库」的要求是 1k star。Forgejo 刚刚超过这个门槛的一倍，而整个 Codeberg 上，也只有三个仓库达到了这一门槛。&lt;/p&gt;
&lt;p&gt;Codeberg 不受支持——例如 Netlify 的持续集成部署只支持从 GitHub、GitLab、Bitbucket 和 Azure 中导入项目，其他的 Git 托管服务商用都没法用。&lt;/p&gt;
&lt;p&gt;另一方面，FOSS&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 爱好者可能会喜欢 Codeberg，因为它是非盈利组织，且使用 GPL 3.0 协议的 Forgejo 提供服务。以及 Forgejo/Gitea 在某些方面比 GitHub 做的更好，比如多语言支持——GitHub 需要手动在 README 里添加其他语言 README 链接，比起 Forgejo/Gitea 根据页面语言选择对应版本 REAMD 还是差太多了。&lt;/p&gt;
&lt;p&gt;此外，小众也有小众的好处——GFW&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 并没有注意到这个站点，不需要再折腾半天不同软件的代理配置了（这大概也是最现实的因素了）。&lt;/p&gt;
&lt;p&gt;目前我只迁移了 Astral Halo 项目——也就是我现在在用的博客模板——到 Codeberg 上，然后通过 Forgejo/Gitea 的镜像推送功能，每次提交都会推送到 GitHub 的仓库中，触发 Netlify 的重新构建（博客主题的 Demo 站点）。而现在的博客源码我则是放在了自部署的 Forgejo 上，同样通过镜像功能推送到 GitHub。&lt;/p&gt;
&lt;p&gt;4 月 13 日中午，惊闻 &lt;a href=&quot;https://github.com/orgs/community/discussions/156515&quot;&gt;GitHub 主动禁止了来自中国（港澳似乎也受影响）的 IP 对 github.com 子路径的访问&lt;/a&gt;。虽然&lt;a href=&quot;https://www.githubstatus.com/incidents/jfvgcls9swln&quot;&gt;在 4 月 13 日晚上，GitHub 恢复了中国地区的访问&lt;/a&gt;，并声明这是网络配置错误导致的问题，但也说明做两手准备总不是坏事，有必要提前做好准备，把 GitHub 上的一些仓库做个备份。当然，也可以干脆把重心移出 GitHub，转向其他 git 托管平台。此时 Codeberg 就成为了一个脱离 GitHub 的优秀选择。&lt;/p&gt;
&lt;p&gt;为什么还是用国外的 git 托管服务商？因为国内的几个 git 托管服务商一个比一个看不下去。Gitee 生态烂的同时还有代码文本审查机制，J**aScript 这种笑话还是快端下去吧。GitCode 本身就是毒瘤，有着从 CSDN 继承来的登录后复制（虽然众所周知前端挡不住人，但还是恶心），还从 GitHub 上镜像了海量的仓库和组织。其实镜像仓库不算什么大事，仓库开源出来还能不让人 clone 了？但是 GitCode 还顺便把账号、组织的公开信息等一起镜像了，之前有段时间还不标注原仓库链接，这就很恶心了。&lt;/p&gt;
&lt;p&gt;综上，小众、未被屏蔽且服务端开源的 Codeberg 就成为了离开 GitHub 的一个好去处。Codeberg 当然也有他自己的风险，但 git 托管服务商哪有没风险的呢？自托管放在 VPS 要考虑 VPS 提供商是否靠谱；放在家里的 NAS 上虽然服务本身靠谱，但光是申请固定 IP 就够喝一壶了。至少，现在 Codeberg 用起来还算不错，不是吗？&lt;/p&gt;
&lt;h2&gt;Hello, Rime&lt;a href=&quot;#hello-rime&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;大约一年以前，我就在 PC 上使用 &lt;a href=&quot;https://github.com/rime/librime&quot;&gt;Rime&lt;/a&gt; 输入法了，使用的是&lt;a href=&quot;https://github.com/rime/weasel&quot;&gt;小狼毫&lt;/a&gt;和&lt;a href=&quot;https://github.com/iDvel/rime-ice&quot;&gt;雾凇拼音&lt;/a&gt;。但是手机上，我则是一直使用的华为自带的小艺输入法。在遇到了几次刚在 QQ 群聊完某个东西，打开淘宝里面看到相关推荐的事后，我决定在手机上也改用 Rime。&lt;/p&gt;
&lt;p&gt;既然要用 Rime 了，前端自然是要用开源的。在 F-Droid 里翻了一下，安卓的开源 Rime 前端就两个选择：&lt;a href=&quot;https://f-droid.org/packages/org.fcitx.fcitx5.android&quot;&gt;小企鹅输入法&lt;/a&gt;和&lt;a href=&quot;https://f-droid.org/packages/com.osfans.trime&quot;&gt;同文输入法&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;小企鹅输入法使用手感很好，但是它存在一个问题：它的 Rime 配置文件是放在 data 目录下的，我还用的是阉割掉安卓 12 无线调试设置页面的华为鸿蒙 4 系统，不方便通过 &lt;a href=&quot;https://shizuku.rikka.app/zh-hans/&quot;&gt;Shizuku&lt;/a&gt; 来访问 data 目录内容。结果就是我只能手动连接数据线到电脑上才能同步用户词典数据。&lt;/p&gt;
&lt;p&gt;同文输入法则可以自定义 Rime 配置目录路径，从而可以通过 Syncthing 实时与电脑上的用户词典进行同步。但是我能找到的所有主题配置都非常不顺手，打字时很容易莫名其妙打出一些错误的内容。并且似乎是因为主题太老以及同文输入法本身配置过于自由的原因，几乎所有其他输入法中可以通过滑动来浏览的菜单，在同文输入法都需要按翻页键才能实现。同时同文输入法的很多主题都年久失修，偶尔会出现崩溃的情况。&lt;/p&gt;
&lt;p&gt;最后我还是选择了小企鹅输入法。手动同步虽然麻烦了点，但本身词库同步也不是什么需要特别频繁进行的操作，每个月拿一天时间出来同步一下数据就好。&lt;/p&gt;
&lt;h2&gt;Hello, Artalk&lt;a href=&quot;#hello-artalk&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;4 月初，我把小屋的评论换成了 Artalk。一方面，是因为 Twikoo 管理评论实在是太太太麻烦了，对于一些错误的评论，想修改会非常麻烦。比如我有时候会把 Twikoo 用于隐藏设置面板的用户名用于回复评论，这是不应该出现的情况。但如果我想修改这一用户名，就需要删除全部评论，再将导出并修改的评论数据重新导入 Twikoo。另一方面，我的 2H2G&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 的 VPS 在精简掉不常用的服务后，还有一半多点的内存没用上，部署一个 Artalk 正合适。&lt;/p&gt;
&lt;p&gt;Artalk 的评论区我并没有添加自定义样式，而是直接使用 Artalk 自己的样式。这主要是因为我正在使用的框架 Astro 对 CSS 的 tree-shaking&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; 不够强，未被使用的评论系统的自定义样式也会被打包到构建产物中。而我的博客整理出了一个主题 Astral Halo，我如果写了 Artalk 自定义样式，也应该放到这个主题中，导致主题打包产物体积膨胀。&lt;/p&gt;
&lt;p&gt;另一方面，也是因为早些时候给 Twikoo 搓自定义样式花了很多精力才搞好，有点懒得动手。所以，在我找到解决方案，或者上游解决了这个问题之前，我就先用着 Artalk 的默认样式了。&lt;/p&gt;
&lt;h2&gt;Hello, WezTerm&lt;a href=&quot;#hello-wezterm&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;怎么这么多 Hello 环节啊。&lt;/p&gt;
&lt;p&gt;WezTerm 是一个 Rust 编写的跨平台终端仿真器，使用 Lua 作为配置文件。相比于 Windows Terminal，WezTerm 的自定义程度更高，性能更好，也不存在一些神必快捷键冲突。其跨平台的特性和基于 Lua 的配置文件也使得 WezTerm 可以在多种系统的桌面环境共享同一套配置文件。&lt;/p&gt;
&lt;p&gt;考虑到 WezTerm 的稳定版本已经超过一年没有更新了，此时更建议使用 nightly 版本。nightly 版本相比稳定版本修复了不少 bug，比如在 WSL2 中使用 yazi 时，稳定版本会炸掉，而 nightly 版本则不会出现该问题。&lt;/p&gt;
&lt;h2&gt;一篇故事&lt;a href=&quot;#一篇故事&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近才看到 &lt;a href=&quot;https://github.com/zloirock/core-js/blob/master/docs/zh_CN/2023-02-14-so-whats-next.md&quot;&gt;core.js 作者的故事&lt;/a&gt;，一个如此符合下面这张梗图的压抑的故事。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果你没有看过上面链接中的文章，我建议你看一下――我相信能够来到小屋的读者，有耐心读完那篇长文。&lt;/p&gt;
&lt;h3&gt;开源的幻觉&lt;a href=&quot;#开源的幻觉&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;开源会给一些人带来一种幻觉：「你不做有的是人做」。你可以在很多地方看到类似的言论，比如「美国要是禁止国人参与 Linux 开发，国内就自己分叉一个」、「开源库总会有人审查代码安全，不用担心内藏病毒和后门」，以及在 &lt;a href=&quot;https://github.com/zloirock/core-js/issues/1179&quot;&gt;core.js 关于这篇文章的 issue&lt;/a&gt; 中&lt;a href=&quot;https://github.com/zloirock/core-js/issues/1179#issuecomment-1428787965&quot;&gt;出现的&lt;/a&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The community at large will pick it up and maintain it. Your legacy is intact. Such is FOSS.&lt;/p&gt;
&lt;p&gt;整个社区会接手并维护它。你的遗产是完整的。这就是开源软件的魅力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;那篇文章中提前对此给出了&lt;a href=&quot;https://github.com/zloirock/core-js/blob/d99bd3f20044bca033d82feedd30bcf4b371fd86/docs/2023-02-14-so-whats-next.md?plain=1#L363&quot;&gt;回应&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Q: &lt;strong&gt;这是开源的，我们将分叉（fork）它，滚开。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A: 我经常看到这样的评论，有人甚至试图用分叉吓唬我。我已经说过太多次了，如果有人能分叉并正确维护 &lt;code&gt;core-js&lt;/code&gt;，我会很高兴——在没有人维护的情况下，分叉有什么意义呢。现在我根本没有看到任何人试图为 &lt;code&gt;core-js&lt;/code&gt; 添加一些重要的东西，或者至少定期做出贡献。项目应该跟进每个新的 JavaScript 引擎版本，更新兼容性数据，修复或至少考虑每个引擎的每个新错误（无论多大的错误），查看并实现每个可能的新的 JavaScript 功能，最大限度地正确执行，测试并考虑每个现代引擎或老引擎的每个版本的具体细节。这是一项艰苦的工作，你准备好了吗，并且有所需的知识和时间吗？举个例子，当我在监狱里时，Babel 说他们搞不定：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「Talk is cheap, show me your code」。虽然说出这话的 Linus&lt;sup&gt;&lt;a href=&quot;#user-content-fn-7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; 本人也因为偷偷摸摸踢走 Linux 的俄罗斯维护者&lt;sup&gt;&lt;a href=&quot;#user-content-fn-8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; 而「塌房」了，但这话对上文提到的幻觉依旧有用。因为上文提到的幻觉，实质上是给出了这样的回答：「Someone will show you the code, but &lt;strong&gt;NOT ME&lt;/strong&gt;」。&lt;/p&gt;
&lt;h3&gt;莫名的恶意&lt;a href=&quot;#莫名的恶意&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我不知道这种莫名的恶意从何而来：怨恨软件作者任何与该软件无关的言论，比如「如何去除 Vim 启动页面中的『帮助乌干达的可怜儿童』」，比如 core.js 作者因为在 npm 包安装过程中添加了寻求赞助的提示被大量辱骂。引用那篇长文中的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;开发人员喜欢使用免费的开源软件——免费，效果好。他们对背后数千小时的开发不感兴趣，他们对项目背后那个真人的问题和需求不感兴趣。他们认为，提及这些就是对他们个人空间的侵犯，甚至是对他们个人的冒犯。对他们来说，这些开源项目，就是一些齿轮，应该自动耦合，不应该有任何噪音，也不应该要他们参与。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;好人应有好报&lt;a href=&quot;#好人应有好报&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;好人没好报的故事，我见过太多了。从互联网方面看，有上面那样得不到回报的开源库维护者，有免费分享的资源被淘宝/闲鱼/拼多多等平台的贩子倒卖的，有免费帮助他人结果因为做的没付费的好反被辱骂的，我都或多或少见过实例。&lt;/p&gt;
&lt;p&gt;而从现实方面看，「得益」于各路媒体总是将「歌颂面对苦难的精神」搞成「歌颂苦难」，各种行业领头人没工资，家人一直住在贫困农村的故事已经屡见不鲜了；抛开这些故事，也有「不是你撞的你为什么要扶」这种令全国社会道德大滑坡的事迹，什么免费送水/食品的人因为送得不够「好」反被指着骂的情况也算是屡见不鲜了。&lt;/p&gt;
&lt;p&gt;好人应有好报，我如此认为。所以我向这位致力于维护开源仓库的作者捐赠了 140 元――和目前的 AI 产品常用定价 20 美元一致。&lt;/p&gt;
&lt;h2&gt;后话&lt;a href=&quot;#后话&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本次月记的脚注格外的多，大概是因为最近写论文找参考文献找魔怔了吧（笑）。还有一部分考虑，是小屋确实有一些读者了。虽然数量不多，但确实有考虑他人阅读感受的必要，姑且也算是一个好习惯吧。&lt;/p&gt;
&lt;p&gt;这篇月记拖了两周才写好，原计划是 4 月 21 日发布，现在都拖到五一假期结束了，不能再拖了。为了达成月更，所以四月底&lt;a href=&quot;/posts/my-awesome-windows-apps/&quot;&gt;水了一篇文章&lt;/a&gt;出来凑数。希望以后不会再水了……吧。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Deadline 的缩写，一般代指截止日期。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;也是 Codeberg 自己使用的 Git 托管服务，从 Gitea 分叉而来。 &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自由开源软件（Free and Open Source Software）的简称。 &lt;a href=&quot;#user-content-fnref-3&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;长城防火墙（Great Firewall）的简称，代指中国大陆地区对部分网站实行的包括但不限于 IP 屏蔽、DNS 劫持、间歇性阻断等措施。 &lt;a href=&quot;#user-content-fnref-4&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;xHyG，代指服务器的配置，x 表示虚拟处理器核心数量，y 表示内存容量（GB）。 &lt;a href=&quot;#user-content-fnref-5&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;前端优化术语，指像摇掉树上的枯枝烂叶一样，去除未被使用的代码的前端性能优化技术。 &lt;a href=&quot;#user-content-fnref-6&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linus Benedict Torvalds，Linux 内核的发明人与核心维护者。 &lt;a href=&quot;#user-content-fnref-7&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linus 通过&lt;a href=&quot;https://lwn.net/ml/all/CAHk-=whNGNVnYHHSXUAsWds_MoZ-iEgRMQMxZZ0z-jY4uHT+Gg@mail.gmail.com/&quot;&gt;邮件&lt;/a&gt;支持了这一&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e90b675cf942e50c70e8394dfb5862975c3b3b2&quot;&gt;提交&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-8&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>My Awesome Windows Apps</title><link>https://blog.hpcesia.com/posts/my-awesome-windows-apps/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/my-awesome-windows-apps/</guid><description>记录一些个人用过的优质 Windows 软件</description><pubDate>Mon, 21 Apr 2025 15:39:02 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;前言&lt;a href=&quot;#前言&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这篇文章记录的是我个人用过或者云过的优质 Windows 软件。软件介绍中会记录软件的官网，避免迷路；对于开源软件，还会额外记录软件的源代码仓库地址。&lt;/p&gt;
&lt;p&gt;所有软件均按首字母进行排序。&lt;/p&gt;
&lt;p&gt;标记说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：我个人喜欢的软件。&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：开源软件。&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：多语言软件，指至少同时包含中文和英文的软件。&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：&lt;strong&gt;只能&lt;/strong&gt;使用命令行操作的软件，不包括 TUI 软件。&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：&lt;strong&gt;必须&lt;/strong&gt;付费才能使用的软件。&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;：存在某些问题的软件，会具体说明。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AI 工具&lt;a href=&quot;#ai-工具&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;AnythingLLM &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#anythingllm-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://anythingllm.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/Mintplex-Labs/anything-llm&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Cherry Studio &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#cherry-studio-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://cherry-ai.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/CherryHQ/cherry-studio&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;整合式的 LLM 对话软件，可以使用各家的 API，连接各种 MCP 进行对话/翻译/助理等工作。&lt;/p&gt;
&lt;h3&gt;LM Studio &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#lm-studio&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://lmstudio.ai/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;功能强大的 LLM 本地部署工具。适合高端显卡用户，可以方便地配置各种模型参数，并下载适合自己显卡的模型。&lt;/p&gt;
&lt;h3&gt;Ollama &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#ollama--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://ollama.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/ollama/ollama&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;轻量的本地 LLM 部署工具，适合消费级显卡用户使用，可以自动混合使用 GPU 与 CPU 进行模型推理。相比 LM Studio，Ollama 的国内网络环境拉取模型速度比较快，但是没有 GUI 页面，CLI 使用和 Docker 比较类似。&lt;/p&gt;
&lt;h2&gt;安全&lt;a href=&quot;#安全&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Bitwarden &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#bitwarden-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://bitwarden.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/bitwarden/clients&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;开源的在线密码管理器，可以自行部署&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。有浏览器扩展和 Windows 应用。&lt;/p&gt;
&lt;h3&gt;Gpg4win &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#gpg4win-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gpg4win.org/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpg4win.git&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;适用于 Windows 系统的 GnuPG 官方发行版。主要作用是给 GitHub 提交加一个 Verified 标志。&lt;/p&gt;
&lt;h3&gt;KeePass &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#keepass-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://keepass.info/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://sourceforge.net/projects/keepass/&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;强大且可定制的开源本地密码管理器。&lt;/p&gt;
&lt;h2&gt;包管理器&lt;a href=&quot;#包管理器&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Chocolaty &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#chocolaty&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://chocolatey.org/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/chocolatey/choco&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 命令行包管理器，有&lt;a href=&quot;https://github.com/chocolatey/ChocolateyGUI&quot;&gt;配套 GUI&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;Scoop &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#scoop-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://scoop.sh/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/ScoopInstaller&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 命令行软件安装器，有一定的包管理能力。&lt;/p&gt;
&lt;h3&gt;UniGetUI &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#unigetui--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.marticliment.com/unigetui/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/marticliment/UniGetUI&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 上各种 CLI 包管理器的整合 GUI。&lt;/p&gt;
&lt;h3&gt;Winget &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#winget-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/zh-cn/windows/package-manager/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/microsoft/winget-cli/&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 程序包管理器服务的客户端接口。&lt;/p&gt;
&lt;h2&gt;开发工具&lt;a href=&quot;#开发工具&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;GitUI &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#gitui&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gitui-org/gitui&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rust 版 LazyGit。作者给出的 BenchMark 中，GitUI 在解析整个 Linux 的源代码仓库时，用时为 LazyGit 的一半，占用内存更是不到十分之一，且更加稳定。&lt;/p&gt;
&lt;h3&gt;LazyGit &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#lazygit-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;好用的 Git TUI，适合不想记 Git 命令行操作又懒得开 Git GUI 的情况。&lt;/p&gt;
&lt;h2&gt;浏览器&lt;a href=&quot;#浏览器&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本节所有软件默认带 &lt;span&gt;&lt;/span&gt; 标记。一个现代浏览器要是还不支持多语言，不如直接埋了算了。&lt;/p&gt;
&lt;h3&gt;Chrome &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#chrome&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.google.com/chrome/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/chromium/chromium&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;市占率最高的浏览器，也是绝大多数网页的主要兼容对象。Google 的同步功在大陆地区属于不可用状态，需要自行配置代理使用。&lt;/p&gt;
&lt;h3&gt;Firefox &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#firefox&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mozilla.org/zh-CN/firefox/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://searchfox.org/mozilla-central/source&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;唯一的非营利属性主流浏览器（虽然市占率已经低得不能看了（悲））。Firefox 的同步功能在国内也能流畅访问，这点算是优势了。此外 Firefox 还高度可自定义，可以自己搓 CSS、调配置，来获得真正「自己的」浏览器。但是魔改一时爽，更新火葬场。&lt;/p&gt;
&lt;h3&gt;Floorp &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#floorp-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://floorp.app/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/Floorp-Projects/Floorp&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基于 Firefox ESR 的开源浏览器，更新较慢，支持多行/垂直标签页和工作区功能（多行/垂直标签页设置需要手动打开）。Floorp 也自带并默认开启了很多实用的 Firefox 配置项，属于是懒人福音版 Firefox。&lt;/p&gt;
&lt;h3&gt;LibreWolf &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#librewolf&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://librewolf.net/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://codeberg.org/librewolf/source&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Microsoft Edge&lt;a href=&quot;#microsoft-edge&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/edge&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;微软自带的浏览器，纵向标签页和工作区还是比较好用的。且同步功能国内无需魔法即可访问，作为 Chrome 的替代品还是不错的。&lt;/p&gt;
&lt;p&gt;此外这个浏览器还是「不可替代」的，因为牢软在 Windows 11 中将系统里的网页链接设置为只能跳转到 Edge 打开，卸掉 Edge 直接不能打开，有点恶心人了（反垄断法呢，救一救啊）。&lt;/p&gt;
&lt;h3&gt;Thorium &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#thorium&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://thorium.rocks/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/Alex313031/Thorium&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Chromium 性能天花板，号称是最快的浏览器，低配置特攻。隐私保护上比 Chrome 强很多，去掉了很多谷歌的遥测，但终究还是 Chromium，Manifest V3 还是逃不掉的&lt;/p&gt;
&lt;h3&gt;Zen &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#zen&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://zen-browser.app/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/zen-browser/desktop&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zen 是一个基于 Firefox 的浏览器，Arc 浏览器平替，只支持垂直标签页。&lt;/p&gt;
&lt;h2&gt;视频&lt;a href=&quot;#视频&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Potplayer &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#potplayer-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://potplayer.daum.net/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;强大的多媒体播放器。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;：&lt;a href=&quot;https://github.com/FFmpeg/web/blob/master/src/shame#L63&quot;&gt;违反 FFmpeg 公共许可证&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;MPV &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#mpv-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mpv.io/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;功能强大的多媒体播放器，默认 GUI 较简陋，但可扩展性极强。有一个开箱即用的 lazy-mpv 项目，更适合普通人使用。&lt;/p&gt;
&lt;h2&gt;同步&lt;a href=&quot;#同步&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;KDE Connect &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#kde-connect-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://kdeconnect.kde.org/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://invent.kde.org/network/kdeconnect-kde&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;KDE 旗下用于电脑与手机协同的开源软件，可以共享剪贴板、跨设备访问文件、用手机遥控电脑、通过电脑查找手机位置、在电脑上查看手机的通知等。&lt;/p&gt;
&lt;h3&gt;Syncthing &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#syncthing--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://syncthing.net/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/syncthing/syncthing&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;文件夹同步软件，可以在不同设备中同步文件夹。自带 Web GUI，但是只能命令行启动。可以自行配置开机静默启动的脚本，或使用第三方包装器。&lt;/p&gt;
&lt;h2&gt;图像处理&lt;a href=&quot;#图像处理&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Inkscape &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#inkscape-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://inkscape.org/zh-hans/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://gitlab.com/inkscape/inkscape&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;专业的矢量图编辑器。&lt;/p&gt;
&lt;h3&gt;Krita &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#krita-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://krita.org/zh-cn/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://invent.kde.org/graphics/krita&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;KDE 旗下的开源专业绘画软件。&lt;/p&gt;
&lt;h3&gt;Paint.NET &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#paintnet&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.getpaint.net/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;轻量级的图像编辑软件，适合不想启动 PhotoShop 这种重量级软件的场合。类似于 Notepad 和 IDE 的使用场景区别。&lt;/p&gt;
&lt;h2&gt;文本编辑器&lt;a href=&quot;#文本编辑器&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Micro &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#micro&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/zyedidia/micro&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;轻量级 TUI 文本编辑器，Nano 的替代品。其快捷键符合 Windows 用户的习惯，也有 Nano 同款快捷键提示栏，学习曲线很平整。还自带简单的语法高亮，也可以添加 lua 插件，兼具一定的可拓展性。&lt;/p&gt;
&lt;h3&gt;NeoVim &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#neovim&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://neovim.io/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/neovim/neovim/&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TUI 文本编辑器，适合轻中量级文本编辑场景。使用 Lua 作为配置文件，可扩展性很强，可以通过配置与扩展支持 LSP，喜欢用 Vim 的话可以花时间把 NeoVim 配置成 IDE。&lt;/p&gt;
&lt;h3&gt;Notepad 3 &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#notepad-3-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://rizonesoft.com/downloads/notepad3/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/rizonesoft/Notepad3&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;轻量级文本编辑器，适合用来干查看日志、调整配置文件、临时编写简单脚本的轻量使用场景，不用打开 VSCode 或其他 IDE。&lt;/p&gt;
&lt;h3&gt;Visual Studio Code &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#visual-studio-code--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/microsoft/vscode&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;开源&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;的 GUI 文本编辑器，Electron 的性能巅峰之作，微软的开源项目头牌之一。&lt;/p&gt;
&lt;p&gt;一点简单的使用建议：通过不同的配置文件和工作区来管理 VSCode，保证默认情况下能以最快速度打开 VSCode 而不必等待无用插件加载。&lt;/p&gt;
&lt;h2&gt;下载&lt;a href=&quot;#下载&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Aria2 &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#aria2-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://aria2.github.io/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/aria2/aria2&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Internet Download Manager &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#internet-download-manager-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.internetdownloadmanager.com/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载速度很好、网页嗅探能力很强的下载器。&lt;/p&gt;
&lt;h3&gt;Motrix &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#motrix--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://motrix.app/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/agalwood/Motrix&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aria2 的包装版，使用修改的 Aria2 作为内核。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;：自 2023 年后不再维护&lt;/p&gt;
&lt;h2&gt;压缩&lt;a href=&quot;#压缩&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;7-Zip &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#7-zip-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.7zip.com/cn/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://sourceforge.net/projects/sevenzip/&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;老牌开源压缩软件，界面比较简陋。&lt;/p&gt;
&lt;h3&gt;Bandizip &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#bandizip-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bandisoft.com/bandizip/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;免费好用的压缩软件。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;：目前最新版的免费版本会有无法关闭的广告，甚至有桌面弹窗广告。可以通过下载&lt;a href=&quot;https://www.bandisoft.com/bandizip/old/6/&quot;&gt;无广告的旧版&lt;/a&gt;来解决该问题。&lt;/p&gt;
&lt;h3&gt;NanaZip &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#nanazip--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/M2Team/NanaZip&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基于 7-Zip 的开源压缩软件，优化了 GUI 以及 Windows 10/11 上的使用体验。&lt;/p&gt;
&lt;h2&gt;音乐&lt;a href=&quot;#音乐&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Dopamine &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#dopamine--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://digimezzo.github.io/site/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/digimezzo/dopamine-windows&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;界面美观清爽的开源音乐播放器。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;：不能识别音乐标签内的歌词&lt;/p&gt;
&lt;h3&gt;Listen1 &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#listen1-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://listen1.github.io/listen1/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/listen1/listen1_desktop&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;N 合一的国内在线音乐平台播放器，可以不用安装国内的几个音乐平台的客户端了。&lt;/p&gt;
&lt;h3&gt;MusicPlayer2 &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#musicplayer2-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/zhongyang219/MusicPlayer2&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;好用的本地音乐播放器。&lt;/p&gt;
&lt;h3&gt;Nora &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#nora--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://noramusic.netlify.app/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/Sandakan/Nora&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基于 Electron 和 React 的音乐播放器。&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;: 无法播放部分未处理的 FLAC 格式音乐。&lt;/p&gt;
&lt;h3&gt;Salt Player for Windows &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#salt-player-for-windows-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://moriafly.com/program/spw.html&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安卓上广受好评的 &lt;a href=&quot;https://moriafly.com/program/salt-player.html&quot;&gt;Salt Player&lt;/a&gt; 的 Windows 版本，目前处于开发测试阶段，需要在 Telegram 群上获取测试版本安装包。&lt;/p&gt;
&lt;h2&gt;邮件&lt;a href=&quot;#邮件&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Thunderbird &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#thunderbird--&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.thunderbird.net/zh-CN/&quot;&gt;官网&lt;/a&gt; | 源代码&lt;/p&gt;
&lt;p&gt;Mozilla 旗下的开源邮件客户端，界面不太现代，但是使用可以使用插件修改。&lt;/p&gt;
&lt;h3&gt;Mailspring &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#mailspring-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://getmailspring.com/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/Foundry376/Mailspring&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;游戏&lt;a href=&quot;#游戏&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Epic &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#epic&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.epicgames.com/store/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;赠送大量游戏的游戏平台。&lt;/p&gt;
&lt;h3&gt;GOG &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#gog&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gog.com/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;售卖未加密（DRM-free）游戏的游戏平台&lt;/p&gt;
&lt;h3&gt;Playnite &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#playnite-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.playnite.link/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/JosefNemec/Playnite/&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;开源的本地游戏管理平台，可以管理各个游戏平台上的游戏与本地的游戏。优势在于统一管理分散在各种不同平台的游戏，并通过插件提供统一的游戏信息统计。如果玩的游戏的平台很混乱，或者玩的很多游戏是没有比较细游戏数据统计的，或者干脆就是本地的游戏，可以考虑使用该软件整合所有游戏。&lt;/p&gt;
&lt;h3&gt;Steam &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#steam&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://store.steampowered.com/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用体验上最好的游戏平台，靠着使用体验来让人买正版游戏。&lt;/p&gt;
&lt;h2&gt;终端&lt;a href=&quot;#终端&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Alacritty &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#alacritty&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://alacritty.org/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/alacritty/alacritty&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rust 编写的高性能跨平台终端模拟器。速度比 WezTerm 更快，但是功能支持少一些（如连字特性）。使用 YAML 作为配置文件，没有图形化配置界面。是少数支持触控屏使用的终端模拟器。需要使用 Tmux 才能实现其他终端的一些功能。&lt;/p&gt;
&lt;h3&gt;Warp&lt;a href=&quot;#warp&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.warp.dev/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;嵌入 AI 功能的终端模拟器。颜值高，功能多，但是强制登录后使用。&lt;/p&gt;
&lt;h3&gt;WezTerm &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#wezterm&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://wezterm.org/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/wezterm/wezterm&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rust 编写的高性能跨平台终端模拟器。使用 Lua 作为配置文件，可扩展性和配置文件可复用性都很强。&lt;/p&gt;
&lt;p&gt;正式版本长期（一年）未更新，但是开发并未暂停，一部分 BUG 可以通过使用 nightly 版本解决。&lt;/p&gt;
&lt;h3&gt;Windows Terminal &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#windows-terminal-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/zh-cn/windows/terminal/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/microsoft/terminal&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 11 自带的终端模拟器。颜值高，集成 Windows 和微软的部分功能（如 WSL、Azure 等）。&lt;/p&gt;
&lt;h2&gt;自定义&lt;a href=&quot;#自定义&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Rainmeter &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#rainmeter-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.rainmeter.net/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/rainmeter/rainmeter&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;知名的桌面美化软件。&lt;/p&gt;
&lt;h3&gt;Sucrose Wallpaper Engine &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#sucrose-wallpaper-engine-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Taiizor/Sucrose&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wallpaper Engine 的开源替代品。&lt;/p&gt;
&lt;h3&gt;Wallpaper Engine &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#wallpaper-engine-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.wallpaperengine.io/&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;著名的小红车，为桌面添加各式各样的动态壁纸以及&lt;strong&gt;滥用&lt;/strong&gt;地使用它传输资源。&lt;/p&gt;
&lt;h3&gt;WindHawk &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;#windhawk-&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://windhawk.net/&quot;&gt;官网&lt;/a&gt; | &lt;a href=&quot;https://github.com/ramensoftware/windhawk&quot;&gt;源代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;各种实用的 Windows 软件修改的集合。常见用处是修改 Windows 11 天怒人怨的右键菜单与开始菜单。&lt;/p&gt;
&lt;h2&gt;BLACKLIST&lt;a href=&quot;#blacklist&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;虽然是 Awesome 软件，但黑名单感觉还是有必要记一个的。&lt;/p&gt;
&lt;h3&gt;360、2345 等一众全家桶&lt;a href=&quot;#3602345-等一众全家桶&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;味大，无需多言。典型的有 360、2345、百度、腾讯、搜狗、瑞星等，尽量避免下载这些全家桶软件。&lt;/p&gt;
&lt;p&gt;其中 360 安全卫士极速版可用于快速清理被各种全家桶污染的系统，自己卸载起来也还算简单；几个输入法可以使用，但需要火绒之类的软件清理弹窗广告。&lt;/p&gt;
&lt;h3&gt;Notepad++&lt;a href=&quot;#notepad&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;作者曾表示会在不认可其政治观点的使用者的源代码中添加随机字符（虽然作者随后称之为玩笑）。&lt;/p&gt;
&lt;p&gt;即便你有审查其代码下毒情况的能力与精力，也不建议花费在这个有众多相似生态位替代品的软件上。&lt;/p&gt;
&lt;h2&gt;致谢&lt;a href=&quot;#致谢&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本篇文章灵感来自于 &lt;a href=&quot;https://github.com/0PandaDEV/awesome-windows&quot;&gt;awesome-windows&lt;/a&gt; 项目。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;自行部署建议使用 Rust 编写的轻量版本 &lt;a href=&quot;https://github.com/dani-garcia/vaultwarden&quot;&gt;VaultWarden&lt;/a&gt;。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VSCode 绝大部分是开源的，但是少部分功能（如微软账号登录和遥测）和官方插件（如 Pylance）是闭源的。 &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>记一次犯蠢导致的数据丢失</title><link>https://blog.hpcesia.com/posts/data-loss-by-foolish-mistake/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/data-loss-by-foolish-mistake/</guid><pubDate>Sun, 30 Mar 2025 07:28:00 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;发生了什么&lt;a href=&quot;#发生了什么&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/posts/monthly-journal-4/&quot;&gt;月寄（四）&lt;/a&gt;中有提到，我因为之前在用的电脑突然坏了，换了一台新电脑。过了一段时间，旧电脑修好了，我自然是要把数据转移到新电脑上的。&lt;/p&gt;
&lt;p&gt;一开始，我是用的局域网无线传输，受宿舍的路由器小水管限制，速度只能说相当便秘。所以就先传了一些小文件，比如 ssh 私钥、一些当时想起来了的配置文件，以及没有上传到在线存储库的代码之类的。等到传完我存的两个 G 多点的教材电子书之后，我就受不了这传输速度了。&lt;/p&gt;
&lt;p&gt;但问题在于，我的两个电脑的接口配置比较尴尬。新电脑有雷电 4 接口，但是没 RJ45 网口；旧电脑有 RJ45 网口，但是只有 USB Gen2 Type-C 口，正好错开，没法一根线互传。雷电 4 的扩展坞又价格不菲，所以我最后选择直接把旧电脑上的硬盘拆下来装在新电脑上来传文件。&lt;/p&gt;
&lt;p&gt;但是我忘了一件事——我也没考虑过——旧电脑的两块硬盘，是组了 RAID0 的。事后诸葛亮一下，也是有不少迹象说明了这个事实，比如我的旧电脑 D 盘容量是正正好好的 1T，超出了硬盘的物理容量。&lt;/p&gt;
&lt;p&gt;但是我当时并未考虑这些，只是在插上硬盘后，发现没有直接显示，于是去 Win 11 的磁盘管理那里给旧电脑的硬盘点了下「新建卷」。当 Windows 提示我这个硬盘里全是 RAW 数据，需要格式化的时候，我才发现有点不对劲，赶紧把硬盘拆了重新装回旧电脑。果不其然，进不去系统了，甚至 BIOS 里找不到另一张旧硬盘。&lt;/p&gt;
&lt;p&gt;之后又是调 BIOS 设置，又是做 PE 系统（还好前两天想着可能新电脑会用上 PE 系统，才买了个 U 盘），又是各种软件恢复分区恢复数据的，各家 AI 也问了一圈，花了两个多小时，也只能看到旧电脑的部分目录信息。进一步恢复需要 DiskGenius 的专业版，还不知道行不行得通。&lt;/p&gt;
&lt;p&gt;考虑到重要文件其实之前就已经转移出来了，剩下的基本都是各种游戏，我选择不再浪费更多时间，直接格式化重装系统完事。反正这台旧电脑最后要给家里长辈用，交过去之前肯定要重装系统的。&lt;/p&gt;
&lt;h2&gt;清点损失&lt;a href=&quot;#清点损失&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;既然决定放弃剩下的数据，那就该清点一下这次犯蠢导致的损失了。&lt;/p&gt;
&lt;p&gt;比较心痛的是在一开始局域网转移数据的时候落下的 WSL 中的 .zshrc 配置文件。当初花了两天多的时间才配好一个用起来顺手性能也不错的 zsh，而且当时也没写经验纪录，丢了还是挺可惜的。&lt;/p&gt;
&lt;p&gt;其次是几个玩 MOD 的游戏的存档。Mod Organizer 2 的不同 MOD 配置独立存档的功能在这时候反而害了我，因为 Steam 云存档管不到。以及有个游戏玩的不是整合包，而是我自己一点点配的 MOD，整理的 MOD 列表和花时间做的冲突兼容补丁也没了。&lt;/p&gt;
&lt;p&gt;再之后就是几个比较难找的黄油资源了，不过平时因为都待在宿舍，也不会拿出来玩，丢了就丢了吧。&lt;/p&gt;
&lt;p&gt;C++、Python 和 Rust 的一些学习的时候写的代码丢了可能也算损失，不过这部分代码我自己看了都嫌丢人，还是不算在损失里了。&lt;/p&gt;
&lt;p&gt;剩下的被丢掉的大部分数据都是在云端有备份的，最多就是一些资源受限于百度云无 SVIP 的超绝下载速度和破除限制插件的用量限制，需要花不少时间才能下回来。&lt;/p&gt;
&lt;p&gt;总的来说，损失还处于可接受的范围。就是损失的原因太蠢了，想跑回去给自己扇个耳光让自己想清楚自己到底在干啥。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>月寄（四）</title><link>https://blog.hpcesia.com/posts/monthly-journal-4/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/monthly-journal-4/</guid><pubDate>Sun, 23 Mar 2025 11:54:26 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;前言&lt;a href=&quot;#前言&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;是久违的月记！本次月记记录时间为：2 月 10 日 - 3 月 23 日。这些天都是在写论文、改代码和打游戏中度过的，如果有一直等着我更新月记的朋友，真的非常非常抱歉（鞠躬）。&lt;/p&gt;
&lt;h2&gt;毕业寄&lt;a href=&quot;#毕业寄&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;又到了一年一度的毕业寄了。考研成绩上个月已经出来了，我只有 297 分，属于是烂得惨不忍睹了。一起考研的舍友倒是考得不错，拿了 412 分 (我口嗨也只敢写 404 分，后面还跟个 not found)，初试排名第二，想必是十拿九稳了。虽说今年分数普遍低，297 分接受调剂至少是能去个一般的学校读研的，不过为了读研而读研，实在是有点难看了。&lt;/p&gt;
&lt;p&gt;既然不能读研，就得准备工作了。我的专业此时就非常地尴尬——我熟悉的是前端开发和数值方法两个完全不搭边的领域。前端开发相关岗位普遍要求计算机相关专业，而且还需要掌握 Vue、React 等框架；而数值方法相关岗位则普遍要求有独立的数学建模能力，这又恰巧是我的弱项。&lt;/p&gt;
&lt;p&gt;目前先投了个拼多多的前端开发岗，还没笔试，希望问题不大。去不去是另一回事，至少得有点笔试面试经验是吧。21 号还去参加了一个学校组织的双选会，只投出去两份纸质简历，大概会是一轮游。&lt;/p&gt;
&lt;p&gt;毕业论文也在紧张刺激地进行当中了。花了两天时间写了个 Typst 的厦大本科毕业论文模板，用惯了 Typst 以后， 真的回不去了。&lt;/p&gt;
&lt;p&gt;论文本身倒是没写多少，深度学习这方面实在是有些玄学，调参和炼丹调配方简直如出一辙，都是看结果调整 magic number。我知道其中确实有某种深层的原理，但我没能力也没动力了解，毕竟又不是写硕士博士论文，要求这么高干嘛。&lt;/p&gt;
&lt;p&gt;导师倒是不怎么急，这周才告诉我该写初稿了。我各种笔记整理了不少，写个综述算是绰绰有余了，正文写什么东西还是没啥头绪。&lt;/p&gt;
&lt;h2&gt;更换电脑&lt;a href=&quot;#更换电脑&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;旧电脑的离去&lt;a href=&quot;#旧电脑的离去&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;非常不幸地，与我相伴了大学四年时光的笔记本，在 3 月 21 日周五这天突然开机失灵。&lt;/p&gt;
&lt;p&gt;其实这台电脑开机键失灵有一段时间了，所以我一般不会关机。奈何宿舍在工作日的 0-6 点会断电，虽然一般来说，断电后过一阵子，笔记本就会进入 Windows 系统的休眠模式，第二天早上只需要点几下鼠标就能唤醒。但有时候也会出现点鼠标不能唤醒的情况，这时候就需要按开机键唤醒休眠了。&lt;/p&gt;
&lt;p&gt;在此之前，开机键失灵的问题是华硕的开机键使用的是薄膜键盘，使用超过两年后（经典过保就坏的计划报废），薄膜的触点就可能黏连在一起，导致开机失灵。解决方法就是拆开开机键，用牙签或是镊子手动把两片薄膜挑开 （什么赛博微创手术）。&lt;/p&gt;
&lt;p&gt;但是 21 号不一样。面对开机键的失灵，我像往常一样把薄膜挑开又装回去，但笔记本并未像往常一样正常地开机。鉴于此时插拔电源时，电源指示灯还能正常的亮起，我并未太在意，在网上翻找了一些攻略后，选择按住开机键来释放静电。&lt;/p&gt;
&lt;p&gt;但这一按就按出事来了。也许是因为忘记了拔掉电源排线，按完三十秒开机键后，笔记本不仅没有正常开机，反倒是插拔电源时电源指示灯也不会亮起了。这种一般是主板出了点问题，比如南桥炸了之类的，我自己手上的工具是搞不定的，于是只能寄修。寄修花费倒是不算大，加上快递费用也没到 500 元。&lt;/p&gt;
&lt;h3&gt;新电脑的到来&lt;a href=&quot;#新电脑的到来&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;寄修本身不是啥大事，但问题在于：我还有论文要写，还有几个安排在之后几天的计算机相关岗位的笔试。&lt;/p&gt;
&lt;p&gt;而且论文需要高性能笔记本跑代码，正好临近毕业，也差不多是时候换电脑了。所以我选择直接买了一台新电脑——联想 Thinkbook 16p。&lt;/p&gt;
&lt;p&gt;其实这个点买台 4060 显卡的笔记本，多少是有点亏的，尤其是我自己预算其实很充足的情况下。因为到 3 月底，搭载 RTX 50 系显卡的中高端游戏本就该上架了，一台 5080 显卡的笔记本，算上国补和加配内存硬盘，也只要一万六左右就能拿下，而我自己是出得起这个钱的。事实上，我本来也是打算买一台 4080 显卡的笔记本的，但问题是我想要的 4080 笔记本，京东自营没有一个是有货的；而非京东自营的发货速度又不如干脆等电脑修好。于是我选择了 Thinkbook 16p，一台 4060 显卡全能本。&lt;/p&gt;
&lt;p&gt;选择 4060 显卡的笔记本还有一点，就是 5060 显卡的笔记本还要再等一个多月才会上，显得我现在提前买不那么亏（笑）。以及能给家里省五千块钱，虽然也不缺我这五千，省点总是好的。反正也不是不能用是吧，我 2060 能用 4 年，打游戏也没觉得有多难受，4060 自然也不会有问题。&lt;/p&gt;
&lt;p&gt;此外，Thinkbook 16p 本身的外观设计和噪音控制我也还算满意，平时用着基本是听不到声音的，打打游戏噪音也没多大，还算不错。屏幕素质还算将就，16:10 的屏幕比例，以及支持 PD 的雷电 4 接口，在外面写写代码也能看。&lt;/p&gt;
&lt;p&gt;电脑刚到的兴奋劲已经过了，写着写着，就越来越后悔。写论文似乎是个伪需求——之前的数据和代码都不在，写也写不了多少东西，初稿也没到 DDL，不急于这一时。但是电脑已经联网激活了，七天无理由退货算是用不了了，还是就此为止吧，买完后悔也不是一次两次了。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当你有机会做出选择的时候，不要让自己后悔。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;宝贵而又无谓的时间&lt;a href=&quot;#宝贵而又无谓的时间&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;白白浪费的时间&lt;a href=&quot;#白白浪费的时间&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/a&gt;&lt;/h3&gt;
&lt;p&gt;我「不爱看」动画番剧。我的硬盘里存储着全集的《BangDream It’s MyGO!!!》 和 《Girl Bands Cry》，两部我久闻盛名的少女乐队番剧&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，但是我把它们下载下来以后，就再也没打开过。我想过在坐飞机的时候，时间正好可以拿来补补番——自认为多少算个二次元，不看点番成何体统。但实际情况是，我飞机上并没有打开下载好的番剧，而是在玩「毫无意义」的数独。&lt;/p&gt;
&lt;p&gt;为什么我会想着在坐飞机的时候补番呢？因为那段时间恰好是「不那么有意义」的。我担心，甚至恐惧着，长时间的观看番剧，会浪费掉我「本该有意义的时间」。&lt;/p&gt;
&lt;h3&gt;自己骗自己&lt;a href=&quot;#自己骗自己&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;但是，对浪费时间的恐惧，于我而言，只是一个伪命题。没有选择花费在补番上的时间，它们并没有去到多少「有意义」的事情上。因为害怕浪费时间而没有做的某件事，只不过是自己骗自己。&lt;/p&gt;
&lt;p&gt;不过，自己骗自己，多少也是有点用的吧。&lt;/p&gt;
&lt;p&gt;我给自己的手机设置了「健康时间手机」的限制——每个应用&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;每天使用时长不能超过半小时。这个限制有三种状态：第一种，我记得设置的 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;h3&gt;思考的时间&lt;a href=&quot;#思考的时间&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;上面三种限制，除去越来越麻烦的流程本身，还有随着流程变麻烦而越来越长的思考时间。回忆和输入密码的这点时间，足够让我短暂地脱离沉迷，对自己是否还需要继续使用这个软件进行一个简单的判断。&lt;/p&gt;
&lt;p&gt;所以我喜欢博客评论这种非即时的网络社交模式，它留给我的思考时间足够长，足以让我斟酌用词、整理观点，给出我自己还算满意的文字。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;其实写完这一节以后，我已经在考虑等月底把新电脑拿闲鱼去卖了，换台 5080 的笔记本来用。但是回过头来思考了一下，光是二手卖掉这一步就至少会亏掉国补的 2000 块，外加少许折旧，都够我买 64G 内存和 2T 硬盘了，还是算了。而且低价位的 5080 笔记本在游戏性能以外的配置多少会比较拉胯，刷了一堆吹现在新电脑的视频以后还是打消了这个念头。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;虽然 GBC 在国内人气其实比 MyGO 低不少，此处在名气上将其并列属于结合自身实际情况。 &lt;a href=&quot;#user-content-fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其实并不是所有应用，像是 Obsidian 或者各种计算器、词典等学习软件，我都没有进行限制。 &lt;a href=&quot;#user-content-fnref-3&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>Astro 迁移小记</title><link>https://blog.hpcesia.com/posts/astro-migration-journal/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/astro-migration-journal/</guid><description>这个人在摸鱼一个月之后终于舍得更新了。花了两天时间搬迁到了 Astro，新的开始！</description><pubDate>Sat, 15 Mar 2025 08:59:30 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;前言&lt;a href=&quot;#前言&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;各位，许久不见。上次更新已经是整整一个月前了，这些天在和毕业论文和找工作进行激烈的豆蒸，都没多少时间折腾新主题。不过超过一个月时间不更新，多少有点说不过去，所以抽了一天时间出来，把博客迁移到了基础功能写得差不多的新主题 &lt;a href=&quot;https://github.com/HPCesia/astral-halo&quot;&gt;Astral Halo&lt;/a&gt; 上来。&lt;/p&gt;
&lt;p&gt;写一个 &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; 主题的想法，最初要追溯到 24 年 10 月。当时正在开发 &lt;a href=&quot;https://github.com/HPCesia/hexo-highlighter-shiki&quot;&gt;hexo-highlight-shiki&lt;/a&gt;，被 Hexo （得益于厚重的历史） 不能原生支持 ESM 气晕。虽然最后使用 esbuild 解决了问题，但是给博客更换一个现代的前端框架也顺势加入了日程表。至于为什么是 Astro？一方面是在开发上述 Hexo 插件的时候，注意到了 Astro 是自带 &lt;a href=&quot;https://shiki.tmrs.site/&quot;&gt;Shiki&lt;/a&gt; 作为代码块语法高亮器的；另一方面，则是&lt;a href=&quot;https://github.com/chlorine3545/hugo-theme-efimero&quot;&gt;小氯之前使用的主题&lt;/a&gt;的&lt;a href=&quot;https://github.com/kkbt0/Hugo-Landscape&quot;&gt;原版&lt;/a&gt;的原版：&lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt;，是个 Astro 主题，正好可以参考。&lt;/p&gt;
&lt;p&gt;Astral Halo 主题本身则是从 25 年 1 月初开始动工的。最初的时候属于是两眼一抹黑，Fuwari 的源码看着是一头雾水，充斥着各种看不懂的逻辑。花了三个月时间，从简单粗暴地复制逻辑地面向报错编程，到 AI 辅助编写脚本，再到现在进化到 AI 只能帮倒忙，总算是做出现在的主题。直到昨天把博客迁移过来以后，我才发现了许多此前并未注意到的 bug。不过目前来看，至少是能跑的，所以暂且慢慢修复，再慢慢把 TODO list 肝完。&lt;/p&gt;
&lt;h2&gt;主题风格&lt;a href=&quot;#主题风格&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我自己并没有什么设计天赋，所以主题也就主打一个缝合怪，把自己喜欢的东西缝进去。主题的基底，是小屋使用的上一个主题 &lt;a href=&quot;https://solitude.js.org/cn&quot;&gt;Solitude&lt;/a&gt;；更准确的来说，是&lt;a href=&quot;https://blog.zhheo.com/&quot;&gt;张洪Heo&lt;/a&gt; 的博客主题，首页的整体布局缝自这里。精髓来自 Fuwari，我相当喜欢它的升降 Banner 的设计，所以花了点心思缝进了主题里，这也是我对这个主题最满意的功能之一。微妙的圆角和细边框则来自 &lt;a href=&quot;https://ui.shadcn.com/&quot;&gt;ShadcnUI&lt;/a&gt;，相比于 Solitude 的粗边框更得我心。不过我并没有使用 ShadcnUI 的组件，而是使用的 &lt;a href=&quot;https://daisyui.com/&quot;&gt;DaisyUI&lt;/a&gt;，这是一个纯 CSS 的 UI 库，免去了引入大量 JS 脚本。&lt;/p&gt;
&lt;p&gt;主题配色最终选择的是青色+粉色+米色/青褐，是从原神的&lt;a href=&quot;https://genshin-impact.fandom.com/zh/wiki/%E5%B8%8C%E6%A0%BC%E9%9B%AF&quot;&gt;希格雯&lt;/a&gt;身上吸的颜色（准确地来说，是从&lt;a href=&quot;https://www.bilibili.com/opus/1032545788390014999&quot;&gt;角色介绍的配图&lt;/a&gt;里吸的颜色），配色水平比我硬凑的好多了。本来目标是粉粉嫩嫩的可爱风，但实际效果嘛……浅色配浅色的可阅读性完全是灾难级的，几种颜色彻底糊成一团，对屏幕阅读相当不友好。所以我最终把对比度拉高了不少，看着还算不错。&lt;/p&gt;
&lt;h2&gt;开发流程&lt;a href=&quot;#开发流程&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/posts/monthly-journal-3/&quot;&gt;月寄（三）&lt;/a&gt; 里有提到，我在开发新主题的时候，有使用 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&quot;&gt;Roo Cline&lt;/a&gt;（现在叫 Roo Code）辅助开发。我的 Roo Cline 使用的是 VSCode 的 Copilot LLM API，优点是 GitHub 学生认证后 Copilot Pro 是免费的，缺点则是不能使用图像&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。Cursor 倒是没用过，有图像识别助力，想必开发速度能大大提高吧。&lt;/p&gt;
&lt;p&gt;Astral Halo 用的是最新的 &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;TailWind4&lt;/a&gt;，考虑到 AI 的对于较新或较小众的框架/语言的开发水平，我让 AI 负责的都是一次性代码和机械重复工作。一次性代码，主要是一些创建文章模板用的脚本，这些脚本只需要正常实现功能即可，代码的可阅读性、可维护性不重要，因此我让 AI 来编写。机械重复工作，则是有多份逻辑相似，但又不好提炼为模块的代码，需要重复填充，或是翻译不同语言的代码，这种工作正适合 AI 进行。比如，主题的创建文章草稿的功能，就是完全由 AI 编写的，我只负责提供最佳实践的思路和校验结果。&lt;/p&gt;
&lt;p&gt;因为没有图像识别功能，所以样式就不能交给 AI 来写，只能自己手搓。样式写起来最累的，还是 Twikoo 的样式。因为不想慢慢覆盖 Twikoo 的原生样式，我选择的是导入 nocss 版本，从零开始直接手搓自己的样式。不过根据&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的说法，AI 对于搓 Twikoo 样式方面大概无能为力就是了。写这么久新主题，感觉所谓「前端三大护城河」里，只有 CSS 才是正儿八经的护城河（笑）。开发过程中，&lt;a href=&quot;https://daisyui.com/&quot;&gt;DaisyUI&lt;/a&gt; 给了我相当多的思路，其使用的一些 CSS 技巧，在和 &lt;a href=&quot;https://swup.js.org/&quot;&gt;Swup.js&lt;/a&gt; 豆蒸的时候相当实用——把 JS 脚本全干掉，就不用考虑 Swup 引入的 JS 脚本加载问题了。&lt;/p&gt;
&lt;p&gt;虽然 Astro 的&lt;a href=&quot;https://docs.astro.build/zh-cn/concepts/islands/&quot;&gt;群岛架构&lt;/a&gt;提供了在 Astro 中嵌入 React、Vue、SolidJS 等一众前端框架组件的能力，但因为我自己并不会这些框架，只在集成 &lt;a href=&quot;https://waline.js.org/&quot;&gt;Waline&lt;/a&gt; 的时候用上了群岛功能，内嵌了 &lt;a href=&quot;https://waline.js.org/cookbook/import/project.html#%E5%9C%A8-vue-%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%AF%BC%E5%85%A5&quot;&gt;Waline 提供的 Vue 组件&lt;/a&gt;。后续开发过程中，可能也就音乐播放器会用得上群岛架构了。&lt;/p&gt;
&lt;p&gt;总之，先慢慢修 bug 吧，今天再修一天，明天又得继续和毕业论文与春招搏斗了（悲）。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;注：在写完这篇文章后的某次更新中，GitHub Copilot 已经可以上传附件并调用图像识别功能了。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>月寄（三）</title><link>https://blog.hpcesia.com/posts/monthly-journal-3/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/monthly-journal-3/</guid><pubDate>Tue, 11 Feb 2025 11:43:43 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;p&gt;本次月记记录时间为：1 月 17 日 - 2 月 9 日。&lt;/p&gt;
&lt;h2&gt;AI 辅助开发&lt;a href=&quot;#ai-辅助开发&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近，我在使用 Astro 给自己开发一个全新的主题，同时也第一次尝试了新一代的 AI 辅助开发。此前，我主要都是在使用 VSCode 的 Continue 插件，使用 AI 进行代码补全，以及使用对话功能来问问题。随着 Cursor、DeepSeek 的火爆，我决定也尝试一下新一代的 AI 辅助编程。&lt;/p&gt;
&lt;p&gt;出于某种 VSCode 情结，我没有选择去试用 Cursor，而是选择了 VSCode 的插件 Roo Cline。选择 Cline 的分支 Roo Cline 是因为这个分支版本可以调用 VSCode 自己的大模型接口，即调用 GitHub Copilot，而 GitHub Copilot 只限制对话次数，不限制每次对话使用的 token 量，Pro 版本不限次数，10 刀每月的价格也还算负担得起。&lt;/p&gt;
&lt;p&gt;使用体验下来，用来写一些简单的脚本，或者使用 AI 来进行「重复性」的修改，比如相似的两个代码，改完一个，让 AI 参考已有修改帮忙改另一个代码，这类工作 AI 做的还是很不错的。但是，对于一些复杂的逻辑，或者小众一点的插件，AI 的表现就不尽如人意了。很多时候 AI 会生成一些完全不可用的代码，与其慢慢通过对话让 AI 调整，还不如我自己直接看文档和其他开源代码自己手搓。&lt;/p&gt;
&lt;h2&gt;新主题&lt;a href=&quot;#新主题&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;经过大半个月的爆肝开发，目前我的 Astro 新主题已经基本可用了。新主题基本就是缝的 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt; 和现在用的 Solitude，而且因为用了比较新的包，比如 Tailwind 4，所以浏览器兼容性也比较悲惨。目前，新主题还处于开发阶段，我个人想要的功能还差一些没实现，但基本的功能已经差不多了，所以我就先把它开源并上线了一个 &lt;a href=&quot;https://astral-halo.netlify.app/&quot;&gt;Demo&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;新主题名字叫「Astral Halo」，从「Moon Halo」根据开发框架的名字 Astro 变化而来，和 Halo 框架没啥关系就是了。等搓好了就可以切换到新主题了，这篇文章大概是最后一篇使用 Solitude 主题的文章了。&lt;/p&gt;
&lt;h2&gt;初试 DeepSeek&lt;a href=&quot;#初试-deepseek&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;初试 DeepSeek R1，我选择让它来从我的过往周/月记来分析我在这个博客中的人设。得到的结果，让我亲身体验了一把什么叫“作者本人做阅读理解都及不了格”（笑）。比如在 周寄（三） 中，我聊到了我的保温杯迭代史。DeepSeek R1 分析认为，保温杯这节“是作者生存焦虑的具象化，反映了作者对完美容器的追寻，最终选择将博客作为自己的精神容器”。&lt;/p&gt;
&lt;p&gt;嗯，分析得很好，要是我自己写的时候也是这么想的就好了。事实只是我只是没啥好写的了，就拿保温杯来说事。&lt;/p&gt;
&lt;h2&gt;游戏&lt;a href=&quot;#游戏&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近又把《辐射：新维加斯》（以下简称 FONV）捡回来了。之前因为这游戏翻来覆去玩了太多遍有些腻，外加上游戏原先使用的内核汉化（翻译游戏内部的文本字符串）会和我喜欢的 mod 起冲突，直接玩英文原版看着又太费劲，所以弃了半年。&lt;/p&gt;
&lt;p&gt;最近翻到之前知乎上对我配置畅玩 FONV 的 mod 配置帮助极大的《游骑兵指南》更新了，将汉化换成了外挂汉化（直接翻译游戏时屏幕显示文本）。外挂汉化除去一些文字位置和大小的问题外，与各种 mod 都算兼容相当良好的。简单尝试了一下后，我对 FONV 的激情又重新点燃了，这些天基本就是肝论文学习进度、肝新主题和打 FONV，顺便穿插一下几个米哈游游戏的活动和日常。 （然后因为春节活动相比惯例提前一天结束，错过了好多剧情和奖励，死线战士大失败）&lt;/p&gt;
&lt;h2&gt;轻功&lt;a href=&quot;#轻功&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;起因是我最近做的一个梦，梦里我被人追杀，跑着跑着就开始飘了起来，追逐直接变成了皇牌空战。这种飘起来的感觉我很熟悉——在记忆里，我小时候经常在回家路上走着走着就飘起来，一开始是一步能跨上两三米才落地，然后越飘越高，直接飘到和家里阳台齐平。理性告诉我，这应当是我将自己的梦境和小时候的记忆混淆了，但这种印象却如此真实，让我难以否定这种飘起来的感觉只是臆想。&lt;/p&gt;
&lt;p&gt;过了两天，和我爸在吃完饭后闲聊，聊到我妈最近在学习中医，顺带着就聊到了一些比较「封建迷信」的东西。我爸说，他以前会做梦梦到自己飘了起来，就像小说里的轻功一般。我听了这话，心里一惊，这不就是我梦里的感觉吗？很好奇，这种感觉是不是人人都有的。此前我从没想过会有人与我有相同的「飘起来」的感受，如果这种感受是普遍存在的，那这可能就是所谓轻功的源头之一吧。&lt;/p&gt;
&lt;h2&gt;中医与「科学迷信」&lt;a href=&quot;#中医与科学迷信&quot;&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;/article&gt; </content:encoded></item><item><title>Hello, PyTorch (1.5) | 环境配置（非 Docker 版)</title><link>https://blog.hpcesia.com/posts/hello-pytorch-1-5/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/hello-pytorch-1-5/</guid><pubDate>Fri, 31 Jan 2025 15:30:36 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;安装 pixi&lt;a href=&quot;#安装-pixi&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;pixi 是一个跨平台的、与 conda 兼容的、通过 lock 文件保证可移植性的 python 管理工具。在终端中执行如下命令安装 pixi，其中进行了一次字符串替换，以使用 github 镜像站点进行下载：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ExecutionPolicy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ByPass&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;&quot;(irm -useb https://pixi.sh/install.ps1).Replace(&apos;https://github.com&apos;, &apos;https://github.site&apos;) | iex&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Linux/macOS&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-sSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://pixi.sh/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;s|https://github.com|https://github.site|g&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;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安装完成后，可以使用 &lt;code&gt;pixi&lt;/code&gt; 命令进行包管理。建议参考&lt;a href=&quot;https://pixi.sh/latest/#autocompletion&quot;&gt;官网&lt;/a&gt;为 pixi 添加命令补全。还需要为 pixi 添加国内镜像源，以加速包的下载。在终端中执行如下命令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pixi&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;edit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--global&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;此时会用系统自带的文本编辑器打开一个文件，在其中粘贴如下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;~/.pixi/config.toml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;pypi-config&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;index-url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h2&gt;使用 pixi 安装 Pytorch 环境&lt;a href=&quot;#使用-pixi-安装-pytorch-环境&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;新建一个目录，例如 ~/workspace/python，用于存放所有新的 Python 项目的文件夹。在终端中进入该文件夹后执行如下命令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pixi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;any_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--format&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pyproject&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;这会创建一个 ~/workspace/python/any_name 文件夹，目录结构为：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;any_name/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── any_name/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       └── __init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── pyproject.toml&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;pyproject.toml&lt;/code&gt; 是项目的配置文件，&lt;code&gt;src/&lt;/code&gt; 是项目的源代码目录。打开 &lt;code&gt;pyproject.toml&lt;/code&gt; 文件，添加如下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;pyproject.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool.pixi.feature.gpu.system-requirements&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cuda &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;12.0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool.pixi.feature.gpu.dependencies&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cuda-version &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;12.6&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytorch-gpu &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool.pixi.feature.cpu.dependencies&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytorch-cpu &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool.pixi.environments&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cpu &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;cpu&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&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;&quot;gpu&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着在终端中执行如下命令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pixi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scipy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;matplotlib&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deepxde&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;安装 pyproject.toml 中列出的依赖和新增的绘图库和深度学习库依赖，其中 DeepXDE 是一个多后端的深度学习库，主要用于数学求解。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>周寄（四）</title><link>https://blog.hpcesia.com/posts/weekly-journal-4/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/weekly-journal-4/</guid><description>昼夜颠倒的拖延症废宅也能写点东西出来吗？</description><pubDate>Thu, 16 Jan 2025 14:01:22 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;本次周记为期两周，记录时间：2024 年 12 月 30 日至 2025 年 1 月 16 日。拖了两周半才发，主要是因为我太懒狗了，写不动（悲）。&lt;/p&gt;
&lt;h2&gt;和论文搏斗&lt;a href=&quot;#和论文搏斗&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一周，除去刷社交媒体、打游戏、写博客等阶段性考试结束后必备的娱乐生活外，我还在干正事——开始为写毕业论文做准备。虽然跟导师说好了每周汇报一下进度，不过这周还是没跟导师汇报。主要原因是写一个配置环境的文档比我想象中要麻烦不少，花了不少功夫才把论文的学习进度笔记写了个大概出来。好在导师没有太在意，问题不大。&lt;/p&gt;
&lt;p&gt;顺便期末成绩也出来了，我自己预估期末卷面只有 15 分不到的多复变函数论，最终成绩是 61 分刚刚过线，只能说感谢老师不杀之恩了（笑）。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;足部保暖&lt;a href=&quot;#足部保暖&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;现在已经是完全入冬了，虽然厦门的温度其实不算冷——白天 18°C 上下，晚上 10°C 上下，但很不幸，学校宿舍的空调没有暖风功能，所以即便平时都待在宿舍，也只能硬抗冷空气。而我又不想买一双一年只能用一个月的保暖拖鞋，所以我得想其他办法来熬过冬天。我的选择是：多穿点袜子。我买了两双迪卡侬的滑雪长袜穿在外面，负责保暖和挡住漏进来冷风，内层则是一直在穿的五指袜（注：好的五指袜穿着真的很舒服，对脚汗很多的人很友好，就是 30+/双的价格还是有点不友好）。虽然长时间在宿舍坐着还是很冷，但只要喝点热水，或者出去走走，脚就会相当暖和。&lt;/p&gt;
&lt;h2&gt;阴间作息&lt;a href=&quot;#阴间作息&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;自从期末考完后，我便开始了每天的阴间作息：凌晨 4-5 点才睡觉，中午 12 点以后才起床，伴有偶尔通宵。就连这段字都是我在凌晨 3 点半的时候，既不想睡觉又不想打游戏，躺在床上用手机码的（自从写作工作流更新，手机与电脑可以无感同步写的博客文章以后，躺床上码字就成了我写博客的重要组成部分）。然后饮食也相当混乱，经常下午三四点去吃午饭，然后晚上十点左右吃顿夜宵。&lt;/p&gt;
&lt;p&gt;制约我熬夜时长的唯一要素是手机的电量，通常在夜间的高强度使用下，我这用了3年半、电池健康只剩77%的手机的电量就只剩20%不到了，如果再多玩一会儿，等早上起来，我就会收获一个没电关机的手机。甚至这点制约，只要我愿意下床拿一下充电宝，也不是不能解决。&lt;/p&gt;
&lt;p&gt;不过回家以后，为了省自己的零花钱和给家里省事，我每天早上都会开车跟我爸一起去他公司（顺便练练车技），我在我爸的房间里看文献/打游戏/鼓捣博客，中午蹭一顿饭。出于对汽车的力量的敬畏，我在家里的这几天都是至少保证 7 小时睡眠，作息多少调整得正常了一点。&lt;/p&gt;
&lt;h2&gt;新手机&lt;a href=&quot;#新手机&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一放假回到家，我便拿到了我的新手机（如果考研没过，就是家里买的最后一个了）：华为 Mate 70 RS。由于需要玩一些手游、使用 Syncthing、Obsidian，我没有选择升级到鸿蒙 Next，而是使用了鸿蒙 4.3。使用了一周下来，对比我之前用的 Mate 40 RS，感觉还是不错的。&lt;/p&gt;
&lt;p&gt;芯片性能方面，自华为被制裁以来，我就从来没对华为新手机的芯片性能有多大的指望，比麒麟 9000 强就算胜利。实际游戏体验也和 Mate 40 差距不大，稍微流畅一点。拍照和录像感觉效果还是可以的，麦克风收音效果不错，微距拍照很舒服，比 40 一凑近就糊完了强太多了。续航算是最惊喜的方面了，个人体感目前轻度使用一整天不充电是完全没问题的，相当持久。总体来说，还算是一次满意的手机换代体验。&lt;/p&gt;
&lt;h2&gt;新手办&lt;a href=&quot;#新手办&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;顺便地，我买的手办也到了。其实早在上个月初，商家就已经发货了，只是我因为快毕业了，所以选择将手办寄到了家里，现在放假回家，才将其拆箱检视。由于造型比较复杂，加上网上看有不少翻车的情况，所以我拆箱的时候还是有点提心吊胆的，不过好在没有断件，粗看下来颜色也没啥问题，算是没翻车。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这算是我买的第二个比例手办了，上一个还是 21 年买的可莉。由于可莉的体形比较小，加上坐姿降了高度，导致我对最近到的这个爱莉的手办的大小产生了误判——直到我回家，发现床边那个跟床头柜一样大的箱子装着的是我的手办。虽然实际盒子大小没那么离谱，但也差不多有半个床头柜大小了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不幸的是，拆开检查过以后，我也只能请手办回盒子里吃灰了，因为家里已经被我妈的衣服堆满了（悲）。只有等家里的新房装修完毕，我大概才有地方用来展示这个大手办。&lt;/p&gt;
&lt;h2&gt;听歌&lt;a href=&quot;#听歌&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;不知道从什么时候开始，HOYO-MiX 就成为了我曲库中新歌几乎唯一的来源。目前我手机里共存有 3810 首歌曲，其中 2039 首来自 HOYO-MiX。一方面，是我个人很喜欢将音乐存到本地，这意味着 QQ 音乐、网易云音乐、Apple Music 等在线音乐软件的会员显得几乎没有必要（反正开了会员，下的歌也得把加密格式转换为普通的格式），因此我很少有其他渠道去听新歌；另一方面，HOYO-MiX 的歌真的是量大管饱、质量还好、风格多变，对我这种喜欢纯音乐的人来说，HOYO-MiX 创作的游戏配乐中大量的纯音乐正合适。&lt;/p&gt;
&lt;p&gt;这里推荐一些 HOYO-MiX 的歌里，我个人最喜欢的一部分歌曲（此处列出的均为我本地的歌曲信息）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;中文歌&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;《Rage Beneath the Mountains 岩壑之崩》- 陈致逸/HOYO-MiX（这首不放在纯音乐是因为确实有不少中文歌词）&lt;/li&gt;
&lt;li&gt;《不眠之夜》- 张杰/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《一颗方糖悬滞的时间》- 阿兰/HOYO-MiX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;英文歌&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;《Rubia》- 周深&lt;/li&gt;
&lt;li&gt;《Oracle》- 黄霄雲/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《No Ceiling》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《烬火 Emberfire》- 希林娜依高/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《未行之路 The Road Not Taken》- HOYO-MiX/Aimer&lt;/li&gt;
&lt;li&gt;《踏上旅途 Take the Journey》- HOYO-MiX/Anthony Lynch&lt;/li&gt;
&lt;li&gt;《野火 Wildfire》- HOYO-MiX/Jonathan Steingard&lt;/li&gt;
&lt;li&gt;《WHITE NIGHT》- Jake Miller/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《使一颗心免于哀伤》- 知更鸟/HOYO-MiX/Chevy&lt;/li&gt;
&lt;li&gt;《希望有羽毛和翅膀》- 知更鸟/HOYO-MiX/Chevy&lt;/li&gt;
&lt;li&gt;《pinKing》- ChiliChill/三Z-STUDIO/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《火狱骑行》- 三Z-STUDIO/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《Fearless》- 三Z-STUDIO/HOYO-MiX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他语言歌曲&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;《轻涟 La vaguelette》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《纳塔 Natlan》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《崩坏世界的歌姬 (Movie Ver.)》- 小林未郁&lt;/li&gt;
&lt;li&gt;《不乱不破》- HOYO-MiX/Reol&lt;/li&gt;
&lt;li&gt;《小停再出发》- 三Z-STUDIO/HOYO-MiX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纯音乐&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;《For Kevin》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《Fantasy Note》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《Caelestinum Finale Termini 终天的闭幕曲》- 陈致逸/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《璃月 Liyue》- 陈致逸/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《皎洁的笑颜 Moonlike Smile》- 陈致逸/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《浪沫起舞 Dance of Aphros》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《Innocent Age 无虑无猜的岁月》- 陈致逸/HOYO-MiX&lt;/li&gt;
&lt;li&gt;《无虑的应许 Pledge of Peace》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《Inevitable Conflict 激扬的韧战》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《寒光裂涛 Combat Beneath the Waves》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《仲夏夜绮思 Die Mittsommernacht-Fantasie》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《水仙十字安眠曲 A Narcissus Lullaby》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《夜诞的花冠 Night’s Crown of Flowers》- HOYO-MiX&lt;/li&gt;
&lt;li&gt;《绝命舞曲 Acoustic.》- 三Z-STUDIO/HOYO-MiX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>Hello, PyTorch (1) | 环境配置</title><link>https://blog.hpcesia.com/posts/hello-pytorch-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/hello-pytorch-1/</guid><pubDate>Wed, 08 Jan 2025 16:50:49 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;安装 Docker&lt;a href=&quot;#安装-docker&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Windows&lt;a href=&quot;#windows&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Windows 系统不能直接安装使用 Docker，需要先安装 WSL2（Windows Subsystem Linux 2）。以下以 x86 架构的 Windows 10 系统为例，进行 WSL2 的安装流程说明。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查系统版本&lt;/strong&gt;（Windows 11 无需进行此步骤）：打开设置→系统→关于页面，检查 Windows 版本号，应为 2004、20H2、21H1、21H2、22H2 中的任意一个，否则需要更新 Windows 版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 Windows Terminal&lt;/strong&gt;（Windows 11 无需进行此步骤。此步骤非必须，但建议进行）：访问 &lt;a href=&quot;https://aka.ms/terminal&quot;&gt;Windows Terminal | 微软应用商店&lt;/a&gt; 并下载 Windows Terminal 安装器，运行该安装器即可安装 Windows Terminal。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 WSL2&lt;/strong&gt;：在开始菜单中找到上一步安装的 Windows Terminal（或「终端」），右键→更多→以管理员身份运行，然后在其中输入并按回车执行如下命令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wsl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--install&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;等待自动安装完成即可，过程中可能需要重启计算机。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置 WSL2&lt;/strong&gt;：打开开始菜单，找到上一步安装的「Ubuntu」并打开，初次使用会要求设置用户名与密码（输入密码时，屏幕不会显示任何字符，这称为「盲人键入」，是完全正常的现象），密码建议妥善保管（如果忘记密码，可以在 PowerShell 中使用 &lt;code&gt;wsl -u root&lt;/code&gt; 进入 root 账户，然后使用 &lt;code&gt;passwd &amp;lt;username&amp;gt;&lt;/code&gt; 命令为账户设置新密码。）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置软件仓库镜像源&lt;/strong&gt;：由于国内大陆地区网络问题，需要为 Ubuntu 的软件仓库设置国内镜像源。以清华镜像源为例，在 Ubuntu 中执行如下指令：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/os-release&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;查看 Ubuntu 的版本号，在&lt;a href=&quot;https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/&quot;&gt;清华镜像站&lt;/a&gt;中找到并复制对应版本的代码。接着执行如下指令（注意 Ubuntu 24.04 版本及以上，需要将下面指令中的地址安装清华镜像源中的说明进行对应的替换）：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/sources.list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/sources.list.bak&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 备份&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/sources.list&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 vi 打开文件，直接输入 ggdG （区分大小写）删除全部内容，接着按 i 键进入插入模式，单击右键将复制的代码粘贴进去，随后按 ESC 键退出插入模式，再输入 ，按回车保存并退出 vi。镜像源配置完成后，在 Ubuntu 中执行如下命令更新软件。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upgrade&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 Docker&lt;/strong&gt;：按照 Linux 系统的安装步骤，在 WSL2 中安装 Docker 即可。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Linux&lt;a href=&quot;#linux&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Linux 系统可以直接安装使用 docker-ce，由于国内大陆地区网络问题，需要通过国内镜像源安装。下面以清华镜像源与 Ubuntu 系统（其他 Linux 发行版可参考 &lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/&quot;&gt;docker-ce | 清华大学开源软件镜像站&lt;/a&gt;进行相关配置）为例，进行安装流程说明。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;卸载旧版本（如有）&lt;/strong&gt;：在 bash 中输入并执行如下命令，下同：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker.io&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker-doc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker-compose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;podman-docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containerd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;runc&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装依赖&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ca-certificates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gnupg&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载 GPG key&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0755&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/keyrings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gpg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dearmor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/keyrings/docker.gpg&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加镜像源软件仓库&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;deb [arch=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;dpkg&lt;/span&gt;&lt;span&gt; --print-architecture&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu&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;/etc/os-release&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$VERSION_CODENAME&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&quot; stable&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;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tee&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/sources.list.d/docker.list&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;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 docker-ce&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker-ce&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker-ce-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containerd.io&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;docker-buildx-plugin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker-compose-plugin&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 Docker 镜像仓库的镜像&lt;/strong&gt;：由于国内大陆地区网络问题，需要为 Docker Hub 配置镜像或代理。目前较正规的镜像（即各大高校或腾讯、阿里、字节等大企业建立的镜像源）均已关停，需要自行寻找可用镜像源，此处使用目前可用的一个镜像 &lt;a href=&quot;https://docker.1panel.live/&quot;&gt;https://docker.1panel.live/&lt;/a&gt; 讲解如何配置 Docker Hub 镜像。对于其他来源的镜像，如 nvcr.io、ghcr.io 等来源的镜像，目前南京大学仍有可用&lt;a href=&quot;https://doc.nju.edu.cn/books/e1654&quot;&gt;镜像源&lt;/a&gt;。同时也可参考&lt;a href=&quot;#%E8%87%AA%E5%BB%BA-docker-%E9%95%9C%E5%83%8F&quot;&gt;附录&lt;/a&gt;自建 Docker 镜像使用。同样使用 vi 打开 docker 的配置文件 /etc/docker/daemon.json&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/docker/daemon.json&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;通过方向键将光标移动到最外层的大括号对（&lt;code&gt;{}&lt;/code&gt;）之间，按 i 键进入插入模式，输入如下内容（如果已有 &lt;code&gt;&quot;registry-mirrors&quot;&lt;/code&gt;，则换成修改）：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;daemon.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;registry-mirrors&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;https://docker.1panel.live&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;随后按 ESC 键退出插入模式，再输入 ，按回车保存并退出。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安装 PyTorch&lt;a href=&quot;#安装-pytorch&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完成 Docker 后，就可以开始配置 PyTorch 环境了。创建一个合适的目录用于存放 Docker 镜像，以下以 ~/workspace/pinn 作为示例目录进行讲解。&lt;/p&gt;
&lt;p&gt;在 Docker 中进行 Python 开发需要一个可以连接到容器内进行开发的集成开发环境（IDE），如 VSCode(Visual Studio Code) 或 Pycharm。如果不想安装集成开发环境，也可使用 Jupyter Lab 在浏览器中进行开发（但建议使用集成开发环境，而非 Jupyter）。&lt;/p&gt;
&lt;h3&gt;安装 CUDA 与 CuDNN&lt;a href=&quot;#安装-cuda-与-cudnn&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;本节仅 Nvidia 显卡需要进行，默认系统已安装 Nvidia 显卡驱动。在终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nvidia-smi&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;可以看到一个报告显卡驱动状态的表格，找到「CUDA Version」，记下后面的版本号。打开 Nvidia 的 CUDA 下载网站 &lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot;&gt;CUDA Toolkit Archive | NVIDIA Developer&lt;/a&gt;，根据之前记下的版本号，点击进入对应版本的 CUDA 下载页面。下载界面会有 Linux/Windows 的版本选项，尽量选择下载本地（locally）版本。Windows 系统是一个 .exe 格式的安装器，下载后执行安装即可；Linux 版本是几行命令，复制到终端中执行即可，注意最新驱动下 Windows 系统无需额外为 WSL 安装 CUDA。&lt;/p&gt;
&lt;p&gt;如果 CUDA 为最新版（目前最新版为 12.6），可以直接在 &lt;a href=&quot;https://developer.nvidia.com/cudnn-downloads&quot;&gt;cuDNN Downloads | NVIDIA Developer&lt;/a&gt; 下载最新版的 CuDNN，否则需要在 &lt;a href=&quot;https://developer.nvidia.com/rdp/cudnn-archive&quot;&gt;cuDNN Archive | NVIDIA Developer&lt;/a&gt; 处下载对应 CUDA 版本的 CuDNN，注意需要注册一个账号才能下载。与 CUDA 相同，下载页面也提供了不同系统的不同版本安装下载方式。&lt;/p&gt;
&lt;p&gt;对 Windows 系统来说，此时在 WSL 中就已经可以使用 &lt;code&gt;nvidia-smi&lt;/code&gt; 命令显示穿透到 WSL 中的显卡信息了。&lt;/p&gt;
&lt;h3&gt;构建镜像&lt;a href=&quot;#构建镜像&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;新建一个文件 ~/workspace/pytorch/dockerfile，由于此时不再有 Linux 系统权限限制，Windows 系统可以使用&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;notepad.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/workspace/pytorch/dockerfile&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;调用 Windows 系统自带记事本进行编辑（如果安装了 VSCode，则 &lt;code&gt;notepad.exe&lt;/code&gt; 改为 &lt;code&gt;code&lt;/code&gt;）；Linux 系统仍可使用 vi 或 vim 进行编辑。&lt;/p&gt;
&lt;p&gt;由于不同的电脑配置需要使用不同的镜像，因此以下将分类讲解 Nvidia 显卡、AMD 显卡与纯 CPU 三种不同配置下构建镜像的方式。此处使用&lt;a href=&quot;https://github.com/cnstark/pytorch-docker&quot;&gt;前人已构建好的镜像&lt;/a&gt;。&lt;/p&gt;
&lt;div&gt;  &lt;div&gt; &lt;p&gt;Nvidia 显卡可以直接使用 PyTorch 提供的 docker 镜像作为基础进行开发。在 dockerfile 文件中输入如下内容：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/dockerfile&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; cnstark/pytorch:2.3.1-py3.10.15-cuda12.1.0-ubuntu22.04&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; requirements.txt requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; rm -r /temp &amp;amp;&amp;amp; rm -r /root/.cache/pip&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;AMD 显卡可以使用 ROCm 来进行 PyTorch 开发（需要参考 &lt;a href=&quot;https://rocm.docs.amd.com/projects/radeon/en/latest/docs/install/wsl/howto_wsl.html&quot;&gt;WSL How to guide - Use ROCm on Radeon GPUs — Use ROCm on Radeon GPUs&lt;/a&gt; 进行相关配置）。在 dockerfile 文件中输入如下内容：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/dockerfile&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; rocm/pytorch:rocm6.1.3_ubuntu22.04_py3.10_pytorch_release-2.1.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; requirements.txt requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; rm -r /temp &amp;amp;&amp;amp; rm -r /root/.cache/pip&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;在 dockerfile 文件中输入如下内容：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/dockerfile&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; cnstark/pytorch:2.3.1-py3.10.15-ubuntu22.04&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; requirements.txt requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; rm -r /temp &amp;amp;&amp;amp; rm -r /root/.cache/pip&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; 
&lt;p&gt;如果使用 Jupyter Lab，则需要在 dockerfile 末尾添加两行：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPOSE&lt;/span&gt;&lt;span&gt; 8888&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENTRYPOINT&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;jupyter&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;lab&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;--ip=0.0.0.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;--allow-root&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;--no-browser&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着在同一目录下新建 requirements.txt 文件，这个文件里是其他需要的 Python 包，例如：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/requirements.txt&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Jupyter Lab 配置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用 Pycharm/VSCode/其他 IDE 编辑代码，这部分可以全部注释掉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jupyterlab &lt;/span&gt;&lt;span&gt;# Jupyter Lab 本体&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jupyterlab-language-pack-zh-CN &lt;/span&gt;&lt;span&gt;# Jupyter Lab 中文语言包&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jupyterlab-lsp &lt;/span&gt;&lt;span&gt;# Jupyter Lab 语言服务器（LSP）支持&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jedi-language-server &lt;/span&gt;&lt;span&gt;# Jedi 语言服务器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 其他需要的包&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ipykernel &lt;/span&gt;&lt;span&gt;# 运行 Jupyter Notebook 的核心包，使用 VSCode 时需要&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scipy &lt;/span&gt;&lt;span&gt;# 提供一些实用函数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pandas &lt;/span&gt;&lt;span&gt;# 数据处理包，可以注释掉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;matplotlib &lt;/span&gt;&lt;span&gt;# 绘图包，如果需要导出数据用其他软件绘图，可以注释掉&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;最后再在统一目录下创建 docker-compose.yaml，根据创建 dockerfile 时的不同，分别填入如下内容：&lt;/p&gt;
&lt;div&gt;  &lt;div&gt; &lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/docker-compose.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;nvidia-pytorch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ipc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;volumes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./data:/workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;resources&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;reservations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nvidia&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;capabilities&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;gpu&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;tty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;stdin_open&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/docker-compose.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rocm-pytorch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cap_add&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SYS_PTRACE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;security_opt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;seccomp=unconfined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ipc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;shm_size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8G&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/dxg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;volumes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./data:/workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/opt/rocm/lib/libhsa-runtime64.so.1:/opt/rocm/lib/libhsa-runtime64.so.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;tty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;stdin_open&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;需要注意的是以上为 Windows 系统下的 docker-compose.ymal 文件，如果是 Linux，则需删除 volumes 中 workspace 以外的两项，同时修改 devices：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/docker-compose.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rocm-pytorch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cap_add&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SYS_PTRACE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;security_opt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;seccomp=unconfined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ipc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;shm_size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8G&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/dxg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/kfd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/dri&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;volumes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./data:/workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/opt/rocm/lib/libhsa-runtime64.so.1:/opt/rocm/lib/libhsa-runtime64.so.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;tty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;stdin_open&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/workspace/pytorch/docker-compose.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pytorch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;volumes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./data:/workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;tty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;stdin_open&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; 
&lt;p&gt;如果使用 Jupyter Lab，则需要在 volumes 前新增两行：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ports&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;8888:8888&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;最后在 Linux/WSL 终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker-compose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可启动容器，如果使用 Jupyter Lab，此时在浏览器中访问 &lt;a href=&quot;https://127.0.0.1:8888/&quot;&gt;https://127.0.0.1:8888/&lt;/a&gt; 即可进入 Jupyter Lab 页面。对 VSCode，需要安装 Docker 扩展，在扩展侧边栏中右键刚刚建立的容器，启动并附加 VSCode 页面；对 Pycharm 或其他 IDE，请参考对应的官方文档。&lt;/p&gt;
&lt;h2&gt;附录&lt;a href=&quot;#附录&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;自建 Docker 镜像&lt;a href=&quot;#自建-docker-镜像&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cloudflare Worker 搭建 Github 与 Docker 加速，来自&lt;a href=&quot;https://linux.do/t/topic/107428&quot;&gt;用GPT融了一个Cloudflare Workers的github下载 + Docke pull加速 - 开发调优 - LINUX DO&lt;/a&gt;。建议自行修改部分代码（比如用 LLM 洗一遍），以防有大量相似代码的 Worker 导致被 Cloudflare 认定为滥用 Worker。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;worker.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;use strict&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; HUB_HOST &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;registry-1.docker.io&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; AUTH_URL &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://auth.docker.io&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; WORKERS_URL &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://你的域名&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; ASSET_URL &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://hunshcn.github.io/gh-proxy/&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; PREFIX &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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; Config &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; jsdelivr&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;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; whiteList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&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;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;\/&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt;releases&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;archive)&lt;/span&gt;&lt;span&gt;\/.&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&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;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;\/&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt;blob&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;raw)&lt;/span&gt;&lt;span&gt;\/.&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&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;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;\/&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;git-)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp4 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\/\/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;raw&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt;githubusercontent&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;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;\/.&lt;/span&gt;&lt;span&gt;+?&lt;/span&gt;&lt;span&gt;\/.&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp5 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\/\/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;gist&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt;githubusercontent&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;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;\/.&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exp6 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&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;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;\/&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;i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&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;{&lt;/span&gt;&lt;span&gt;RequestInit&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; PREFLIGHT_INIT &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// @ts-ignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&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;204&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;access-control-allow-origin&apos;&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;access-control-allow-methods&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;GET, POST, PUT, PATCH, TRACE, DELETE, HEAD, OPTIONS&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;access-control-max-age&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1728000&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Create a new response.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;any&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Object&amp;lt;string, string&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;makeResponse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &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;200&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers[&lt;/span&gt;&lt;span&gt;&apos;access-control-allow-origin&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;&apos;*&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Create a new URL object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &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;urlStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;URL|null&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createURL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urlStr&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(urlStr)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; (err) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;fetch&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;event&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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;respondWith&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;handleFetchEvent&lt;/span&gt;&lt;span&gt;(event)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&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;makeResponse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`cfworker error:&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stack&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;502&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Handle the fetch event.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FetchEvent&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleFetchEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; req &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&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;startsWith&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/token&apos;&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;pathname&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;startsWith&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/v2&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleDockerProxy&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; url)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&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;startsWith&lt;/span&gt;&lt;span&gt;(PREFIX)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleGitHubProxy&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; url)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;makeResponse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Not Found&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;404&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Handle token requests and Docker proxy.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&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; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleDockerProxy&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&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;&apos;/token&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; tokenURL &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; AUTH_URL &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; url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&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; &lt;/span&gt;&lt;span&gt;&apos;auth.docker.io&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;User-Agent&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;User-Agent&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Accept&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Accept-Language&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept-Language&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Accept-Encoding&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept-Encoding&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Connection&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;keep-alive&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Cache-Control&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;max-age=0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(tokenURL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; req)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&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;hostname &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; HUB_HOST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&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; HUB_HOST&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;User-Agent&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;User-Agent&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Accept&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;Accept-Language&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept-Language&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;Accept-Encoding&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Accept-Encoding&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Connection&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;keep-alive&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;Cache-Control&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;max-age=0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Authorization&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Authorization&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Authorization&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; req)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; responseHeaders &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; status &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Www-Authenticate&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; authHeader &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Www-Authenticate&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; re &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RegExp&lt;/span&gt;&lt;span&gt;(AUTH_URL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;g&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Www-Authenticate&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; authHeader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(re&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; WORKERS_URL))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Location&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleHttpRedirect&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Location&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;access-control-expose-headers&apos;&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;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;access-control-allow-origin&apos;&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;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Cache-Control&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;max-age=1500&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Content-Security-Policy&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Content-Security-Policy-Report-Only&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Clear-Site-Data&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; responseHeaders &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Handle GitHub proxy requests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&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; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleGitHubProxy&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; path &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;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;q&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (path) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;redirect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;https://&apos;&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;host &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; PREFIX &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;301&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&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; url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;(url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PREFIX&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;+&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;https://&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;checkUrl&lt;/span&gt;&lt;span&gt;(path)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;httpHandler&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; path)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; (path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(exp2) &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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (Config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;jsdelivr) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; newUrl &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/blob/&apos;&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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&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;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;&apos;https://cdn.jsdelivr.net/gh&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;redirect&lt;/span&gt;&lt;span&gt;(newUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;302&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&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; path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/blob/&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/raw/&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;httpHandler&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; path)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; (path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(exp4) &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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; newUrl &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&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;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;)&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;+?&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;)&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;@$1&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;/&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&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\/\/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;raw&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt;githubusercontent&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;com&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;https://cdn.jsdelivr.net/gh&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;redirect&lt;/span&gt;&lt;span&gt;(newUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;302&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(ASSET_URL &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; path)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Check if the URL matches GitHub patterns.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &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;url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;boolean&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkUrl&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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [exp1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; exp2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; exp3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; exp4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; exp5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; exp6]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;exp&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; url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(exp) &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;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Handle HTTP redirects.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &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;location&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleHttpRedirect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createURL&lt;/span&gt;&lt;span&gt;(location)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;makeResponse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Invalid URL&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxyRequest&lt;/span&gt;&lt;span&gt;(url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; req)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Handle HTTP requests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &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;pathname&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;httpHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;OPTIONS&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;access-control-request-headers&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&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; PREFLIGHT_INIT)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; flag &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;whiteList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; whiteList) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (pathname&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;(i)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;flag &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;flag) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;blocked&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; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;403&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (pathname&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;/&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;https&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\/\//&lt;/span&gt;&lt;span&gt;) &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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;&apos;https://&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; pathname&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createURL&lt;/span&gt;&lt;span&gt;(pathname)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxyRequest&lt;/span&gt;&lt;span&gt;(url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; headers&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Proxy a request.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&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; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;RequestInit&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reqInit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Promise&amp;lt;Response&amp;gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxyRequest&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; &lt;/span&gt;&lt;span&gt;reqInit&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; reqInit)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; responseHeaders &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;location&apos;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; location &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;location&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;checkUrl&lt;/span&gt;&lt;span&gt;(location)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;location&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; PREFIX &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; location)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reqInit&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;redirect &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;follow&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxyRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;createURL&lt;/span&gt;&lt;span&gt;(location)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; reqInit)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;access-control-expose-headers&apos;&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;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;access-control-allow-origin&apos;&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;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-security-policy&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-security-policy-report-only&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;responseHeaders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;clear-site-data&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; responseHeaders&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;参考资料&lt;a href=&quot;#参考资料&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/621142457&quot;&gt;2023最新WSL搭建深度学习平台教程（适用于Docker-gpu、tensorflow-gpu、pytorch-gpu） - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.csdn.net/anmin8888/article/details/127910084&quot;&gt;CUDA与cuDNN安装教程（超详细）-CSDN博客&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/471484611&quot;&gt;Pytorch Docker镜像构建教程（不同系统、CUDA、Python版本） - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rocm.docs.amd.com/projects/radeon/en/latest/docs/install/wsl/install-pytorch.html&quot;&gt;Install PyTorch for ROCm — Use ROCm on Radeon GPUs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>为 WSL 中的 Docker 配置 systemd 以使用宿主机代理</title><link>https://blog.hpcesia.com/posts/set-proxy-for-docker-in-wsl/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/set-proxy-for-docker-in-wsl/</guid><description>为 Windows 10 上的 WSL2 安装的原生 Docker 配置代理</description><pubDate>Sat, 04 Jan 2025 11:19:35 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;WSL 中使用 Systemd 为 Docker 配置代理&lt;a href=&quot;#wsl-中使用-systemd-为-docker-配置代理&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于 Windows 11 22H2 以上版本来说，为 WSL2 里的 Docker 配置代理，只需要将 WSL2 的网络切换为镜像模式，即可像配置原生 Linux 一样配置代理。但对 Windows 10 用户来说，配置代理就会麻烦一点。由于 WSL2 每次宿主机开机时，分配的虚拟网卡地址不一样，因此不能直接使用 127.0.0.1 访问宿主机上的代理。同时 Docker 使用 systemd 启动，写在终端中的代理配置，如&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; hostip=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; /etc/resolv.conf &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; -oP &lt;/span&gt;&lt;span&gt;&apos;(?&amp;lt;=nameserver\ ).*&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; https_proxy=&lt;/span&gt;&lt;span&gt;&quot;http://&lt;/span&gt;&lt;span&gt;$hostip&lt;/span&gt;&lt;span&gt;:7890&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; http_proxy=&lt;/span&gt;&lt;span&gt;&quot;http://&lt;/span&gt;&lt;span&gt;$hostip&lt;/span&gt;&lt;span&gt;:7890&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;是不能正常生效的。&lt;/p&gt;
&lt;p&gt;网络上的相关教程基本都使用的是固定 ip，这样每次开机都需要改动 ip，或者写脚本固定分配给 WSL2 的ip。我研究了一段时间后，发现可以直接通过修改 systemd 配置来让 Docker 也使用宿主机的代理。&lt;/p&gt;
&lt;p&gt;以下以 Clash 为例，代理端口为 7890，WSL2 中用户名称为 hpcesia，请自行改动相关内容。首先创建配置文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/systemd/system/docker.service.d&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/systemd/system/docker.service.d/proxy.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在其中输入如下内容，注意替换端口号：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# proxy.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ExecStartPre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sudo /bin/bash -c &lt;/span&gt;&lt;span&gt;&quot;echo http_proxy=http://$(cat /etc/resolv.conf | grep -oP &apos;(?&amp;lt;=nameserver\\ ).*&apos;):7890 &amp;gt; /tmp/docker_env&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ExecStartPre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sudo /bin/bash -c &lt;/span&gt;&lt;span&gt;&quot;echo https_proxy=http://$(cat /etc/resolv.conf | grep -oP &apos;(?&amp;lt;=nameserver\\ ).*&apos;):7890 &amp;gt;&amp;gt; /tmp/docker_env&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EnvironmentFile&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;-/tmp/docker_env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Environment&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;no_proxy&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;127.0.0.1,localhost&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;再重启 docker 即可。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;daemon-reload&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;restart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docker&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 hello-world 镜像进行测试，可以正常拉取，说明配置成功。&lt;/p&gt;
&lt;h2&gt;参考资料&lt;a href=&quot;#参考资料&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jinbuguo.com/systemd/systemd.exec.html#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F&quot;&gt;systemd.exec 中文手册 [金步国]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jinbuguo.com/systemd/systemd.service.html#ExecStartPre=&quot;&gt;systemd.service 中文手册 [金步国]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>月寄（二）| 自食其果</title><link>https://blog.hpcesia.com/posts/monthly-journal-2/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/monthly-journal-2/</guid><pubDate>Sun, 29 Dec 2024 04:01:02 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;p&gt;许久不见，上次更新博客已是一个月前的事情了。到现在，随着考研和期末考试的结束，这个学期的所有事情也算是告一段落了，只剩一个时间还算充裕的毕业论文需要忙，所以我赶紧码了一篇文章，以免整个 12 月都没一篇新博文。&lt;/p&gt;
&lt;p&gt;12 月事情比较多，所以把周记改成了月记，本次月记记录时长为 5 周：11.25 - 12.29。&lt;/p&gt;
&lt;h2&gt;非典型考研&lt;a href=&quot;#非典型考研&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;今年的考研时间比以往提前了些许，是 12 月 21-22 日。为什么说是「非典型考研」呢？因为我自己的考研复习安排，现在回顾起来，我自己看着都想笑。&lt;/p&gt;
&lt;p&gt;我决定要考研并开始复习的时间其实还是蛮早的，今年春节时便已经决定要考研跨考到计算机，并开始学习 408（计算机综合统考科目）了。但是我在 12 月以前的复习，都可以用「随缘」来形容。一直到了 9 月，我才磨磨蹭蹭地把 408 的四门课程全部看了一遍，然后发现根本记不住那么多知识点，只能赶紧找到了专业课考自命题，只用学 408 中两门的西交。&lt;/p&gt;
&lt;p&gt;从9月开始，我就按考试顺序挨个说说自己各个科目的备考情况吧。&lt;/p&gt;
&lt;p&gt;首先是政治，我从 9 月开始磨磨蹭蹭地看徐涛老师的考研政治强化班，顺便做做《肖 1000》。中间分心于各种闲事，譬如鼓捣这个博客，直到 11 月底（本次月记开始的时间）强化班也才看了一半。感觉时间来不及了，于是我紧赶慢赶心不在焉地把剩下一半的课程在 12 月初《肖四》出来之前看完了。拿到《肖四》时，已是 12 月 13 日，当天我就开始背《肖四》分析题答案的提纲，顺便把四套卷子的选择题都做了一遍。（顺带一提，政治分析题的复习方式——背押题卷的答案——我是等肖四到了才在和一起备考的舍友那里知道的。）&lt;/p&gt;
&lt;p&gt;背一会儿玩一会儿地背了一个白天，我只背完了一道题（即四套押题卷的同一题的答案），但却感觉有些生理性的恶心想吐，完全背不下去也记不住，之后几天便换成了背诵提纲的提纲，即 B 站上带背视频总结的答案要点。（还是刚才那个舍友，他直接背了前两套卷的完整答案和后两套卷的提纲，我是真佩服。）&lt;/p&gt;
&lt;p&gt;政治今年卷子难度算是最近十几年来最难的一次了，表现就是《肖四》中押的考点，要么背的答案都写在材料里，要么压根不沾边，能用上的东西很少。不过对我这种没好好背《肖四》答案的人来说，倒算是一个利好，大伙都只能在考场上「守正创新」——抄材料和瞎编，背没背好押题卷的答案就不重要了（笑）。&lt;/p&gt;
&lt;p&gt;然后是英语。这科其实没什么好说的，在去年 6 月考完 4 级，发现自己单词量相当匮乏、试卷上有大量没见过的单词时，我便开始用「不背单词」这个应用来每天背单词，一直到上考场时，背过的单词数量是 5000 左右，记得比较熟的单词大概在 3500 左右，基本覆盖了考研考纲词汇。9 月初，我再 burningvocabulary 上下载了过往三年的英语一真题做了一下，发现难度并不高，于是便没有复习英语，只在临考的时候稍微看了下作文模板，记了下各种文章格式要求。&lt;/p&gt;
&lt;p&gt;英语一今年的考试难度据说也是近十年最难的了，试题难度仅次于 2010 年。我自己的做题感受就是：完形填空知道这个空该填什么意思的单词，但四个选项的短语都不知道是啥意思，单词本意看起来填上去基本都说得过去；阅读理解的文章自说自话逻辑不清，需要先帮作者厘清逻辑才能回答问题；段落排序虽然难度不大，但是也需要花不少时间仔细读一遍才能做出来；翻译中的长难句各种从句修饰相互嵌套好几层，费劲功夫厘清嵌套关系后（最想要编程语言的「{}」来清楚标识嵌套层级的一集），直译出来的中文语序过于怪异，还需要绞尽脑汁安排语序，让翻译出来的东西不至于变成「好小众的语言，长得和汉字好像」。作文就很凄惨了，前面花费太多时间，加上完全没背作文模板，硬着头皮写的东西自己都看不下去。&lt;/p&gt;
&lt;p&gt;接着是数学。这科是我最意外的一科，毕竟我是数学系的，对数学功底多少还有点自信。于是我就只在十一月底做了四五套往年的数学一真题练练手并检查一下自己遗忘较多的知识点，接着做了点遗忘知识点的题目，就去考试了。&lt;/p&gt;
&lt;p&gt;但是今年的数学一考研试题给了我一个迎头痛击：我能看出来题目本身不难，但要么需要花很多时间计算，要么涉及的解题技巧比较偏门。我压根没复习到。很多题目我知道只要我多刷点题，肯定能刷到类似题目，到了考场上自然也解得出来，可我仗着自己是数学系，没有多刷题，于是考场上就麻爪了。结果就是，数学系带给我的优势，只在唯一的一道证明题上体现了出来——那道题基本属于数分期末考试最前面的送分题水平。但这点优势又被没刷题导致的劣势拉回去了（悲）。与前两科不同的是，我考完出来时在社交媒体上看到的却是「这次数学一挺简单的」，吐槽难度的没多少，让我汗流浃背了。&lt;/p&gt;
&lt;p&gt;最后是专业课。直到 12 月 8 日，离考试还有两周的时候，我打算做点自命题考试的往年真题，才发现西交的自命题考的和 408 统考并不完全相同，于是紧急开始用西交的教材复习，以及写课后题。&lt;/p&gt;
&lt;p&gt;从考试体感来看，这最后一门自命题专业课，反倒是最简单、最眉清目秀的。基本全考的常规题，即便有些东西记得不清也能瞎扯上几句相关的蹭点分。&lt;/p&gt;
&lt;p&gt;对于上岸，估计是没啥指望了，数学给我拉下来了太多的分数。目前预估分数是政治 60 + 英语 70 + 数学 90 + 专业课 110，总计 330 分，而西交去年的复试线是 350 分，即使算上今年考研政治英语难度增加，分数线也大概在 340 上下，所以基本是没啥希望了，属于是这种吊儿郎当的学习态度应得的结果。&lt;/p&gt;
&lt;h2&gt;喝水&lt;a href=&quot;#喝水&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;不知各位平时喜欢喝什么水呢？我个人最喜欢喝的是怡宝的纯净水。虽然网上不少认为各种水并没有多少区别，但就我个人体验来说，不同品种的水口感是相当不同的：纯净水是口感最好的，入口清冽甘甜，喝完不会有多余的味道停留在口中；矿泉水入口亦有微甘，但稍稍有些发涩，喝完后喉头回苦，不宜多喝；自来水烧的白开水当属口感最差的，入口苦涩，难以下咽，喝完舌根与喉咙都是苦的。&lt;/p&gt;
&lt;p&gt;水的温度也会影响口感。冰水和热水都会掩盖住口感差异，常温的冷水口感差异则会非常显著。所以只有白开水可喝时，我通常会喝 50℃ 左右的热水，否则根本喝不下去。做成饮品也不失为一种掩盖异味的选择，或是泡茶，或是煮咖啡，或是加些蜂蜜，总之都能让水变得可以入口。&lt;/p&gt;
&lt;p&gt;11月底的时候，我在网上图便宜买了 4 桶 5L 装的怡宝饮用水，但入口时才发现这个「饮用水」并非纯净水，入口一股涩味，大概是用的天然水。但买都买了，这种东西又不好退货，而且天然水的涩味也不算很难入口，于是也就这样喝着了。&lt;/p&gt;
&lt;h2&gt;写作工作流优化&lt;a href=&quot;#写作工作流优化&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本节还可以叫作「Hello, Syncthing」。&lt;/p&gt;
&lt;p&gt;这个月剩下的一点空闲时间里，我将编写文章的工作流进行了一些优化。最开始，我写文章全程都在 VSCode 内部进行。但很快我就发现了一个问题：坐在电脑前得来的灵感并不多，而灵感转瞬即逝，需要尽快记录下来，于是我开始研究如何多端同步编辑文章。此前，我是通过 Gitea 的在线编辑功能（小屋的源码托管在自建 Gitea 上）与安卓端的 Obsidian，使用手动复制的方式来多端同步编写文章。但这样做既不优雅，还有个问题：我必须在切换设备前提交文章更新并上传，这实在是太麻烦了。所以我开始研究一个更优雅的工作流。&lt;/p&gt;
&lt;p&gt;最近，由于对多端同步本地音乐库有了需求，我找到了 Syncthing 用于同步手机与 PC 上的音乐库。利用手上的香港 VPS 搭了一个发现服务器和中继服务器后，实现了音乐库的同步。在此之后，文档的同步自然也提上了日程。正好 Syncthing 可以自定义同步文件夹存储位置，而 Obsidian 也可以自定义存储库位置，一个同步工作流就此建成，终于不用每次换设备就 commit，污染 git 记录了。目前用起来感觉还算不错，虽然 Syncthing 的同步速度有点堪忧，例如对于上面提到的音乐库的同步来说，半天都同步不了几首歌，但胜在不需要额外关注，等哪天想在电脑上听歌的时候，音乐库就已经同步完成了。&lt;/p&gt;
&lt;h2&gt;Hello, WSL2&lt;a href=&quot;#hello-wsl2&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;毕业论文需要使用到深度学习，需要使用 PyTorch，但是 Python 的环境管理又是个老大难的问题。为了不被虚拟环境和包管理气晕，再加上导师此前没做过深度学习方向，想让我留下一份论文学习开发笔记，方便未来他让其他人跟着我的经验来做这方向的项目，我决定直接使用 Docker 来开发，节省包管理的时间，也方便多系统移植环境。需要用 Docker，自然就得请出最好的 Linux 发行版 WSL2 了。&lt;/p&gt;
&lt;p&gt;在此之前，我虽然已经装了 WSL2，但也只是出于折腾工具的心理，配置了一下 zsh 就放着吃灰了。不幸的是，当时折腾的时候还没建博客，没想着留笔记，现在只剩下一份看不懂的 .zshrc 了，动不了一点配置。由于看不懂之前折腾的 .zshrc 配置，我选择换一个轻松，不用花过多精力配置的 Shell 来进行开发——Fish。Fish 的优势就是自带代码补全、高亮、提示等 zsh 需要花时间配置的功能（oh-my-zsh 配置起来很快，但性能堪忧，我自己花时间配置的性能高的 zsh 又没留笔记），且有可视化的配置网页，但缺点就是和 bash、zsh 不兼容，不能直接运行一些 shell 脚本。&lt;/p&gt;
&lt;h2&gt;Hello, Starship&lt;a href=&quot;#hello-starship&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://starship.rs/&quot;&gt;Starship&lt;/a&gt; 是一个 rust 编写的轻量、迅速、客制化的终端美化软件，Windows/Linux/macOS 三端适配，bash/zsh/cmd/fish/posh 等等终端均可使用，是美化中的强者。多系统、多 Shell 通用的好处就是高一致性，不同系统上的不同 Shell 可以使用同一个配置文件，比如我在 WSL 中同时安装了省心的 fish 和通用兼容的 zsh，加上自带的 bash，三个 Shell 外加 Windows 里的 PowerShell，都可以使用同一套配置文件（PowerShell 需要复制一份配置文件到 Windows 文件系统里），达成外观上的一致性。&lt;/p&gt;
&lt;h2&gt;Hello, Floorp&lt;a href=&quot;#hello-floorp&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 B 站上看 Firefox 相关优化视频的时候，偶然看到了 Floorp 这个基于 Firefox 的浏览器，外观美观，自带功能丰富，适合我这种不想花太多时间折腾浏览器的懒人。缺点大概就是魔改的东西比较多，内核更新速度会比较慢。&lt;/p&gt;
&lt;p&gt;这段时间使用下来，个人觉得比较好用的几个功能：折叠侧边标签页可以方便地同时浏览更多网页；保存侧边栏网页应用可以在浏览网页的时候快速打开 OpenWebUI 来调用本地 Ollama 模型聊天；内置了一些方便的修改，就不用去翻 Firefox 的 config 页面了。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>周寄（三）| 又是一篇无聊的碎碎念</title><link>https://blog.hpcesia.com/posts/weekly-journal-3/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/weekly-journal-3/</guid><description>写博客无聊吗？或许吧。但我愿意，这就够了。</description><pubDate>Wed, 27 Nov 2024 10:55:03 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;p&gt;本次周记记录时间为：11.18 - 11.24&lt;/p&gt;
&lt;h2&gt;碎碎念&lt;a href=&quot;#碎碎念&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本次周记其实本来打算鸽了的，因为确实没多少好写的东西，而且离考研只剩一个月了，也完全抽不出多少时间来写东西，最近的文章基本都是存稿补全 （是的，那篇塞尔维亚的旅游回忆已经在草稿箱里待了三个月了）。不过休息时间看了点东西，总算是有的写了，于是这篇周记还是发了出来 （不鸽掉原先说好要鸽的文章，这何尝不是一种鸽）。下个月的周记大概率是直接鸽了，真没时间了，估计会等到 12 月月底写个月记。&lt;/p&gt;
&lt;p&gt;有时挺羡慕&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的，每周周报都能写五六千字，或许是我自己阅读量确实太少了？大学以来，没再读过严肃文学了，只读网络小说。等考研与毕业论文结束后，兴许应该读点书了，哲学也好历史也好，总之多吸收点东西，才不至于写周记时无话可讲，写旅游回忆时只有流水账。虽然目前小屋的文章多是技术类，可技术类虽然文笔重要性不高，但需要有大量干货才能动笔，而获取干货并不比读书简单。&lt;/p&gt;
&lt;p&gt;目前暂定后续会读的大概是各地神话故事与一些哲学书籍。其实感觉这个想读的书的取向属于是玩游戏玩的，在玩的游戏都有些剧情在探讨一些哲学，虽然 B 站上也有剧情解析，但只看别人的观点总归不是啥好事，需要自己得出观点，才不至于别人说啥我信啥。&lt;/p&gt;
&lt;h2&gt;最近喜欢的小说&lt;a href=&quot;#最近喜欢的小说&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;既然谈到读书，虽然正经书没啥可分享的，但也可以在此处推荐几本比较喜欢的网络小说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;《&lt;a href=&quot;https://www.qidian.com/book/1036504904/&quot;&gt;谁让他修仙的！&lt;/a&gt;》：轻松搞笑的修仙爽文。作者喜欢写反套路的搞笑桥段，相当欢乐。但作者似乎不善感情描写，上本小说写到最后好几个暧昧对象，但却无女主；这本小说暧昧对象虽然也多，至少还有两个比较明显的女主，希望感情线写到后面不会太拉胯。&lt;/li&gt;
&lt;li&gt;《&lt;a href=&quot;https://www.qidian.com/book/1039807042/&quot;&gt;万历明君&lt;/a&gt;》：明末历史小说，非爽文。主角是白手起家的高官魂穿幼年万历，政治斗争和谋略写得很精彩。作者古文功底也相当精悍 （就是读者看大量文言文会有点费劲），至少写得出举人级别的古文水平。&lt;/li&gt;
&lt;li&gt;《&lt;a href=&quot;https://www.qidian.com/book/1037095853/&quot;&gt;牧者密续&lt;/a&gt;》：琥珀流奇幻小说，偏二次元风格。智斗谋略为主，主角的性格成长刻画得很好。感情线也写得不错，就是中期会有点作者个人二次元 XP 问题，但合我 XP 所以还是极力推荐。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;保温杯&lt;a href=&quot;#保温杯&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我大学三年下来，换过 4 个保温杯。第一个是从高中带过来的 1.2L 容量大杯子，用起来还算不错，但有一个问题：太大了，我新背包的侧兜完全装不下。&lt;/p&gt;
&lt;p&gt;为此，我在淘宝上买了个 450mL 容量、方便携带的黑色保温杯，用来日常喝水。买来后的前几个月，这个新的保温杯用起来还是不错的；但是没过多久，保温杯外侧就开始掉漆了，一片片的黑色涂层脱落，经常附在杯口，实在膈应，只能丢掉，改为复用喝剩的饮料瓶子装水喝。&lt;/p&gt;
&lt;p&gt;过了一段时间，我在逛淘宝时发现哈尔斯的翻盖款智能保温杯叠劵后价格还算不错，和华为智慧生活连接的喝水量统计功能看起来也挺新奇，果断买下。但买来后饮水量统计和杯中水温的功能基本没用到过，反而充电是个麻烦。这个保温杯用到刚过保没多久时，水杯翻盖的锁舌就突然断裂，很难让人不怀疑是计划报废。锁舌断裂，水杯就合不上盖了，自然只能丢了。&lt;/p&gt;
&lt;p&gt;至于最后一个水杯，也是我现在用的水杯，在购买它时我吸取了前几个水杯的教训，选择了一个金属原色（不会掉漆）的旋盖（没有锁舌断裂风险）普通（没有用不上的智能）水杯。使用到现在，确实没有掉漆的问题，但旋盖与杯口的摩擦导致杯口有些诡异的黑色物质，也不知是因为杯盖质量不行、没有使用好的不锈钢导致的，还是摩擦刮下来的金属碎屑。看来再下一个保温杯，得选择塑料盖子的才行。&lt;/p&gt;
&lt;h2&gt;无聊的博客&lt;a href=&quot;#无聊的博客&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;想了一下，还是把这一节调整到了最后。&lt;/p&gt;
&lt;p&gt;最近读到了&lt;a href=&quot;https://onojyun.com/&quot;&gt;莫比乌斯&lt;/a&gt;的《&lt;a href=&quot;https://onojyun.com/2024/11/22/%E6%97%A0%E8%81%8A%E7%9A%84%E4%B8%AD%E6%96%87%E5%8D%9A%E5%AE%A2%E5%9C%88/&quot;&gt;无聊的中文博客圈&lt;/a&gt;》。莫比乌斯写在他的博客内的不少观点我无法苟同，但这篇文章多多少少让我有些思考。&lt;/p&gt;
&lt;hr /&gt;
&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;写完上面一段后，我审视了一下小屋里已有的文章，看到了不少毫无独创性的「缝合怪」。譬如，还是上面说的那几篇数学文章，除去第一篇有限差分的文章，里面的证明均由我自己推导外，其余几篇多复变函数论「笔记」，其本质就是把老师给的 PPT 又抄了一遍，除去自我感动外，毫无用处。&lt;/p&gt;
&lt;p&gt;不过这些文章还是会先留着，等未来切换到 Astro（目前已有计划，但碍于空闲时间极少，无力实施）后会精简一次博客文章，届时再丢掉这些文章，连同那时的整个 Hexo 博客一起保留在一个存档站点中。&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;独立博客的「人设」功能，迫使它需要按照某种「姿态」去表达自我。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;网上冲浪，谁还没个人设啊。在这个小屋，我是一个普通的二次元「萌萌人」，会多给点情绪价值，大伙一起和和气气交流 （虽然实际上没几个人）。在别的地方，我也可以是别的人设，和和气气的地方我也和和气气，戾气较重的地方，我也多少带点戾气。即便在现实中，我又何尝不是带着面具说话呢？&lt;/p&gt;
&lt;p&gt;更何况小屋作为一个可公开浏览的地方，我并不愿意在这里写一些牵扯隐私的东西。对于一个在互联网暗区混过一段时间，现在时不时看一眼暗区边缘的我来说，被「开盒」是一个切实存在的风险。虽然对于有社工库的人来说，我在小屋里写不写这些牵扯隐私的东西并无区别——因为我全网同 ID。但通过搜索引擎获取公开信息进行推理的开盒方式还是要预防一下的。&lt;/p&gt;
&lt;p&gt;我也不愿在这里写太多敏感话题。一方面是上面说的锁定现实身份问题，既然公开信息都有可能锁定我了，那么网安要锁定我本人就更简单了；另一方面是我也自认为阅历和文笔还不足以在这些敏感话题上写出言之有物的文章。但莫比乌斯的一些敏感话题相关文章也提醒我了，既然我压根不打算备案，又何必费尽心思去严格地自我审查呢？写&lt;a href=&quot;/posts/weekly-journal-2/&quot;&gt;上次周记&lt;/a&gt;中「BitWarden 客户端这种需求量不大的开源软件，短时间内肯定没人移植到鸿蒙，不像 Clash 这种刚需级软件，早早地就有人移植到鸿蒙 Next 上。」这段话时，我考虑过将 Clash 更换为 Clxxh 以规避审查，现在想来多少是有些搞笑了。在社交平台上要自我审查严防违规，到了不备案的独立博客上还得自我审查严防违规，那我这博客不就白搭了吗？&lt;/p&gt;
&lt;p&gt;当然，这不是说我真就完全不自我审查想说啥说啥了，虽然没啥人看，但是我还是要给国内用户提供一个较好的浏览速度的。因此我会保持自我审查与评论审查的限度，保证小屋不会被 GFW 掉即可。&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;不需要为写博客这个行为找一个合理正当的理由，喜欢写博客就像不喜欢吃香菜一样，天生的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上面这句引用自那篇文章的一个&lt;a href=&quot;https://onojyun.com/2024/11/22/%e6%97%a0%e8%81%8a%e7%9a%84%e4%b8%ad%e6%96%87%e5%8d%9a%e5%ae%a2%e5%9c%88/comment-page-1/#comment-3986&quot;&gt;匿名评论&lt;/a&gt;。这句话说得难听且粗俗点，就是最近网上较为流行的一个对话模板：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「我埃及吧写博客就写博客。」&lt;/p&gt;
&lt;p&gt;「太好了是法老，我们有救了！」&lt;/p&gt;
&lt;/blockquote&gt;  &lt;/article&gt; </content:encoded></item><item><title>塞尔维亚旅游回忆 - 上篇 - Day 1-3</title><link>https://blog.hpcesia.com/posts/serbia-travel-journal-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/serbia-travel-journal-1/</guid><description>记录 2024 春节进行的为期 7 天的塞尔维亚旅行。由于篇幅过多，分为三篇进行发布，此为上篇。本篇主要记录在塞尔维亚与波黑交界处附近的旅行。</description><pubDate>Sat, 23 Nov 2024 15:28:47 GMT</pubDate><content:encoded>&lt;article&gt; &lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本次旅游时间：2024 年 2 月 13 日 - 2024 年 2 月 21 日（北京时间）。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Day1 - 启程&lt;a href=&quot;#day1---启程&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Day1 路线：重庆 → 卡塔尔 → 贝尔格莱德 → 兹拉蒂博尔&lt;/p&gt;
&lt;p&gt;一整天都基本在赶路，不是在飞机上就是在汽车上。&lt;/p&gt;
&lt;h3&gt;重庆 → 卡塔尔&lt;a href=&quot;#重庆--卡塔尔&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这次旅游是我爸拉着我去的，我们在卡塔尔航空上买了两张往返塞尔维亚的经济舱机票。由于重庆无直达航线，需经卡塔尔中转（&lt;/p&gt;
&lt;p&gt;理论上去北京中转也行，但是好像一周就一次航班），购买的是凌晨起飞，上午（当地时间）到达的机票。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2 月 12 日晚上 22 点整，我们到达了江北机场的国际候机室，等待登机。由于候机室的饮料实在太贵~~（一罐可乐 45 块，你怎么不去抢啊）~~，我爸又爱喝饮料，于是用了他的信用卡权益换了两个贵宾休息室的位置爽喝饮料爽恰零食。&lt;/p&gt;
&lt;p&gt;2 月 13 日凌晨 0 点 15 分，我们于江北机场坐上了前往卡塔尔的飞机。因为是春节期间，起飞后空姐给每个人都塞了个小红包，里面是两个金币巧克力：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;经济舱的环境实在是难受，整整 10 小时的飞行时间完全睡不着一点（悲）。而且我坐在靠窗位置，导致想去上厕所得先把我爸喊醒，就更麻烦了。&lt;/p&gt;
&lt;h3&gt;卡塔尔 → 贝尔格莱德&lt;a href=&quot;#卡塔尔--贝尔格莱德&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;经过 10 小时的经济舱折磨，我们终于到达了中东土豪卡塔尔的多哈机场。整个候机楼到处都是奢侈品免税店，比迪拜的机场还让人眼花缭乱。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在候机楼煎熬等待了两个小时一行，我们总算是坐上了前往贝尔格莱德的飞机。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;贝尔格莱德 → 兹拉蒂博尔&lt;a href=&quot;#贝尔格莱德--兹拉蒂博尔&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;中午&lt;a href=&quot;#中午&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;经过 5 小时的旅程，我们总算是到达了塞尔维亚境内。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;刚出机场，我就注意到了机场顶部的大字「BELGRADE AIRPORT NIKOLA TESLA」：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&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;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;说实话，和国内三四线小城里的小区给我的感觉差不多。掉色的外墙看着颇为破旧。正好已是当地时间中午，我们找了个居民楼楼下的比萨店，照着菜单上的图片点了一份看着还行的比萨作为午饭。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;下午&lt;a href=&quot;#下午&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;吃过午饭，便该离开贝尔格莱德市区，一路向西南出发前往兹拉蒂博尔。一路上风景都还不错，也遇到了不少欧洲特色建筑（教堂和城堡）。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;多图折叠&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;到达兹拉蒂博尔后，我们在预定好的民宿处安顿下来，然后出去觅食。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;晚上散步的时候看到了一个军官的雕像，上面写着「КАЈМАКЧАЛАН АРМИЈСКИ ЂЕНЕРАЛ КРСТА СМИЉАНИЋ 1868·1944」。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;关于这个将领的信息&lt;/div&gt;&lt;div&gt;&lt;p&gt;写这个博客的时候查了下维基，原来是南斯拉夫在一战时期的的陆军将军，名字可以翻译为「克尔斯塔·斯米尔贾尼奇」，照片长这样：&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这个雕像是为了纪念这个将军在凯马克查伦（Kaymakchalan 或 Кајмакчалана）战役上带领德里纳（Drina 或 Дринска）师的成就而设立的。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;散完步，买了点饮料和零食，我们就回到民宿，准备第二天的旅程。&lt;/p&gt;
&lt;h2&gt;Day2 - 索道与雪山&lt;a href=&quot;#day2---索道与雪山&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;上午&lt;a href=&quot;#上午&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一大早，我们就起床出发，徒步前往不远处的兹拉蒂博尔缆车的出发点。一路上有不少售卖当地特产的商店，如果忽略掉招牌上的西里尔字母，似乎与国内一些古镇并无多少区别。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;兹拉蒂博尔拥有目前世界最长的空中索道缆车，全长 9 公里，将兹拉蒂博尔城与 Tornik 山峰相连，一路上的风景基本都是草原与牧场。票价已经忘记是多少了，当时也没拍照片，但是印象里不算贵。包车会更贵一点，但是我们起得够早，此时缆车的出发点并没有人在排队，所以我们只需要正常购票就能事实上地达成包厢的目的。事实证明开头那段旅游景点介绍是真实的，路上的风景是相当美丽，一路上只会疯狂拍照了：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;多图折叠&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&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;div&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这座山也是一个滑雪的好去处，除去我们所坐的观光缆车外，还有一个专为滑雪者提供服务的缆车，可以穿着滑雪板直达山顶，源源不断地有滑雪者坐着缆车到达山顶，然后沿着滑雪道飞驰。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;由于我实在是扛不住山上的气温，只在山顶待了不到一个小时，我们便乘坐缆车回到了山下。回到山下的时候虽然才当地时间十点，但因为出门时没吃早饭，我和我爸都已经有些饿了，于是我们找了个路边的店，一人买了一个欧洲版肉夹馍作为今天的午餐。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;中午&lt;a href=&quot;#中午-1&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;边走边吃地吃完了午饭后，我们决定先好好逛一下这个镇子，毕竟昨晚虽然也散步走了一小圈，但天色太黑看不真切。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;镇上大部分其实只是看个新鲜，也就是常规的欧洲民居罢了，唯一值得放在文章里的是一个小教堂。教堂虽小，里面的装饰却不含糊，金碧辉煌~~（虽然见识过阿联酋的宫殿后已经不稀奇了）~~。说实话，我对这些教堂并不怎么感兴趣，尤其是这种小的，只是随便拍了几张照片。我爸倒是对此相当感兴趣，各种角度拍了半天。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;多图折叠&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3&gt;下午&lt;a href=&quot;#下午-1&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下午，依旧是我爸开车，去参观一个非常偏僻的教堂。一路基本都是乡间小路，虽然我爸几十年老司机技艺娴熟，但还是让我有些担心我们租的这辆奥迪轿车能否撑得住路上的颠簸。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;结果到了教堂，我们才发现今天教堂关门了，于是只能在外面拍几张照作罢。&lt;/p&gt;
&lt;p&gt;回民宿的路上，我爸突然发现有一条支路可以开到早上坐缆车到的山顶上，而我们租的这辆车的轮胎和性能都足够在较浅的雪地里行驶，因此我们又开着车前往山顶。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此时的山顶，在下午的阳光照耀下，雪相比早上少了不少，露出了下面的土地。气温也暖和了不少，至少不用在寒风中瑟瑟发抖了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在山顶又拍了些照，我们便返回了民宿，买了些零食和饮料，为第三天的旅程做准备。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Day3 - 古桥&lt;a href=&quot;#day3---古桥&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;上午&lt;a href=&quot;#上午-1&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一大早，我们便收拾好东西，退掉民宿，驱车前往波黑的莫斯塔尔。路上倒是没多少好说的，唯一值得一提的是手机信号。在塞尔维亚境内，一路上基本都是 4G 信号，至少是可以正常水群聊天的。但一到波黑境内，手机信号立马降到 2G，时不时会直接无信号。由于没料想到手机信号会那么差，我手机上没有多少适合消磨时间的东西，只能玩玩数独解闷。&lt;/p&gt;
&lt;p&gt;我们一直开到一个服务区才有手机信号，这时候也差不多该吃饭了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但服务区的手机信号仍然值得吐槽：只有在外面信号才是能正常使用的，餐厅里面只有 2G 信号，相当难绷了。而我爸又要到餐厅外面抽烟，我只能待在餐厅里面空欢喜一场。&lt;/p&gt;
&lt;h3&gt;下午&lt;a href=&quot;#下午-2&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一路奔波到了莫斯塔尔，我们入住了一个离莫斯塔尔古桥不远的民宿，稍微休整了一下，便步行出来前往古桥。&lt;/p&gt;
&lt;p&gt;在民宿门口，正对着的是一个教堂。这个教堂比昨天小镇上的教堂要大上少许，放了一大排椅子，更符合我心中对教堂的印象。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在教堂里拍了些照，我们便继续前往古桥。古桥位于莫斯塔尔老城当中，不过我更愿意称之为古镇，毕竟老城城区大小也就一个镇子左右，城里都是些狭窄的石子路，若是将石子换成青石板，白墙黑瓦换成木柱青瓦，倒是与国内古镇别无二致。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;穿过一小段老城的道路，便是著名的莫斯塔尔古桥。说是古桥，其实这桥修成也才 20 年。1993 年，原先的古桥在波黑战争中被炸毁，直到 8 年后才重建，虽然新桥仿照原先古桥的样式修建，使用的材料大部分是被炸毁的古桥的石料，但确确实实是一座新桥了，只是在文化上仍是一座古桥。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;桥上游客不少，能听到一些中文的交流声音，毕竟古桥是世界文化遗产，有我们之外的国人来此地一游也不奇怪。桥的两侧设有高高的铁栏杆，以防游客不慎跌落。据说几年前，这个桥上是没有额外布设铁栏杆的，兴许是近几年出现了一些游客跌落事件，这才加装了更高的栏杆吧。在古桥上可以拍到两侧的风景，远处还有一座更现代的桥，那也是我们来时驱车经过的桥梁。在晚上，古桥还会在两侧打上灯光，照亮桥拱。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在老城里逛了一圈，人乏马困，于是便在回民宿的路上找了一家餐厅用餐。今天的晚餐是烤肉大餐，算是我这个肉食爱好者的福音了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;吃饱喝足，下楼时偶遇从北京过来旅游的一家三口，难得有缘遇见同胞，相互聊了五六分钟，便回了民宿休息，备战第四天的旅程了。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;中篇和下篇还处于只有图片占坑写了大半的草稿状态，等以后有时间会写完发出来的~~（在写了在写了）~~ 已经拖了九个月了。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;  &lt;/article&gt; </content:encoded></item><item><title>周寄（二）</title><link>https://blog.hpcesia.com/posts/weekly-journal-2/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/weekly-journal-2/</guid><pubDate>Sun, 17 Nov 2024 11:22:17 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;这次周记其实主要都是些闲聊，一周的时间里，想到什么就在写什么，最后再整理一下，兴许这才是周记的正确打开方式？但想不出一个好名字用来总结了，想到了再说，现在先用着没名字的标题吧。本次周记记录时间为：11.09 - 11.17。&lt;/p&gt;
&lt;h2&gt;体测&lt;a href=&quot;#体测&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这周的体测是霉好的一千米跑和坐位体前屈，而我这学期就跑过三四次长跑，体能下降严重。再加上经常熬夜，结果就是，我成功打破了我大学以来的一千米跑最差记录，用时五分零二秒，妥妥的不及格（悲）。&lt;/p&gt;
&lt;h2&gt;第一台 VPS&lt;a href=&quot;#第一台-vps&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这周，我拿下了年轻人的第一台 VPS，买的是香港 2H2G 的轻量云，首年 110，价格还算能接受 （两张大月卡的钱）。我馋 VPS 也有段时间了，主要是馋密码管理，也就是 &lt;a href=&quot;https://github.com/dani-garcia/vaultwarden&quot;&gt;VaultWarden&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;火狐的密码管理其实用起来也还行，毕竟我现在用的不能网页登录的软件，基本都是用密码登录也要再输一遍手机验证码的。国内厂商的软件大都这样，123456 和 20 位的大小写字母数字符号混合密码没有本质区别，因为最后都要发一遍手机验证码。但是密码存火狐那里总归不是个事，还是存自己手上舒服。&lt;/p&gt;
&lt;p&gt;VPS 还部署了一些其他东西，截止本文发布时，除去上文提到的 VaultWarden，我在 VPS 上还部署了 &lt;a href=&quot;https://github.com/louislam/uptime-kuma&quot;&gt;Uptime Kuma&lt;/a&gt;（部署的网站状态监测，未来可能也会给友链做一下监测）、&lt;a href=&quot;https://github.com/usememos/memos&quot;&gt;Memos&lt;/a&gt; 说说（用于替换我博客原来使用的静态说说）、&lt;a href=&quot;https://github.com/go-gitea/gitea&quot;&gt;Gitea&lt;/a&gt;（用于存储博客源码与持续部署，不用受制于 GitHub Action 的免费额度）、&lt;a href=&quot;https://github.com/AlistGo/alist&quot;&gt;Alist&lt;/a&gt;（统一各个网盘，得益于服务器位置，可以直接访问谷歌云盘）、&lt;a href=&quot;https://github.com/searxng/searxng&quot;&gt;SearXNG&lt;/a&gt;（搜索引擎聚合，同样得益于服务器位置，可以直接用谷歌搜索）、&lt;a href=&quot;https://github.com/FreshRSS&quot;&gt;FreshRSS&lt;/a&gt;，还有个 &lt;a href=&quot;https://github.com/gethomepage/homepage/&quot;&gt;Homepage&lt;/a&gt;（个人导航页）。虽然部署了不少东西，不过目前服务器内存只占用了 55%，CPU 更是占用不超过 20%，所以还可以再部署点别的东西，如果有好用的项目欢迎各位在评论区推荐一下。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里避雷一下 &lt;a href=&quot;https://github.com/Lissy93/dashy&quot;&gt;Dashy&lt;/a&gt;，这个项目作为仪表盘来说，实在是有点太重了——部署时需要本地编译网页而非拉取预编译文件，导致只有 4H8G 以上配置的实例才能正常使用。我逝了一次，直接 CPU 和内存双双爆满，等了五分钟还是没反应，1Panel 直接卡死，只能去服务商那里重启服务器后卸载 Dashy。如果是性能不错的 NAS，倒是可以考虑用这个项目作为仪表盘。Dashy 虽然还可以无服务器部署，但这样就丧失了 Dashy 最大的优势：可视化配置界面，只能慢慢改 yaml，所以我选择放弃， &lt;a href=&quot;https://gethomepage.dev/&quot;&gt;Homepage&lt;/a&gt; 也就是不能可视化配置，又不是不能用。不过 Homepage 有个问题，那就是不支持设置密码，需要我使用反向代理提供的密码功能，但这样就会导致每次重新打开浏览器都需要重新输入密码，而且 Bitwarden 的浏览器扩展也不能自动填充，需要手动复制，有点麻烦。&lt;/p&gt;
&lt;p&gt;说到 &lt;a href=&quot;https://github.com/1Panel-dev/1Panel&quot;&gt;1Panel&lt;/a&gt;，这里还要吐槽一下 1Panel 应用商店里的 Gitea，强制要求数据库从 MySQL 和 PostgreSQL 里二选一，而这两尊大神光是部署就能吃掉我 1/4 的内存。Gitea 本身是支持使用 SQLite 的，对于我这种仅限个人小项目使用的需求是完全够用的。好在 1Panel 支持从本地导入应用，我把应用商店里的 Gitea 下到本地删掉选择数据库相关的内容后，上传回服务器，顺利安装运行。&lt;/p&gt;
&lt;p&gt;另外 Gitea 的手机端编辑体验，相比 GitHub 也差了不少。比如这段文字就是在 Gitea 的网页端用手机码的，而这节上面的几段文字则是在手机端的 Obsidian 上码完再复制过来的。Gitea 在文本框内似乎只能唤起一次输入法界面，导致我换个地方点一下就不能正常输入，需要点一下文本框外面再点回来才能再次唤起输入法。不过手机端编辑代码的舒适度应该不是 Gitea 的重点，也就将就了。但是自部署的 Gitea 就不需要在同步的时候科学上网了，再在 Gitea 上配置一下仓库镜像推送到 GitHub，对写代码的体验提升还是不错的。&lt;/p&gt;
&lt;h2&gt;关于鸿蒙的一点担忧&lt;a href=&quot;#关于鸿蒙的一点担忧&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我个人是确定在年底会入手华为的 Mate70 作为时隔三年半的新手机了（据说是 11.26 发布），现在手上用的 Mate40 虽然还能用，但总归是有些不顺心的地方。Mate70 使用鸿蒙 Next 这个新系统，不顺心的地方肯定会更多，但我毕竟没有自己的收入，换新手机只能全力倚父，而家里出钱就只能换家里选定的华为手机，所以只能是我去适应一下系统了。而且到时候我自己还会把省下来的生活费拿出一部分买台方便折腾的安卓做备用机，弥补这么多年用华为所缺失的折腾手机的快乐。&lt;/p&gt;
&lt;p&gt;鸿蒙 Next 最让我担心的还是生态问题。虽然国内的软件大都在积极适配鸿蒙 Next，期间也闹了不少笑话（比如 QQ 忘记加密接口造福一众 QQ 机器人开发者，微信里的升级按钮会跳转到 App Store 怎么全是 TX 的），但待到年底 Mate70 发布时，鸿蒙的生态真的能满足我的日常使用需求吗？我对此深感怀疑。&lt;/p&gt;
&lt;p&gt;首先就是上面提到的 VaultWarden 了，BitWarden 客户端这种需求量不大的开源软件，短时间内肯定没人移植到鸿蒙，不像 Clash 这种刚需级软件，早早地就有人移植到鸿蒙 Next 上。&lt;/p&gt;
&lt;p&gt;VaultWarden 主要是我确实真金白银花在上面了，所以排在最前，但我日常使用最频繁的还是火狐的跨端同步功能。那么问题来了：Mozilla 今年都两次裁员了，真的还有人力来开发鸿蒙端的火狐吗？华为和 Mozilla 最大的关系大概是同为 Rust 基金会的董事，但是这层关系应该管不到浏览器适配。更何况鸿蒙 Next 的卖点之一就是只有系统自带的 WebView，其他非 Chromium 内核的浏览器真的有机会上鸿蒙吗？其他浏览器的同步能力大概是比不上火狐的，而且 Windows 端的对应浏览器使用体验肯定也远不如火狐，所以这对我影响也很大。&lt;/p&gt;
&lt;p&gt;接着是几个安卓的 Xpose 模块和功能软件，主要是优化 QQ、B站、知乎使用体验（他宝贝的 B 站小可爱天天给我贴脸推送低质逆天视频来吸引争议带来的流量，所以我用模块把推荐视频和评论区全屏蔽了）的模块，和跳开屏广告的软件。没了它们，手机用起来就不那么丝滑了。&lt;/p&gt;
&lt;p&gt;最后是几个米哈游的游戏。虽然我大部分时间都是在电脑上打这几个游戏，手机就起个收菜清日常任务的作用，但少了他们，多少会不习惯一阵子。虽说米哈游早早就宣布要进行鸿蒙适配，但目前还是毫无音讯。虽然原神和星铁也有网页版的云游戏，但是使用体验只能说，比没有强。希望等到 Mate70 发布的时候，至少官方的云游戏能适配鸿蒙。&lt;/p&gt;
&lt;p&gt;担忧说完了，总归是得有点好消息才行。好消息是，虽然华为学苹果搞封闭应用商店，但是在侧载安装上留的口子比苹果大：鸿蒙目前应用自签名有效期是一年，侧载安装的开源软件可以过很长时间才重新签名一遍，比苹果只有七天好不少。&lt;/p&gt;
&lt;h2&gt;国产虫豸软件&lt;a href=&quot;#国产虫豸软件&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;上文提到我在用 Xpose 模块精简软件界面，事实上，我对某些国产虫豸软件的臃肿界面诟病已久。我用过界面最舒适的正版在线音乐软件，居然是安卓端的 Apple Music，国内的软件，像 Q 音、网易、酷狗等，一个二个都是恨不得在音乐软件里再塞个直播软件，太难绷了。在线听歌其实也有开源的 &lt;a href=&quot;https://github.com/listen1&quot;&gt;Listen 1&lt;/a&gt; 可用，但是我还是更喜欢本地听歌，所以没有用这个软件。&lt;/p&gt;
&lt;p&gt;刚才只是针对了音乐软件，事实上，大部分国产商业软件，都喜欢在一个本职功能很简单的软件上塞上视频直播、小游戏、借贷等功能，每个软件都在试图接管一切娱乐需求，这只让我极度恶心。&lt;/p&gt;
&lt;p&gt;但国产软件的界面还是有救的，那就是——关怀模式/大字模式/长辈模式。没错，给看不清屏幕的长辈用的界面，才是我这个年轻人最喜欢的界面：干净清爽，大部分花里胡哨没用的功能都不见了，但是厂商认为的核心功能绝对会保留。当然，也有像某宝这种虫豸，长辈模式依旧塞一堆垃圾功能，除了字大点没别的区别，不过大部分情况下使用长辈模式能够极大优化某些国产软件的使用体验。有的软件还会提供英文模式，可能比长辈模式还要简洁，例如中国移动 APP 的英文模式就只有话费、流量、通话时长和充值这几个功能。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用体验上英文版 &amp;gt;&amp;gt; 中文版属于是国产虫豸软件的常态了。包括像各种功能也是一到英文版、一到国外，就开始收敛了。例如 Google Play Store 上的微信，在国外网络环境下就不会自己后台保活烧电量，而是走正常的消息推送路径；但只要让它发现使用者其实处于国内环境，各种妖魔鬼怪招式又会轮番上阵。&lt;/p&gt;
&lt;h2&gt;聊天分寸&lt;a href=&quot;#聊天分寸&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这周在好几个 QQ 群水群的时候都遇到了一些聊天分寸的问题，所以想在周记里聊聊。&lt;/p&gt;
&lt;p&gt;首先需要明确的是，不同的地方有不同的聊天氛围，有各自需要注意的分寸，就像星铁的这段剧情对话一样：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在我活跃过的 QQ 群里，有以发百草枯表情包为乐的群，满屏都是绿色农药图片乱飞；有全是老司机发车验车，满屏都是磁链种子的群；有每天话题在 emo→涩涩→文爱→学术→emo 之间循环的群；有专注技术讨论，闲聊超过三句就会因 ot(off topic) 被叫停的群，每个群都有不一样的聊天分寸。&lt;/p&gt;
&lt;p&gt;如果聊天环境完全陌生或者完全熟悉，我自然是不怕掌握不到分寸的，因为前者我基本不说话，自然不会冒犯他人；后者大家都熟悉聊天氛围，哪些冒犯的话并无恶意大家心里有数，即使稍微冒犯到了对方，也有沟通的余地。我最怕应对的是熟悉环境里的陌生人：熟悉意味着我会说些带有一定冒犯性质，但熟人不会在意的话；陌生人意味着他会在意我说的冒犯的话，结果就是我会无意间冒犯到他，然后吵起来（悲）。&lt;/p&gt;
&lt;h2&gt;小学生春游综合症&lt;a href=&quot;#小学生春游综合症&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;其实就是「明明第二天有事需要早起，却辗转反侧难以入睡」的情况。虽然心情和原因大不相同，但我还是更喜欢称之为小学生春游综合症，听起来会更有乐趣一些。&lt;/p&gt;
&lt;p&gt;我经常会在第二天需要早起——通常是六七点——的时候，在床上闭着眼睛躺一两个小时就是睡不着。很明显，这和我的生物钟有关，常年累月的熬夜已经让我无法突然早睡了。我也尝试过前一天只睡四五个小时来强迫自己早睡，但结果往往是身体非常困，精神却很清醒，也不知道为什么。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>优化扫描版电子书指北</title><link>https://blog.hpcesia.com/posts/how-to-optimize-scanned-ebooks/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/how-to-optimize-scanned-ebooks/</guid><pubDate>Sun, 10 Nov 2024 06:44:07 GMT</pubDate><content:encoded>&lt;article&gt; &lt;h2&gt;什么是优化的电子书&lt;a href=&quot;#什么是优化的电子书&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果不看内容，只看阅读的方便程度，一本优秀的电子书应该是怎样的？最优秀的自然是由制作优良的  或 Typst 源码直接编译生成的 PDF 文件，有可跳转的目录，有目录书签，有可搜索文本。但这种电子书除非是开源的，否则只会在制作者的小圈子内流通，不会轻易流通。次一级，便是制作优良的扫描版电子书了。&lt;/p&gt;
&lt;p&gt;一个制作优良的扫描版电子书应该是怎样的？文字图片清晰，有目录书签与可搜索文本，这是我对制作优良的扫描版电子书的定义。我在学习一些专业课程、获取某些专业资料时，经常会遇到一些扫描版的电子书，这些电子书有一部分已经制作好了正确的目录书签，方便进行阅读，但文本不可搜索；更多的只有页码作为书签，甚至完全没有任何书签。这样的电子书显然是不方便阅读的，会极大降低学习效率，因此，我选择自力更生，对这些扫描版电子书进行优化。&lt;/p&gt;
&lt;h2&gt;怎么优化扫描版电子书&lt;a href=&quot;#怎么优化扫描版电子书&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;考虑到可能的版权问题，我选择使用我自己的课程作业 pdf，通过开源在线项目 &lt;a href=&quot;https://lookscanned.io/zh/&quot;&gt;Look Scanned&lt;/a&gt; 将其变成扫描件来演示。&lt;/p&gt;
&lt;a href=&quot;https://github.com/rwv/lookscanned.io/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;rwv/lookscanned.io&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3&gt;图像处理&lt;a href=&quot;#图像处理&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，需要将 PDF 的图像全部提取出来，这里 Windows 用户可以使用维护了 12 年、近两年开源的老牌免费 PDF 处理工具箱「PDF 补丁丁」：&lt;/p&gt;
&lt;a href=&quot;https://github.com/wmjordan/PDFPatcher/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;wmjordan/PDFPatcher&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;macOS 与 Linux 用户可以使用下面的项目作为替代品：&lt;/p&gt;
&lt;a href=&quot;https://github.com/Stirling-Tools/Stirling-PDF/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;Stirling-Tools/Stirling-PDF&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Stirling-PDF 的图像提取功能似乎不够完善，不能直接提取扫描件的图像，需要使用 PDF 转图像功能才能正常导出图像，速度慢不少。&lt;/p&gt;
&lt;p&gt;提取出全部图像后，就该对其进行处理了。Scantailor Advanced 是一个开源的扫描件处理软件，虽然其基于的 Scantailor 已经 Public Archive 了，但是依旧好用。&lt;/p&gt;
&lt;a href=&quot;https://github.com/4lex4/scantailor-advanced/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;4lex4/scantailor-advanced&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;在软件中新建项目，选择之前导出的图片，就可以开始图片处理了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;页面是全英文，没有中文翻译，但是看懂难度不大。点击右上角栏目右边的小绿三角就可以对所有页面执行当前的操作了，基本全部使用 auto 即可，效果相当不错。需要注意，右侧的选项调整默认只对当前页面生效，需要使用「Apply to」按钮来应用到全部页面。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;需要注意的是，中文文档可能需要在 output 中关闭「Savitzky-Golay smoothing」，不然文字会糊成一团。DPI 可以调高一点，不然容易看不清，全是黑白页面的话 DPI 拉高，文件大小也不会太大。&lt;/p&gt;
&lt;p&gt;一路优化完成后，只要 output 中处理了全部页面且效果满意，就可以关闭软件了，输出的图片会保存在 out 目录中。接着使用 PDFPatcher 或 Stirling-PDF 合并导出的图片为 PDF，第一步处理大功告成。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;可以看出文字效果不错，图像效果有点差。&lt;/p&gt;
&lt;h3&gt;OCR&lt;a href=&quot;#ocr&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;第二步，是对 PDF 做 OCR 处理，这里需要用到一个开源项目：&lt;/p&gt;
&lt;a href=&quot;https://github.com/hiroi-sora/Umi-OCR/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;hiroi-sora/Umi-OCR&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;这是一个支持多种开源 OCR 模型的开源项目，支持 Windows 7 及以上的 Windows x64 平台与 Linux x64 平台，可以方便地将扫描版的 PDF 转换为带有可搜索图像文本的 PDF，同时使用了嵌入 Python 解释器，可以让小白开箱即用。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对于 macOS 用户，由于该项目作者没钱买 mac （好真实的理由），所以目前只能通过 Docker 或虚拟机的方式来使用。&lt;/p&gt;
&lt;p&gt;由于该软件界面一目了然，因此不做过多说明，选择批量文档，内容提取模式选择「混合 OCR/原文本」即可。&lt;/p&gt;
&lt;h3&gt;目录书签制作&lt;a href=&quot;#目录书签制作&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;第三步，则是制作目录书签。这里同样需要用到一个开源项目：&lt;/p&gt;
&lt;a href=&quot;https://github.com/chroming/pdfdir/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;chroming/pdfdir&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;该项目可以将给定的目录作为书签嵌入到 PDF 当中。目录的获取有几种办法，首先是去一些有该电子书信息的的网站上查找是否有目录信息，有的话用网站上的最好；如果找不到现成信息，则可以使用刚才 OCR 好的 PDF，利用书里的目录来制作，但由于 OCR 识别的不稳定性，这种方式通常需要手动修正文本。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如图所示，该工具支持自定义正则表达式来匹配目录层级，也支持设置页差，可以方便快捷地将目录书签注入到 PDF 中。&lt;/p&gt;
&lt;h3&gt;效果演示&lt;a href=&quot;#效果演示&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;将源文件和制作的优化版扫描文件进行对比，可以看出效果还是不错的：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>周寄（一）| 忙里偷闲</title><link>https://blog.hpcesia.com/posts/weekly-journal-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/weekly-journal-1/</guid><description>本次周记记录了在 11 月的个人博客优化工作与生活日常。</description><pubDate>Sat, 09 Nov 2024 07:27:11 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;上回的月记还说自己没那信心周更，但这周事情不少，所以还是可以写一篇出来的。&lt;/p&gt;
&lt;p&gt;为了与之前的月记无缝衔接，本次周记记录时间为：11.01 - 11.08&lt;/p&gt;
&lt;h2&gt;小屋装修&lt;a href=&quot;#小屋装修&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;更换网站部署&lt;a href=&quot;#更换网站部署&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这周我把网站部署从 GitHub Page 切换到 Netlify 了。GitHub Page 用的好好的，为什么要换呢？因为 Netlify 速度确实快。得益于较高的审核门槛，Netlify 不像 Vercel 那样默认域名被完全屏蔽，挂上自己域名以后更是速度相当不错，比 GitHub Page 走 Cloudflare CDN 速度要快一些：
&lt;a&gt;&lt;/a&gt;
&lt;a&gt;&lt;/a&gt;
效果可以说是相当明显了。我还听了&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的建议，挂了一下&lt;a href=&quot;https://github.com/xingpingcn/enhanced-FaaS-in-China&quot;&gt;优选线路&lt;/a&gt;，速度更快了：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另一方面则是，我认为 GitHub Page 应该留给更正经的项目的页面，而不是我的个人博客。由于我之前一段时间使用的是 github.io 域名，且做过 SEO，因此我现在将 GitHub Page 指向了 blog-backup 域名，该域名又会 301 重定向到主域名，以保证搜索结果正确跳转。等到我有合适的项目主页放到 GitHub Page 的时候，大概就不需要再考虑之前博客做的 SEO 了。&lt;/p&gt;
&lt;h3&gt;友链朋友圈&lt;a href=&quot;#友链朋友圈&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我看友链朋友圈这东西眼馋不少时间了 （主要是我没服务器不能部署 RSS），所以这周也花了点时间整了一个&lt;a href=&quot;https://github.com/willow-god/Friend-Circle-Lite&quot;&gt;轻量友链朋友圈&lt;/a&gt;，目前姑且是作为我个人的丐版 RSS 来使用，等后续下定决心买云服务器了再自建一个 RSS 来用。&lt;/p&gt;
&lt;h3&gt;其他琐碎的装修&lt;a href=&quot;#其他琐碎的装修&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;剩下的就是一些琐碎的装修内容了，比如改了下右键菜单「引用到评论」的逻辑，改了改游戏页面，往页脚加了只&lt;a href=&quot;https://images.hpcesia.com/6729fd1e96b9d.webp&quot;&gt;探头的七七&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;排版&lt;a href=&quot;#排版&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;Markdown 标题&lt;a href=&quot;#markdown-标题&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;最近闲来无事，打开 Bing 的站点管理工具看了一眼，提示我页面中 &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; 标签过多。我发现这是我的 Markdown 书写风格不太好导致的。知名 Markdown 语法检查器 &lt;a href=&quot;https://github.com/DavidAnson/markdownlint&quot;&gt;markdownlint&lt;/a&gt; 的&lt;a href=&quot;https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md025---multiple-top-level-headings-in-the-same-document&quot;&gt;第 25 条规则&lt;/a&gt;指出，一个 Markdown 文件中，一级标题 &lt;code&gt;# Heading 1&lt;/code&gt; 应该用作文章标题，有且只有一个，因此正文中最高的标题层级只能是二级标题 &lt;code&gt;## Heading 2&lt;/code&gt;。但是我自己在写文章的时候，文章分段标题都是使用的一级标题，所以我需要对其进行修改。&lt;/p&gt;
&lt;p&gt;最开始我打算使用正则表达式，批量修改所有文章的标题层级。但是经过一番尝试，由于代码块中的代码注释也可能以 &lt;code&gt;#&lt;/code&gt; 开头，正则表达式要考虑的东西有点多，果断放弃了。但幸运的是，我渲染文章使用的引擎是 &lt;a href=&quot;https://github.com/hexojs/hexo-renderer-pandoc&quot;&gt;hexo-renderer-pandoc&lt;/a&gt;，而 pandoc 显然考虑到了这一问题，提供了一个选项来控制标题层级：&lt;code&gt;--shift-heading-level-by=NUMBER&lt;/code&gt;，于是我愉快的避免了为此花时间搓一个重复的轮子。&lt;/p&gt;
&lt;h4&gt;行内公式与中文混排&lt;a href=&quot;#行内公式与中文混排&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;我在翻看自己博客的时候，总有一点让我非常在意，那就是行间公式和中文的混排效果：
&lt;a&gt;&lt;/a&gt;
可以发现，行间公式与中文混排时，右边是没有间距的，看着非常难受。但是当我在本地使用 &lt;code&gt;hexo server&lt;/code&gt; 时，混排效果却是正常的两边都有间距，而按正常步骤生成静态页面后使用 &lt;code&gt;hexo server --static&lt;/code&gt;，则是没有右边间距的混排效果。&lt;/p&gt;
&lt;p&gt;那么问题来了，是什么影响了这个混排效果？思来想去，发现是因为我使用了 Gulp 来压缩 html 文件，结果把正常的间距给压缩没了。翻了下文档，选择在使用 gulp-html-minifier-terser 压缩 html 时加上 &lt;code&gt;conservativeCollapse: true&lt;/code&gt; 这个参数来解决问题。&lt;/p&gt;
&lt;h4&gt;Hello, AutoCorrect, and Goodbye&lt;a href=&quot;#hello-autocorrect-and-goodbye&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;我在&lt;a href=&quot;https://www.eallion.com/cjk-punctuation/&quot;&gt;到处乱逛&lt;/a&gt;的时候，发现了 &lt;a href=&quot;https://github.com/huacnlee/autocorrect&quot;&gt;AutoCorrect&lt;/a&gt; 这个好东西。这个工具可以自动提示文章中英文混排的一些错误，并且可以使用命令行或 VSCode 插件进行自动格式化。&lt;/p&gt;
&lt;p&gt;这听起来相当诱人——尤其是我写文章的时候一般都会手动在中英文之间加上空格，而使用这个插件以后，我就不用再花费时间来手打空格了。但是只使用了十分钟，我便卸载了 AutoCorrect 的 VSCode 插件。这是因为 AutoCorrect 的自动格式化在各式各样的 Markdown 方言面前有些发力。例如 Hexo 支持文章中以 &lt;code&gt;{% tag_name ..args %}&lt;/code&gt; 的方式来使用&lt;a href=&quot;https://hexo.io/zh-cn/docs/tag-plugins&quot;&gt;标签插件&lt;/a&gt;，但是 AutoCorrect 的自定义 &lt;code&gt;textRules&lt;/code&gt; 不支持使用正则匹配来忽略这些特殊方言语法，而我又经常需要使用这些标签插件，因此我最终还是卸载了这个插件。&lt;/p&gt;
&lt;h4&gt;Hello, 赫蹏&lt;a href=&quot;#hello-赫蹏&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sivan/heti&quot;&gt;赫蹏&lt;/a&gt;（hètí）是专为中文内容展示设计的排版样式增强样式/脚本。因为我博客不需要使用赫蹏的字体，因此我按照下面这篇文章，提取了赫蹏的标点压缩和自动中英混排间距功能放到了博客里。&lt;/p&gt;
&lt;p&gt;{% link ‘博客排版 - 挤压中文标点符号’ 大大的小蜗牛 &lt;a href=&quot;https://www.eallion.com/cjk-punctuation/&quot;&gt;https://www.eallion.com/cjk-punctuation/&lt;/a&gt; %}&lt;/p&gt;
&lt;p&gt;效果还是不错的：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;结果到了手机端一看，括号和逗号直接连在一起了，排查后发现，是因为霞鹜文楷最近支持了 OpenType 的 &lt;code&gt;halt&lt;/code&gt; 特性。不知道为什么只有移动端的字体应用了该特性，导致 PC 端检查的时候没问题，移动端一看标点重叠，于是用 CSS 的 &lt;code&gt;@supports&lt;/code&gt; 规则把这个 bug 修复了。希望火狐后续能支持 &lt;code&gt;text-spacing-trim&lt;/code&gt; 特性吧。&lt;/p&gt;
&lt;p&gt;另外，不知道为什么，自从我开始用赫蹏以后，手机端就不能正确显示霞鹜文楷的字体了，很怪。&lt;/p&gt;
&lt;h2&gt;体测&lt;a href=&quot;#体测&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;非常不幸的，我这周要进行体测。厦大的体测规则是，只要本学期选修了体育课，就要参加该体育课老师所组织的体测，而我这学期选修了羽毛球课，因此必须参加。上次的&lt;a href=&quot;/posts/monthly-journal-1/&quot;&gt;月记 true&lt;/a&gt;里说过，我的膝盖受了擦伤。虽然不算严重，恢复得也还不错，但在周一的体测的时候，擦伤是没有完全恢复的。幸运的是，这周的体测不用考一千米——下周才考，所以我至少不会因为大量流汗感受伤口撒盐的痛苦了。&lt;/p&gt;
&lt;h2&gt;期中&lt;a href=&quot;#期中&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这周正好还是期中周，虽然大四基本没啥课了，但是为了凑够学分，我还是选了两门据说比较水的课：《经济学基础》和《多复变函数论》。&lt;/p&gt;
&lt;p&gt;《多复变函数论》课程本身并不水，老师讲的很好，每节课都是黑板哗哗写，但是——我听不懂（悲）。说这门课「水」，其实是因为这门课是选修课，一般不会卡人，而且老师也知道这门课难度比较大，所以考的基本都是 PPT 上的东西，而且期中并没有考试，而是布置了整个课程唯一一次作业，内容也都是 PPT 上的东西，只要看懂 PPT 上的定理证明，自己写一遍就行了。唯一比较花时间的是老师的 PPT 没用 XeTaX 生成，导致中文复制出来全是乱码，OCR 又不好处理公式，只能慢慢手打了。&lt;/p&gt;
&lt;p&gt;《经济学基础》倒是真水课，课程基本全念 PPT，作业也简单——导致我整个上半学期的课要么摸鱼要么翘了。因为保研已经结束了，绩点没啥用，所以这门课只需要不挂科，拿到学分就算成功。因此，直到考试前一天，我才开始突击复习 （预习），在 B 站上看一些经济学基础速成的视频，做一下往年的试卷，确保不会挂科。事实证明速成确实不靠谱，考试的时候一堆东西都是完全不清楚，不过靠着一点常识和推理，多少还是把大部分的题都做了，应该能及格……吧。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>月寄 | 无事发生…吗？</title><link>https://blog.hpcesia.com/posts/monthly-journal-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/monthly-journal-1/</guid><description>本次月记记录了生日、寻找毕业论文导师的经历以及笔记本风扇损坏等问题。通过自学和开源项目改进了博客代码高亮功能，并探讨了构建多端同步编写博文的工作流方案。</description><pubDate>Fri, 01 Nov 2024 08:31:20 GMT</pubDate><content:encoded>&lt;article&gt; &lt;p&gt;因为看到一些好看的周记，所以也打算自己写点类似的东西。但是我实在是没有周更的信心（无论是从更新文字量还是从每周可写的经历量来说都是如此），因此决定先写个月记试试水。&lt;/p&gt;
&lt;p&gt;本次月记记录时长为 5 周：9.27 - 10.31。&lt;/p&gt;
&lt;h2&gt;生日&lt;a href=&quot;#生日&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;是的，其实记录时长为五周就是为醋包的饺子——这样才能包含我的 21 岁生日。&lt;/p&gt;
&lt;p&gt;今年的生日似乎并没有什么特别的，仍然是自己一个人过，已经习惯如此了。回望整个大学生活，我似乎都没有多少社交，平日总是待在宿舍打游戏、写代码、赶作业，偶尔出去骑车也是独自一人默默骑行；出去旅游要么是为了参加漫展，要么是被父母拉着一起；除了舍友外，只有寥寥几个点头之交的同学，甚至三年来没有一个交流超过五句话的同龄异性。但我却没觉得缺了什么，或许是性格使然？只是每次父母半开玩笑地问我有没有耍朋友时只能尬笑着糊弄过去。&lt;/p&gt;
&lt;p&gt;其实本来是打算看场电影的，因为那几天正好要去万达影城，线下取原神和万达联动里买的一些周边。但可惜的是，翻了一圈当天的电影，没一个感兴趣的，唯一感兴趣的流浪地球 2 的 3D 版，也只有离得很远的几个影城还在上映，所以只能拿了周边就走人。但好歹是生日，总得犒劳一下自己吧。于是我在去万达影城的路上顺便在 B 站刷了刷厦门的各种自助餐厅的视频，选定了一家顺路的牛肉自助，准备拿完周边就去吃顿饱的。
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;说实话，自助味道不错——至少对得起价格。我吃得挺撑，炫了差不多二十盘现切牛肉，不知道算不算给老板上课？不过厦门能人这么多，我这点食量大抵是算不上号的吧（笑）。&lt;/p&gt;
&lt;h2&gt;毕业论文导师&lt;a href=&quot;#毕业论文导师&quot;&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;显然，如果事情进展顺利，就不会有接下来这几段了。等到十一假期刚开始时，我收到了教授的回复：名额满了。看来你虾数院唯一和方向和计算机密切相关的教授真的很受欢迎（悲）。整理了下心态，我就找了个研究方向起码是计算数学的教授又发了份邮件，等待教授的回复。
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这一等，就是一整个国庆假期。每天我都打开邮箱，期待有教授的回复，但是等到的都只有毫无变化的收件箱。待到十一假期结束，我也算是死了心了——大抵这位教授确实是不看邮箱吧。毕业论文导师的申报到16号就截止了，还有一周时间，我必须抓紧再找一个教授问问了。&lt;/p&gt;
&lt;p&gt;这次我选择想办法找个冷门的老师。我对照着我们学院的官网上的师资名单和可选择的导师列表，选择了一个看起来应该不会有多少人专门去选的导师，再次发了一封模板式的邮件过去。第二天，我就得到了老师的回复——Can Can Need 成绩单。&lt;/p&gt;
&lt;p&gt;好在我虽然大部分偏理论的课程绩点都是 1 和 2 开头，但总归是有那么一两个满绩的偏应用的专业课撑场面的，至少没让我再次被拒。很快，我便与预备导师约好了时间面谈。&lt;/p&gt;
&lt;p&gt;到了面谈的时候，略过一小段客套话，我便又听到了了一个噩耗：这位预备导师主要做的是理论分析——而从我的成绩单上就能看出，我对理论分析是一窍不通。好在我的预备导师也研究过我的成绩单，知道我“代码的课分都贼高，理论的课分就不怎么样”，于是为我找了个只要花时间啃代码就能做的题目（具体内容就不透露了）。&lt;/p&gt;
&lt;p&gt;就此，可喜可贺，我至少在申报截止前成功找到了本科毕业论文导师，并且导师看起来人还不错，实在是可喜可贺呐。&lt;/p&gt;
&lt;h2&gt;国庆&lt;a href=&quot;#国庆&quot;&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;值得一提的是，由于国庆假期玩得太疯，导致我完全忘了国庆假期什么时候结束。于是在国庆假期的最后一天，星期一的早晨，我怀揣着对舍友全体翘课的震惊，背着羽毛球拍到了室内羽毛球馆门口——然后看到了紧闭的大门。这时候我才反应过来：woc，该不会还在放假吧！（乐）&lt;/p&gt;
&lt;p&gt;在常冒泡的 QQ 群分享了这一发现，并收获了十几个「🐷？」的回复后，我终于确认现在确实还在放假的事实——我白早起白通勤了（悲）。&lt;/p&gt;
&lt;h2&gt;受伤&lt;a href=&quot;#受伤&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;作为偶尔出去环岛骑行的单车佬，受点擦伤属于是家常便饭了。但这次不一样——我是在宿舍楼下推车的时候摔的。当时正是下课回宿舍，我把自行车推进宿舍大门，想着单脚踩在踏板上滑行大概会更快 （也更帅），于是就把一只脚踩在自行车上开始滑行——然后就直直地摔了下去。&lt;/p&gt;
&lt;p&gt;于是我就喜提了膝盖擦伤，图就不在这篇文章里发了，目前草稿箱里放了一篇擦伤恢复记录，后续大概会发出来，用于记录我自己的表浅擦伤处理经验 （摔车摔多了导致的）。&lt;/p&gt;
&lt;h2&gt;考研&lt;a href=&quot;#考研&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;说实话，我自己对考研准备并不充分。一直到开始报名的时候，我都没想好到底要考什么学校，考什么科目。但是时间上已经来不及了，于是我选择了少数计算机还在考自命题而不是 408 的学校——虽然他复试还是会考 408，但总归是能多点时间复习了。&lt;/p&gt;
&lt;h2&gt;风扇&lt;a href=&quot;#风扇&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近，我的笔记本风扇突然坏了——大概是我平时喜欢把笔记本竖起来当副屏使导致的。在这之前我的桌面是这样的 （口瓜，是二次元，大家快退啊）：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;总之，风扇就是这么突然的坏了。其实影响本身不算特别大：时不时会发出很大声的嗡嗡异响，没异响的时候长时间打游戏容易直接过热关机。不长时间打游戏的话，还可以凑合着用——直到有一天我带着笔记本去了教室，然后风扇正好在上课的时候响起来了（万众瞩目.webp）。于是我赶紧关机，并开始在某宝上搜索我的笔记本的替换风扇。&lt;/p&gt;
&lt;p&gt;不幸的是，我的笔记本是一个小众的型号，所以我花了半节课的时间也没搜到我的型号对应的风扇。但办法总比困难多：按某宝商品介绍的说法，一些风扇只是颜色不一样，但是电压、形状和孔位是一致的，也就是说只要找到和我的笔记本风扇除了颜色外一模一样的其他型号的风扇，也可以拿来作为替换。于是待到下课回宿舍，我便拿出螺丝刀开始拆机，查看风扇的外观，顺便清了一下陈年老灰。又花了半个多小时，总算是找到了合适的风扇，进行一个单的下。&lt;/p&gt;
&lt;h2&gt;Hello, Shiki&lt;a href=&quot;#hello-shiki&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一节的标题是仿照的&lt;a href=&quot;https://chlo.is/&quot;&gt;小氯&lt;/a&gt;的一个文章分类。（事实上，小氯的博客上也有&lt;a href=&quot;https://www.yoghurtlee.com/hello-shiki/&quot;&gt;相同标题的文章&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;我最近一年一直在使用 &lt;a href=&quot;https://typst.app/&quot;&gt;Typst&lt;/a&gt; 来完成各种专业课程的作业，现在建了博客，自然也需要在分享一些 Typst 代码片段。但这时候，问题出现了：Hexo 自带的 highlight.js 和 prismjs 均不支持比较新的 Typst 的语法高亮。&lt;/p&gt;
&lt;p&gt;最开始，我是参考 &lt;a href=&quot;https://foolishfox.cn/posts/202402-typst-block.html&quot;&gt;Foolish Fox 的文章&lt;/a&gt;，利用纸夜姐姐的 &lt;a href=&quot;https://github.com/Myriad-Dreamin/typst.ts&quot;&gt;typst.ts&lt;/a&gt; 解析 Typst 代码并利用 Hexo 的标签插件进行渲染，这也是这位大佬的博客出现在我的友链里的原因。但是这样总归不是一个一劳永逸的方法——未来还可能有新语言，但每个新语言都这样适配也太累了。于是我将目光转向了 &lt;a href=&quot;https://shiki.tmrs.site/&quot;&gt;Shiki&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;第一步自然是先去找有没有现成的轮子可用。通过 GitHub 搜索 「hexo shiki」，我成功找到了适用于 &lt;a href=&quot;https://github.com/fluid-dev/hexo-theme-fluid&quot;&gt;Fluid 主题&lt;/a&gt;的 &lt;a href=&quot;https://github.com/nova1751/hexo-shiki-plugin&quot;&gt;hexo-shiki-plugin&lt;/a&gt;、做了 djot 适配的 &lt;a href=&quot;https://github.com/Pcrab/hexo-highlight-shiki&quot;&gt;hexo-highlight-shiki&lt;/a&gt; 以及使用 TypeScript 编写的 &lt;a href=&quot;https://github.com/ArcticLampyrid/hexo-shiki-highlighter&quot;&gt;hexo-shiki-highlighter&lt;/a&gt;。但很可惜，这些轮子都不适合在我的主题上直接使用，于是我选择——开缝！&lt;/p&gt;
&lt;p&gt;由于我事实上并没有任何 TypeScript 和 JavaScript 的开发经验，所以我选择 IDE 的提示更完善的 TypeScript 进行开发。基于 &lt;a href=&quot;https://github.com/ArcticLampyrid/hexo-shiki-highlighter&quot;&gt;hexo-shiki-highlighter&lt;/a&gt;，我靠着 AI 摸索着写了个还算能用的插件：&lt;/p&gt;
&lt;a href=&quot;https://github.com/HPCesia/hexo-highlighter-shiki/&quot;&gt; &lt;div&gt; &lt;div&gt; &lt;span&gt;HPCesia/hexo-highlighter-shiki&lt;/span&gt;       &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;       &lt;span&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;里面所有功能基本都是我自己用得上的功能，所以一些我没用上的功能可能会有 BUG，如果看到这段话的朋友愿意使用我的插件，并发现了一些 BUG，欢迎给我提 issue。&lt;/p&gt;
&lt;h2&gt;工作流&lt;a href=&quot;#工作流&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;上文提到，我电脑的风扇坏了，而我在拆机检查完风扇后选择了偷懒：大部分螺丝都没有装回去，只装了必要的几颗螺丝，方便过几天拆机。这也意味着我不能长时间使用我的笔记本了——不然因为少装螺丝导致电脑坏了就麻烦了。但博客总得写啊！于是我开始思考，如何构建一个多端同步编写博文的工作流。&lt;/p&gt;
&lt;p&gt;我的博客源码同时上传到了 GitHub 的私有仓库上，所以最简单的工作流大概是使用 GitHub Action 了。但这就牵扯到了一个问题：正如上文所说，我同时还在开发 Hexo 插件，因此我的博客用到了一些 npm 本地包，这些包是不能直接在 GitHub Action 上使用的。&lt;/p&gt;
&lt;p&gt;当然了，实际上我也并不需要随时随地改博客的源码。对我来说，只需要多端同步我的博文就能满足需求了。但问题又出现了：我使用的是华为手机，而且年底估计会换搭载鸿蒙 Next 的 mate70，因此基于软件的同步方案就显得不靠谱了。&lt;/p&gt;
&lt;p&gt;目前想到的解决方案，是使用带 Markdown 编辑功能，且可以随意设置同步位置的同步云盘来管理博文，但目前还没找到合适的云盘（悲）。现阶段我暂时使用安卓端 Obsidian 码字，然后手动把写了一半的文章发给电脑，来达成随时编写文章的目的。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>VSCode + MSYS2 + Clang + Clangd + Xmake 配置优雅的 Windows C++ 开发环境</title><link>https://blog.hpcesia.com/posts/cpp-dev-env-in-vscode-on-windows/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/cpp-dev-env-in-vscode-on-windows/</guid><description>使用 VSCode + MSYS2 + Clang + Clangd + Xmake 搭建优雅的 Windows C++ 开发环境。</description><pubDate>Sun, 13 Oct 2024 07:21:27 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;准备工作&lt;a href=&quot;#准备工作&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于我们最终是要使用 VSCode 而非 Visual Studio 进行 C++ 开发，因此本节 Clang 的安装将使用 MSYS2 + mingw-w64 进行。&lt;/p&gt;
&lt;h3&gt;安装 MSYS2&lt;a href=&quot;#安装-msys2&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 &lt;a href=&quot;https://github.com/msys2/msys2-installer/releases&quot;&gt;GitHub Release&lt;/a&gt; 上下载最新版的 MSYS2 安装包。如果访问 GitHub 有困难，也可以使用&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/&quot;&gt;清华镜像源&lt;/a&gt;进行下载。&lt;/p&gt;
&lt;p&gt;下载后打开安装程序，选择一个合适的路径，然后一路点 next 即可安装完成。&lt;/p&gt;
&lt;p&gt;打开 Windows Terminal，在设置中选择打开 JSON 文件，然后将下列配置添加到打开的 JSON 文件中，注意更换 MSYS2 路径为自己的安装路径：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;profiles&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;guid&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;&quot;{17da3cac-b318-431e-8a3e-7fcdefe6d114}&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&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;&quot;Clang64 / MSYS2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;commandline&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;&quot;C:/msys64/msys2_shell.cmd -defterm -here -no-start -clang64&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;startingDirectory&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;&quot;C:/msys64/home/%USERNAME%&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;icon&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;&quot;C:/msys64/Clang64.ico&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;guid&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;&quot;{71160544-14d8-4194-af25-d05feeac7233}&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&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;&quot;MSYS / MSYS2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;commandline&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;&quot;C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;startingDirectory&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;&quot;C:/msys64/home/%USERNAME%&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;icon&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;&quot;C:/msys64/msys2.ico&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着在 Windows Terminal 中打开刚刚设置的 Clang64 / MSYS2 界面，在终端中输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sed&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;&quot;s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/pacman.d/mirrorlist&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;将 MSYS2 的包仓库更换为清华镜像源，然后输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pacman&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Syu&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;更新系统。&lt;/p&gt;
&lt;h3&gt;安装 Clang 工具链&lt;a href=&quot;#安装-clang-工具链&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;clang 应当安装在 clang64 环境下，否则会导致 clangd 识别头文件出错&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 Clang64 / MSYS2 命令行中输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pacman&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-S&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mingw-w64-clang-x86_64-toolchain&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可安装 clang 工具链。&lt;/p&gt;
&lt;h3&gt;安装 Xmake&lt;a href=&quot;#安装-xmake&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Windows 安装包&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;a href=&quot;https://github.com/xmake-io/xmake/releases&quot;&gt;Release&lt;/a&gt; 上下载最新版的 xmake-master.win64.exe，安装即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;winget&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在终端输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;winget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xmake&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可安装 Xmake。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;msys2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 Clang64 / MSYS2 命令行中输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pacman&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Sy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mingw-w64-x86_64-xmake&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可安装 Xmake。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;安装 VSCode 插件&lt;a href=&quot;#安装-vscode-插件&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 VSCode 的扩展选项卡搜索 Clangd、CodeLLDB、Xmake 并安装。&lt;/p&gt;
&lt;p&gt;CodeLLDB 的安装过程中会下载一个文件，国内网络大概率下载失败，可以点击弹出消息的手动下载按钮，然后再从 VSIX 安装下载的包。&lt;/p&gt;
&lt;h2&gt;配置&lt;a href=&quot;#配置&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;VSCode 配置&lt;a href=&quot;#vscode-配置&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 VSCode 的 setting.json 中添加如下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;settings.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Xmake&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;xmake.debugConfigType&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;codelldb&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 使用 codelldb 插件而非 cpptools 进行调试&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;xmake.runMode&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;buildRun&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 运行前自动 build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;xmake.buildLevel&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;verbose&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 设置编译时输出信息级别,默认是warnings级别,仅输出编译警告信息以及正常信息,verbose级别输出完整的编译命令行参数,debug级别对应 xmake -vD 的诊断信息，会打印出错的栈信息&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;xmake.customDebugConfig&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;console&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;&quot;integratedTerminal&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// XMake调试时使用集成终端而非 debug console,也可以使用 externalTerminal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Clangd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;clangd.path&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;C:/msys64/clang64/bin/clangd.exe&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// Clangd 文件位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;clangd.arguments&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--all-scopes-completion&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 全局补全(补全建议会给出在当前作用域不可见的索引,插入后自动补充作用域标识符),例如在main()中直接写cout,即使没有`#include &amp;lt;iostream&amp;gt;`,也会给出`std::cout`的建议,配合&quot;--header-insertion=iwyu&quot;,还可自动插入缺失的头文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--background-index&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 后台分析并保存索引文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--clang-tidy&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 启用 Clang-Tidy 以提供「静态检查」&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--clang-tidy-checks=performance-*, bugprone-*, misc-*, google-*, modernize-*, readability-*, portability-*&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--compile-commands-dir=${workspaceFolder}/.vscode&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 编译数据库(compile_commands.json 文件)的目录位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--completion-parse=auto&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 当 clangd 准备就绪时，用它来分析建议&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--completion-style=detailed&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 建议风格：打包(重载函数只会给出一个建议);还可以设置为 detailed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--enable-config&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 启用配置文件(YAML格式)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--fallback-style=LLVM&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 默认格式化风格: 在没找到 .clang-format 文件时采用,可用的有 LLVM, Google, Chromium, Mozilla, Webkit, Microsoft, GNU&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--function-arg-placeholders=true&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 补全函数时，将会给参数提供占位符，键入后按 Tab 可以切换到下一占位符，乃至函数末&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--header-insertion-decorators&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 输入建议中，已包含头文件的项与还未包含头文件的项会以圆点加以区分&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--header-insertion=never&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 插入建议时不自动引入头文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--log=verbose&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 让 Clangd 生成更详细的日志&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--pch-storage=memory&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// pch 优化的位置(Memory 或 Disk,前者会增加内存开销，但会提升性能)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--pretty&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 输出的 JSON 文件更美观&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--ranking-model=decision_forest&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 建议的排序方案：hueristics (启发式), decision_forest (决策树)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;-j=12&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 同时开启的任务数量&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;--query-driver=C:/msys64/clang64/bin/clang*&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// clang 编译器的路径（设置错误会导致 clangd 无法识别标准库）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;clangd.checkUpdates&quot;&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;// 自动检测 clangd 更新&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;clangd.onConfigChanged&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;restart&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 借助网上的信息排序建议&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;clangd.detectExtensionConflicts&quot;&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;// 当其它拓展与 clangd 冲突时警告并建议禁用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;editor.suggest.snippetsPreventQuickSuggestions&quot;&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;// clangd的snippets有很多的跳转点，不用这个就必须手动触发Intellisense了&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// LLDB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.commandCompletions&quot;&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;// LLDB 指令自动补全&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.dereferencePointers&quot;&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;// LLDB 指针显示解引用内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.evaluateForHovers&quot;&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;// LLDB 鼠标悬停在变量上时预览变量值&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.launch.expressions&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;native&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// LLDB 监视表达式的默认类型&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.showDisassembly&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;never&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// LLDB 不显示汇编代码&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;lldb.verboseLogging&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接下来，就可以创建一个空文件夹，作为自己的一个 C++ 测试项目了。&lt;/p&gt;
&lt;h3&gt;项目配置文件&lt;a href=&quot;#项目配置文件&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在项目根目录下新建 &lt;code&gt;.clangd&lt;/code&gt;、&lt;code&gt;.clang-tidy&lt;/code&gt; 和 &lt;code&gt;.clang-format&lt;/code&gt; 三个文件，分别填入如下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.clangd&lt;/code&gt; 文件：
文件中 &lt;code&gt;readability-identifier-naming&lt;/code&gt; 部分请参阅&lt;a href=&quot;https://clang.llvm.org/extra/clang-tidy/checks/readability/identifier-naming.html&quot;&gt;官方文档&lt;/a&gt;进行个性化修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.clangd&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Diagnostics&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ClangTidy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;[&lt;/span&gt;&lt;span&gt;readability-identifier*&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CheckOptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 变量命名规则&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 详细请参考官方文档 https://clang.llvm.org/extra/clang-tidy/checks/readability/identifier-naming.html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.VariableCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lower_case&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.GlobalVariableCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lower_case&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.GlobalVariablePrefix&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;g_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.MemberPrefix&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;m_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.MemberCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lower_case&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ClassMemberPrefix&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;m_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ClassMemberCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lower_case&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.EnumCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UPPER_CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.EnumConstantCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UPPER_CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.MacroDefinitionCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UPPER_CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ClassCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CamelCase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.StructCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Camelcase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.FunctionCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;camelCase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ClassMethodCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;camelCase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.MethodCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;camelCase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ConstantCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UPPER_CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;readability-identifier-naming.ConstantParameterCase&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;camel_Snake_Back&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CompileFlags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-pedantic&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wall&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wextra&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wcast-align&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wdouble-promotion&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wformat=2&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wimplicit-fallthrough&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wmisleading-indentation&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wnon-virtual-dtor&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wnull-dereference&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wold-style-cast&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Woverloaded-virtual&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wpedantic&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wshadow&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-Wunused&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-pthread&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-fuse-ld=lld&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-fsanitize=address&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-fsanitize=undefined&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-stdlib=libc++&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;-std=c++20&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 根据实际需要填写&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.clang-tidy&lt;/code&gt; 文件：&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.clangd-tidy&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Checks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bugprone-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;google-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;misc-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;modernize-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;performance-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;readability-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;portability-*,&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;HeaderFilterRegex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Source/cm[^/]*\.(h|hxx|cxx)$&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CheckOptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &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;modernize-use-default-member-init.UseAssignment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &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;modernize-use-equals-default.IgnoreMacros&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;0&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &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;modernize-use-auto.MinTypeNameLength&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;80&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.clang-format&lt;/code&gt; 文件：
可以取消 &lt;code&gt;BasedOnStyle&lt;/code&gt; 项的注释，然后只保留少数自定义修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.clang-format&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Language&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Cpp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 基础风格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## BasedOnStyle:  LLVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 访问说明符(public、private等)的偏移&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AccessModifierOffset&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignAfterOpenBracket&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Align&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对齐数组列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignArrayOfStructures&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对齐连续宏定义&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignConsecutiveMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 连续赋值时，对齐所有等号&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignConsecutiveAssignments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对齐连续位字段&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignConsecutiveBitFields&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 连续声明时，对齐所有声明的变量名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignConsecutiveDeclarations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 左对齐逃脱换行(使用反斜杠换行)的反斜杠&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignEscapedNewlines&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Left&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 水平对齐二元和三元表达式的操作数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignOperands&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Align&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对齐连续的尾随的注释&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlignTrailingComments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许函数声明的所有参数在放在下一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowAllParametersOfDeclarationOnNextLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的枚举放在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortEnumsOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的块放在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortBlocksOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的case标签放在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortCaseLabelsOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的函数放在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortFunctionsOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;All&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的匿名函数放在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortLambdasOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;All&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的if语句保持在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortIfStatementsOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许短的循环保持在同一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AllowShortLoopsOnASingleLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 总是在返回类型后换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlwaysBreakAfterReturnType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 总是在多行string字面量前换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlwaysBreakBeforeMultilineStrings&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 总是在template声明后换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AlwaysBreakTemplateDeclarations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MultiLine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AttributeMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__capability&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## false表示函数实参要么都在同一行，要么都各自一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BinPackArguments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## false表示所有形参要么都在同一行，要么都各自一行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BinPackParameters&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 大括号换行，只有当BreakBeforeBraces设置为Custom时才有效&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BraceWrapping&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterCaseLabel&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterClass&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterControlStatement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterEnum&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterFunction&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterNamespace&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterObjCDeclaration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterStruct&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterUnion&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AfterExternBlock&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;BeforeCatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;BeforeElse&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;BeforeLambdaBody&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;BeforeWhile&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;IndentBraces&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;SplitEmptyFunction&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;SplitEmptyRecord&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;SplitEmptyNamespace&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在二元运算符前换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakBeforeBinaryOperators&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在concept前换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakBeforeConceptDeclarations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在大括号前换行: Attach(始终将大括号附加到周围的上下文)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakBeforeBraces&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Attach&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 继承列表样式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakInheritanceList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AfterComma&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在三元运算符前换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakBeforeTernaryOperators&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 构造函数初始值设定项换行样式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakConstructorInitializers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeforeComma&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在java字段的注释后换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BreakAfterJavaFieldAnnotations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 每行字符的限制，0表示没有限制&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ColumnLimit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;96&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 描述具有特殊意义的注释的正则表达式，它不应该被分割为多行或以其它方式改变&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CommentPragmas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;^ IWYU pragma:&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在新行上声明每个命名空间&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CompactNamespaces&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 构造函数的初始化列表的缩进宽度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ConstructorInitializerIndentWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 延续的行的缩进宽度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ContinuationIndentWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 去除C++11的列表初始化的大括号{后和}前的空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Cpp11BracedListStyle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 继承最常用的换行方式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DeriveLineEnding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 继承最常用的指针和引用的对齐方式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DerivePointerAlignment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 关闭格式化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DisableFormat&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 删除访问修饰符后的所有空行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EmptyLineAfterAccessModifier&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 仅当访问修饰符开始一个新的逻辑块时才添加空行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EmptyLineBeforeAccessModifier&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LogicalBlock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ExperimentalAutoDetectBinPacking&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 自动补充namespace注释&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FixNamespaceComments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 需要被解读为foreach循环而不是函数调用的宏&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ForEachMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Q_FOREACH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BOOST_FOREACH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IfMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;KJ_IF_MAYBE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 多个#include块合并在一起并排序为一个&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IncludeBlocks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 可以定义负数优先级从而保证某些#include永远在最前面&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IncludeCategories&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Regex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;^&quot;(llvm|llvm-c|clang|clang-c)/&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Priority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;SortPriority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CaseSensitive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Regex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;^(&amp;lt;|&quot;(gtest|gmock|isl|json)/)&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Priority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;SortPriority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CaseSensitive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Regex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;.*&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Priority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;SortPriority&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CaseSensitive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IncludeIsMainRegex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(Test)?$&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IncludeIsMainSourceRegex&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进访问修饰符&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentAccessModifiers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进case标签&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentCaseLabels&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## case 标签后面的块使用与 case 标签相同的缩进级别&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentCaseBlocks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进goto标签。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentGotoLabels&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进预处理器指令&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentPPDirectives&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 向后兼容缩进外部块&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentExternBlock&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AfterExternBlock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进模板中的requires子句&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentRequires&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进宽度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 函数返回类型换行时，缩进函数声明或函数定义的函数名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndentWrappedFunctionNames&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 插入尾随逗号&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;InsertTrailingCommas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 保留JavaScript字符串引号&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;JavaScriptQuotes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Leave&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 包装 JavaScript 导入/导出语句&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;JavaScriptWrapImports&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 保留在块开始处的空行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;KeepEmptyLinesAtTheStartOfBlocks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 相对于 lambda 签名对齐 lambda 主体&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;LambdaBodyIndentation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Signature&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 开始一个块的宏的正则表达式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MacroBlockBegin&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 结束一个块的宏的正则表达式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MacroBlockEnd&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 连续空行的最大数量&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MaxEmptyLinesToKeep&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 命名空间的缩进&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;NamespaceIndentation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Inner&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ObjCBinPackProtocolList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Auto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 使用ObjC块时缩进宽度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ObjCBlockIndentWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ObjCBreakBeforeNestedBlockParam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在ObjC的@property后添加一个空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ObjCSpaceAfterProperty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在ObjC的protocol列表前添加一个空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ObjCSpaceBeforeProtocolList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakAssignment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakBeforeFirstCallParameter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;19&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakComment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakFirstLessLess&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;120&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakString&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyBreakTemplateDeclaration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyExcessCharacter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyReturnTypeOnItsOwnLine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PenaltyIndentedWhitespace&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 指针的对齐: Left, Right, Middle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PointerAlignment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Left&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 缩进预处理器语句的列数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PPIndentWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 引用的对齐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ReferenceAlignment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Pointer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许重新排版注释&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ReflowComments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 短命名空间跨越的最大展开行数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ShortNamespaceLines&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 允许排序#include&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SortIncludes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## java静态导入放在非静态导入之前&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SortJavaStaticImport&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Before&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对using声明排序&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SortUsingDeclarations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在C风格类型转换后添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceAfterCStyleCast&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在!后添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceAfterLogicalNot&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在Template关键字后添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceAfterTemplateKeyword&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在赋值运算符之前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeAssignmentOperators&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 不在case冒号之前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeCaseColon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 不在C++11大括号列表之前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeCpp11BracedList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在构造函数初始化器冒号之前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeCtorInitializerColon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在继承冒号前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeInheritanceColon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 开圆括号之前添加一个空格: Never, ControlStatements, Always&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeParens&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ControlStatements&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 不要确保指针限定符周围有空格，而是使用 PointerAlignment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceAroundPointerQualifiers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在基于范围的for循环冒号之前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeRangeBasedForLoopColon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## {}中间不添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceInEmptyBlock&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在空的圆括号中添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceInEmptyParentheses&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在尾随的评论前添加的空格数(只适用于//)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesBeforeTrailingComments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在尖括号的&amp;lt;后和&amp;gt;前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInAngles&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 不在if/for/switch/while条件周围插入空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInConditionalStatement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInContainerLiterals&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在C风格类型转换的括号中添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInCStyleCastParentheses&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 行注释开头允许有多少个空格。要禁用最大值，请将其设置为-1，除此之外，最大值优先于最小值&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInLineCommentPrefix&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Minimum&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Maximum&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在圆括号的(后和)前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInParentheses&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在方括号的[后和]前添加空格，lamda表达式和未指明大小的数组的声明不受影响&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpacesInSquareBrackets&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 不在[前添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SpaceBeforeSquareBrackets&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 位域:每边都添加空格&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BitFieldColonSpacing&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Both&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 标准&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Standard&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Auto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 在语句前面被忽略的宏定义，就好像它们是一个属性一样&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;StatementAttributeLikeMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Q_EMIT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 应该被解释为完整语句的宏定义&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;StatementMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Q_UNUSED&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;QT_REQUIRE_VERSION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## tab宽度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TabWidth&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 使用\n换行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;UseCRLF&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 使用tab字符：ForIndentation——仅将制表符用于缩进&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;UseTab&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Never&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 对空格敏感的宏定义&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WhitespaceSensitiveMacros&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;STRINGIZE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PP_STRINGIZE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BOOST_PP_STRINGIZE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NS_SWIFT_NAME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;277&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CF_SWIFT_NAME&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Xmake 配置&lt;a href=&quot;#xmake-配置&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先新建一个 &lt;code&gt;hello_world.cpp&lt;/code&gt; 文件，然后在其中输入一个基础的 Hello world 程序：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;hello_world.cpp&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#include&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;cout &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&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;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;endl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后在项目根目录下新建 &lt;code&gt;xmake.lua&lt;/code&gt; 文件，这会激活 Xmake 扩展。在文件中输入：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-- xmake.lua&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;add_defines&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ROOT&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;add_rules&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mode.debug&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;mode.release&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_toolchains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;clang&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_languages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cxx17&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;c11&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_optimize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;fastest&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_warnings&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-- 添加工程&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;target&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;set_kind&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;binary&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;add_files&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;hello_world.cpp&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;target_end&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;此时 VSCode 的底栏会出现 Xmake 的一系列选项，直接点击下方的 ▶️ 按钮，Xmake 就会调用 Clang 编译刚刚新建的 hello world 程序了。&lt;/p&gt;
&lt;p&gt;至此，一个优雅好用的 C++ 开发环境就算搭建完成了。更多相关配置请参考 &lt;a href=&quot;https://xmake.io/#/zh-cn/about/introduction&quot;&gt;Xmake 文档&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;参考资料&lt;a href=&quot;#参考资料&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本文的编写参考了下列文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/398790625&quot;&gt;[万字长文]Visual Studio Code 配置 C/C++ 开发环境的最佳实践(VSCode + Clangd + XMake) - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/566365173&quot;&gt;几乎无痛的VSCode+clangd+lldb+cmake配置C/C++开发环境指南 - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quadnucyard.github.io/posts/cpp/clang-std-modules.html&quot;&gt;使用 VSCode + XMake + LLVM 开发现代 C++！（llvm-mingw + clangd + modules）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lazy-phosphorus.com/post/msys2-cmake-guide/&quot;&gt;MSYS2 与 CMake 编程综合指引 | 惰性磷的博客&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>Twikoo 评论区利用 Python 脚本自动化导入米游社表情包</title><link>https://blog.hpcesia.com/posts/how-to-use-hoyolab-emotions-in-twikoo/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/how-to-use-hoyolab-emotions-in-twikoo/</guid><description>利用 Pythopn 脚本实现自动化获取米游社表情包并添加到本地 Twikoo 表情包 json 中。</description><pubDate>Mon, 30 Sep 2024 07:54:16 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;Twikoo 评论系统表情包设置&lt;a href=&quot;#twikoo-评论系统表情包设置&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;打开 Twikoo 设置面板，打开「配置管理」 - 「插件」 - 「EMOTION_CDN」，输入你自己的 emotion.json 路径即可。&lt;/p&gt;
&lt;h2&gt;Python 脚本&lt;a href=&quot;#python-脚本&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;找个地方创建一个 &lt;code&gt;.py&lt;/code&gt; 文件，填入以下内容（为了开箱即用，使用的是 &lt;code&gt;urllib&lt;/code&gt; 库，可自行换成 &lt;code&gt;request&lt;/code&gt; 库或 &lt;code&gt;httpx&lt;/code&gt; 库）：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;path/to/your/file.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; urllib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pathlib &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;miyousheEmoticonsJsonToTwikooJson&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;api_url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;output_path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&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;list&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;use_index_img&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;clean_output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;将米游社表情包的JSON数据转换为Twikoo格式的JSON数据。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;该函数从指定的API URL获取米游社表情包数据，并将其转换为Twikoo格式的JSON文件。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;可以选择性地指定要处理的表情包分组，是否使用索引图片，以及是否清理输出文件。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;api_url (str): 米游社表情包 API 的 URL。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;output_path (str): 输出 JSON 文件的路径。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;groups (list[str], optional): 要处理的表情包分组列表。如果为 `None`，则处理所有分组。默认为 `None`。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;use_index_img (bool, optional): 是否使用索引图片作为分组名称。默认为 `False`。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;clean_output (bool, optional): 是否清理输出文件。如果为 `True`，则覆盖输出文件。默认为 `False`。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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; urllib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;urlopen&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;api_url&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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; json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;loads&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;output_dict &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&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;output_path&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;exists&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; clean_output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&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;output_path&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;r&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;output_dict &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;load&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; use_index_img&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&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; &lt;/span&gt;&lt;span&gt;&quot;height: 20px;top: 4px;position: relative;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pattern &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;img src=&apos;.&lt;/span&gt;&lt;span&gt;*?&lt;/span&gt;&lt;span&gt;&apos; style=&apos;.&lt;/span&gt;&lt;span&gt;*?&lt;/span&gt;&lt;span&gt;&apos; title=&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;&apos;&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sameTitle&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;title&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; key&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;match &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; match&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;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; title&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; emoticon_group &lt;/span&gt;&lt;span&gt;in&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;&quot;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;list&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;emoticon_group&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;status&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; &lt;/span&gt;&lt;span&gt;&quot;draft&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;group_name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;emoticon_group&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; groups &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; group_name &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; groups&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; use_index_img&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;emoticon_group&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;icon&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;origin_group_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; group_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;group_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;img src=&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;index_url&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; style=&apos;&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;&apos; title=&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;group_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;output_dict &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; output_dict&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; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sameTitle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; origin_group_name&lt;/span&gt;&lt;span&gt;)}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;output_dict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;group_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;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;container &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; emoticon &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;emoticon_group&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;emoticon&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;status&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; &lt;/span&gt;&lt;span&gt;&quot;draft&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&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; &lt;/span&gt;&lt;span&gt;emoticon&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;icon&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&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;emoticon&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;replace&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;-&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;origin_group_name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&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;-&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;&quot;-&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;origin_group_name&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;locals&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; group_name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&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;-&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;&quot;-&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;container&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;&quot;text&quot;&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;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;img src=&apos;&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;&apos;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;output_dict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;group_name&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;container&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; container&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&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;output_path&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;dump&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;output_dict&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; f&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ensure_ascii&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;indent&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 使用示例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;api_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://bbs-api.mihoyo.com/misc/api/emoticon_set&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;output &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;path/to/your/output.json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;emoticons_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;&quot;原神 V官方&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;崩坏RPG&quot;&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;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 你想要的表情包列表&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;miyousheEmoticonsJsonToTwikooJson&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;api_url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; output&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;use_index_img&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;groups&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;emoticons_list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;只需要修改 &lt;code&gt;output&lt;/code&gt; 为自己的表情包路径，使用&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path/to/your/file.py&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可。&lt;/p&gt;
&lt;h2&gt;自动部署&lt;a href=&quot;#自动部署&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;修改 &lt;code&gt;package.json&lt;/code&gt; 的 &lt;code&gt;scripts&lt;/code&gt; 项，将 &lt;code&gt;build&lt;/code&gt; 改为 &lt;code&gt;python path/to/your/file.py &amp;amp;&amp;amp; hexo generate&lt;/code&gt;，使用 &lt;code&gt;npm run build&lt;/code&gt; 即可。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>Typst 使用经验记录</title><link>https://blog.hpcesia.com/posts/typst-experiences/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/typst-experiences/</guid><description>关于 Typst 排版的使用经验，以及使用 Pandoc 转换为 Markdown 格式的经验</description><pubDate>Fri, 27 Sep 2024 15:14:17 GMT</pubDate><content:encoded>&lt;article&gt; &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;2025-07-20
&lt;ul&gt;
&lt;li&gt;更新了在博客中使用 Typst 的相关建议，以及转换为 Markdown 的相关建议&lt;/li&gt;
&lt;li&gt;添加了 Typst 符号手写识别的网页版本链接&lt;/li&gt;
&lt;li&gt;修正了部分用词&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2025-03-20
&lt;ul&gt;
&lt;li&gt;更新「目录不同层级标题使用不同样式」到 Typst 0.13 版本&lt;/li&gt;
&lt;li&gt;在「结合 showybox 与 ctheorems 包制作美观定理环境」添加了提示&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2025-02-28
&lt;ul&gt;
&lt;li&gt;更新「在 Typst 中绘制 LaTeX 符号」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-20
&lt;ul&gt;
&lt;li&gt;更新文章中部分链接&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-08
&lt;ul&gt;
&lt;li&gt;更新「在文本中使用美观的大括号分类」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-02
&lt;ul&gt;
&lt;li&gt;更新「结合 showybox 与 ctheorems 包制作美观定理环境」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-01
&lt;ul&gt;
&lt;li&gt;更新「目录不同层级标题使用不同样式」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-27
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本文主要编写于 Typst 0.12.0 版本，部分内容未考虑新版本更新内容，可能已经过时。&lt;/p&gt;
&lt;p&gt;如未特别注明，本文中的代码均基于 Typst 0.12.0 版本。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;怎么找解决方案&lt;a href=&quot;#怎么找解决方案&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;多翻翻别人趟过的坑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;翻文档&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://typst-doc-cn.github.io/docs/&quot;&gt;Typst 中文文档&lt;/a&gt;（注：该文档长期未更新，已过时。建议参考官方英文文档。）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typst.app/docs&quot;&gt;Typst Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;翻示例&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://typst-doc-cn.github.io/guide/FAQ.html&quot;&gt;常见问题 | Typst 中文社区导航&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typst-doc-cn.github.io/tutorial/introduction.html&quot;&gt;The Raindrop-Blue Book (Typst中文教程)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sitandr.github.io/typst-examples-book/book/&quot;&gt;Typst Examples Book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;排版经验&lt;a href=&quot;#排版经验&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;不同层级标题使用不同序号格式&lt;a href=&quot;#不同层级标题使用不同序号格式&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;其实是&lt;a href=&quot;https://typst-doc-cn.github.io/guide/FAQ/heading-formats.html&quot;&gt;如何为每一级标题指定不同的编号格式？ - 常见问题 | Typst 中文社区导航&lt;/a&gt;的重复造轮子，但是造轮子的时候没看到这个东西，造都造了就发出来算了。（用 Typst 非官方中文群群友的说法，在 numbly 包出来之前，人人都有自己的 numbly 轮子（笑））&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diff_numbering&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;schemes&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;nums&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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; nums_arr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums.&lt;/span&gt;&lt;span&gt;pos&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; schemes_arr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; schemes.&lt;/span&gt;&lt;span&gt;pos&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; nums_arr.&lt;/span&gt;&lt;span&gt;len&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; schemes_arr.&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;schemes_arr.&lt;/span&gt;&lt;span&gt;at&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;nums&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;schemes_arr.&lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums_arr.&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;()&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;nums&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heading&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diff_numbering&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;1.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1-1-1&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;一个章节&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;一个小节&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== &lt;/span&gt;&lt;span&gt;一个小节的小节&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;第二个章节&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;第二个章节的小节&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== &lt;/span&gt;&lt;span&gt;第二个章节的小节的小节&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用 numbly 包可以达到更好的效果：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@preview/numbly:0.1.0&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; numbly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heading&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbly&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;一|{1:一}章&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a{1:1}.{2:1}&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1?{1:1}-{2:1}.{3:1}&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;= #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;= #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=== #&lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;填空栏&lt;a href=&quot;#填空栏&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grid_blanks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; grid.cell&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blank-width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;line-width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.05em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grid&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;args.&lt;/span&gt;&lt;span&gt;named&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;args.&lt;/span&gt;&lt;span&gt;pos&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label &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;cell&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;#label#colon&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; blank-width&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stroke&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; line-width&lt;/span&gt;&lt;span&gt;))])))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;grid_blanks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;columns&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; right&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;row-gutter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.5em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;column-gutter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;blank-width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3cm&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;姓名&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;班级&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;学号&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;学校&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;grid_blanks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;columns&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; right&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;row-gutter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.5em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;column-gutter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;blank-width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3cm&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;colon&lt;/span&gt;&lt;span&gt;:&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;gt;  integral_0^1 pi - 1$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Class&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Grade&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;页眉使用当前页面标题&lt;a href=&quot;#页眉使用当前页面标题&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 &lt;a href=&quot;https://github.com/tingerrr/hydra&quot;&gt;hydra&lt;/a&gt; 包。需要其他设置可以参考 hydra 包的&lt;a href=&quot;https://github.com/tingerrr/hydra/blob/main/doc/manual.pdf&quot;&gt;文档&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@preview/hydra:0.5.1&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; hydra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; context &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; calc.&lt;/span&gt;&lt;span&gt;odd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;here&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;right&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;emph&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hydra&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;skip-starting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;)),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;效果演示使用的是我的&lt;a href=&quot;/posts/notes-on-theory-of-several-complex-variables-1-1/&quot;&gt;多复变函数论笔记&lt;/a&gt;的 Typst 版本。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h3&gt;目录不同层级标题使用不同样式&lt;a href=&quot;#目录不同层级标题使用不同样式&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;简易版&lt;a href=&quot;#简易版&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#show&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outline&lt;/span&gt;&lt;span&gt;.entry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; it &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; it.level &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;strong&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; it.level &lt;/span&gt;&lt;span&gt;&amp;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;emph&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果如下：
&lt;a&gt;&lt;/a&gt;
可以发现，页码也变得歪七倒八的。如果不介意，那么用这个简易版即可；反之，可以看下面的复杂版&lt;/p&gt;
&lt;h4&gt;复杂版&lt;a href=&quot;#复杂版&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;&lt;div&gt;0.12 版本&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;Typst 0.13 大幅修改了 &lt;code&gt;outline.entry&lt;/code&gt; 的接口，以下只适用于 Typst 0.12&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#show&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outline&lt;/span&gt;&lt;span&gt;.entry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; it &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; loc &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; it.element.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;loc&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; it.level &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;strong&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it.body&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; it.level &lt;/span&gt;&lt;span&gt;&amp;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;emph&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it.body&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;it.body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sym.space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1fr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; it.fill&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sym.space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;loc&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; it.page&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;复杂版是直接照着 Typst 的 &lt;code&gt;outline&lt;/code&gt; 函数&lt;a href=&quot;https://github.com/typst/typst/blob/1b2714e1a758d6ee0f9471fd1e49cb02f6d8cde4/crates/typst-library/src/model/outline.rs&quot;&gt;源码&lt;/a&gt;来写的，只有标题的文字部分会修改样式，效果如下：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#show&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outline&lt;/span&gt;&lt;span&gt;.entry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; it &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 获取 entry 原本的内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; prefix &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; outline.entry.&lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; body &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; outline.entry.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; page-number &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; outline.entry.&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 修改 body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; it.level &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;strong&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; it.level &lt;/span&gt;&lt;span&gt;&amp;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;emph&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 重新组装 inner&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 保持和 `outline.entry.inner(it)` 获取的结构一致&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; inner &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sym.space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1fr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; it.fill&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sym.space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page-number&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; indented &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; outline.entry.&lt;/span&gt;&lt;span&gt;indented&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; prefix&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; inner&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;it.element.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;span&gt; indented&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;结合 showybox 与 ctheorems 包制作美观定理环境&lt;a href=&quot;#结合-showybox-与-ctheorems-包制作美观定理环境&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;tip&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;目前有开箱即用的包 &lt;a href=&quot;https://typst.app/universe/package/theorion&quot;&gt;theorion&lt;/a&gt;，推荐使用这个。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;本节内容参考了 &lt;a href=&quot;https://github.com/sahasatvik/typst-theorems/issues/15&quot;&gt;showybox and ctheorems? · Issue #15 · sahasatvik/typst-theorems&lt;/a&gt; 的内容并进行了部分修改。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// --------- 定义函数 ---------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@preview/ctheorems:1.1.2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@preview/showybox:2.0.1&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; showybox&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showy-thm&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;identifier&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; blue&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;showy-args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;supplement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;base&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;heading&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;base_level&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showy-fmt&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; number&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;showybox&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&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;none&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;frame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;border-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;title-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color.&lt;/span&gt;&lt;span&gt;lighten&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;30%&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color.&lt;/span&gt;&lt;span&gt;lighten&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;95%&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;footer-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color.&lt;/span&gt;&lt;span&gt;lighten&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;80%&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;radius&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;top-left&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7pt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; bottom-right&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7pt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; rest&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2pt&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;args.&lt;/span&gt;&lt;span&gt;named&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; supplement &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;supplement &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; head&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;thmenv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;identifier&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;heading&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&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; number&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; body&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;showy-fmt&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; number&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;showy-args&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;supplement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; supplement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; theorem &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showy-thm&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;theorem&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;定理&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;title-style&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;weight&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;boxed-style&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;anchor&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; left&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; y&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; horizon&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;offset&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;0pt&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; &lt;/span&gt;&lt;span&gt;0pt&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;radius&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;top-left&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7pt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; bottom-right&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7pt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; rest&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2pt&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1.1&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; lemma &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showy-thm&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lemma&quot;&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;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; green.&lt;/span&gt;&lt;span&gt;darken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;25%&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1.1&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; proof &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thmproof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;proof&quot;&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;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inset&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;0em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; top&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0em&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// --------- 定义函数 ---------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// --------- 使用演示 ---------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#show&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; thmrules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;theorem&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;对任何子集 &lt;/span&gt;&lt;span&gt;$Omega subset CC^n$&lt;/span&gt;&lt;span&gt;，&lt;/span&gt;&lt;span&gt;$cal(O)(Omega)$&lt;/span&gt;&lt;span&gt; 在逐点加法和数乘意义下封闭。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;任一关于 &lt;/span&gt;&lt;span&gt;$z_1, dots.c, z_n$&lt;/span&gt;&lt;span&gt; 的复系数多项式在 &lt;/span&gt;&lt;span&gt;$CC^n$&lt;/span&gt;&lt;span&gt; 上是全纯的，从而在 &lt;/span&gt;&lt;span&gt;$cal(O)(Omega)$&lt;/span&gt;&lt;span&gt; 里。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;若 &lt;/span&gt;&lt;span&gt;$f, g in cal(O)(Omega)$&lt;/span&gt;&lt;span&gt;，且 &lt;/span&gt;&lt;span&gt;$g(z) eq.not 0, forall z in Omega$&lt;/span&gt;&lt;span&gt;，则 &lt;/span&gt;&lt;span&gt;$f slash g in cal(O)(Omega)$&lt;/span&gt;&lt;span&gt;。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;theorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;F. Hartogs, 1906&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;设 &lt;/span&gt;&lt;span&gt;$D subset CC^n$&lt;/span&gt;&lt;span&gt; 为一区域，&lt;/span&gt;&lt;span&gt;$f: D -&amp;gt; CC$&lt;/span&gt;&lt;span&gt;。若 &lt;/span&gt;&lt;span&gt;$f$&lt;/span&gt;&lt;span&gt; 分别关于每一单复变量 &lt;/span&gt;&lt;span&gt;$z_j (1 &amp;lt;= j &amp;lt;= n)$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;全纯，则 &lt;/span&gt;&lt;span&gt;$f in cal(O)(D)$&lt;/span&gt;&lt;span&gt;。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;lemma&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Osgood&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbering&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;设 &lt;/span&gt;&lt;span&gt;$D subset CC$&lt;/span&gt;&lt;span&gt; 为一区域，&lt;/span&gt;&lt;span&gt;$f: D -&amp;gt; CC$&lt;/span&gt;&lt;span&gt;。若 &lt;/span&gt;&lt;span&gt;$f in C(D)$&lt;/span&gt;&lt;span&gt;，且 &lt;/span&gt;&lt;span&gt;$f$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;分别关于每一单复变量 &lt;/span&gt;&lt;span&gt;$z_j (1 &amp;lt;= j &amp;lt;= n)$&lt;/span&gt;&lt;span&gt; 全纯，则 &lt;/span&gt;&lt;span&gt;$f in cal(O)(D)$&lt;/span&gt;&lt;span&gt;。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// --------- 使用演示 ---------&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;在文本中使用美观的大括号分类&lt;a href=&quot;#在文本中使用美观的大括号分类&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#let&lt;/span&gt;&lt;span&gt; my-cases &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&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; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;baseline&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &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; &lt;/span&gt;&lt;span&gt;0.5em&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1fr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;math.&lt;/span&gt;&lt;span&gt;cases&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;span&gt;items.&lt;/span&gt;&lt;span&gt;pos&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; math.&lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;))),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;TEST&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;my-cases&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lorem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;效果：
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;在 Typst 中绘制 LaTeX 符号&lt;a href=&quot;#在-typst-中绘制-latex-符号&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Typst Universe 上有一个现成的包 &lt;a href=&quot;https://typst.app/universe/package/metalogo&quot;&gt;metalogo&lt;/a&gt;，提供了各种 TeX 徽标的绘制函数&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;其他&lt;a href=&quot;#其他&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;对齐 &lt;code&gt;enum&lt;/code&gt; / &lt;code&gt;list&lt;/code&gt; 环境中的文本与标号：&lt;a href=&quot;https://github.com/typst/typst/issues/1204&quot;&gt;List and enum markers are not aligned with the baseline of the item’s contents · Issue #1204 · typst/typst&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;转换为 Markdown&lt;a href=&quot;#转换为-markdown&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我的一部分文章使用 Pandoc 将 Typst 转换为 Markdown 文件，方便放在博客。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;tip&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;如果你愿意折腾，可以尝试使用 &lt;a href=&quot;https://github.com/Myriad-Dreamin/typst.ts/tree/main/projects/hexo-renderer-typst&quot;&gt;hexo-renderer-typst&lt;/a&gt; 直接在 Hexo 上渲染 Typst 文档。&lt;/p&gt;
&lt;p&gt;由于 Typst 0.13 版本已有实验性的 HTML 导出，也可以尝试通过 Typst.ts 进行 HTML 导出。对于 Astro，有可以直接使用 HTML 导出功能渲染为网页的 &lt;a href=&quot;https://github.com/OverflowCat/astro-typst&quot;&gt;astro-typst&lt;/a&gt;，以及 tinymist 作者编写的 &lt;a href=&quot;https://github.com/Myriad-Dreamin/tylant&quot;&gt;基于 Typst 的 Astro 博客模板&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;此外，除去 Pandoc，你也可以尝试使用目前集成于 tinymist 内的 &lt;a href=&quot;https://docs.rs/crate/typlite/latest&quot;&gt;typlite&lt;/a&gt; 来将 typst 文档转换为 Markdown。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h3&gt;基础操作&lt;a href=&quot;#基础操作&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下载 &lt;a href=&quot;https://github.com/jgm/pandoc/releases&quot;&gt;Pandoc&lt;/a&gt; 的最新版本，配置相应环境变量（如果有需要的话），然后就可以开始了。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pandoc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--from=typst&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--to=markdown&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--output=path/to/your/blog/source/_draft/post_name.md&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--wrap=preserve&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;path/to/your/typst_file.typ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;不能转换的情形&lt;a href=&quot;#不能转换的情形&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;以下内容基于 pandoc 3.4 说明&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;include&lt;/code&gt;
pandoc 会报错：&lt;code&gt;&amp;lt;stderr&amp;gt;: hPutChar: invalid argument&lt;/code&gt;，因此本地包、本地文件和远程包都不能使用。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context&lt;/code&gt;
pandoc 会报错：&lt;code&gt;&amp;lt;stderr&amp;gt;: hPutChar: invalid argument&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可能有更多转换失败的情形，欢迎在本文评论区留言告诉我。&lt;/p&gt;
&lt;h3&gt;转换可能出现的错误&lt;a href=&quot;#转换可能出现的错误&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;与标签相关的内容，转换可能出错&lt;/li&gt;
&lt;li&gt;数学公式中未使用括号限制范围的嵌套上下标，转换可能出错，如&lt;code&gt;a_b^c_d&lt;/code&gt;（）转换为  等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可能有更多转换错误的情形，欢迎在本文评论区留言告诉我。&lt;/p&gt;
&lt;h2&gt;实用工具&lt;a href=&quot;#实用工具&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在线 Typst 公式识别：&lt;a href=&quot;https://typress-web.vercel.app/&quot;&gt;Typress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在线 Typst 符号手写识别：&lt;a href=&quot;https://detypify.quarticcat.com/&quot;&gt;Detypify&lt;/a&gt;（已集成于 Tinymist VSCode 插件中）&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>多复变函数论学习笔记 - 第一章 全纯函数 - 第二节 Cauchy-Riemann 方程组</title><link>https://blog.hpcesia.com/posts/notes-on-theory-of-several-complex-variables-1-2/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/notes-on-theory-of-several-complex-variables-1-2/</guid><description>多复变函数论学习笔记 - 复欧氏空间上的 Cauchy-Riemann 方程组</description><pubDate>Fri, 27 Sep 2024 15:04:16 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;h2&gt;多重指标记号&lt;a href=&quot;#多重指标记号&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;定义如下&lt;strong&gt;多重指标记号&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设 ，，记&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;记  为 ，。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;记&lt;/p&gt;
≔
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;复值连续可微空间&lt;a href=&quot;#复值连续可微空间&quot;&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;关于  范数  是&lt;strong&gt;完备的&lt;/strong&gt;，即  为 &lt;strong&gt;Banach 空间&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;类似地，空间&lt;/p&gt;
可连续延拓到
&lt;p&gt;关于范数  也为 Banach 空间。&lt;/p&gt;
&lt;h2&gt;偏微分算子&lt;a href=&quot;#偏微分算子&quot;&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;其具有性质：，，有 。&lt;/p&gt;
&lt;h2&gt;区域上的全纯函数&lt;a href=&quot;#区域上的全纯函数&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;设  为一区域， 为一复值函数，若 ，且  满足如下&lt;strong&gt;齐次 Cauchy-Riemann 方程组&lt;/strong&gt;：&lt;/p&gt;

&lt;p&gt;则称  在  内&lt;strong&gt;全纯&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在单变量的情形下，若一个定义在区域  上的复值函数  在  上任一点的局部均可展开为幂级数，则称  在  上全纯。多变量情形下，也有类似的全纯函数幂级数定义：&lt;/p&gt;
&lt;p&gt;设  为一区域， 为一复值函数。若对任一点 ，均存在  的一个开邻域 ，使得 ，&lt;/p&gt;
≔
&lt;p&gt;则称  在  内&lt;strong&gt;全纯&lt;/strong&gt;。上述两个全纯函数定义是&lt;strong&gt;等价&lt;/strong&gt;的。&lt;/p&gt;
&lt;h2&gt;Hartogs 定理&lt;a href=&quot;#hartogs-定理&quot;&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;&lt;strong&gt;定理&lt;/strong&gt;:
对任何子集 ， 在逐点加法和数乘意义下封闭。任一关于  的复系数多项式在  上是全纯的，从而在  里。若 ，且 ，则 。&lt;/p&gt;
&lt;p&gt;任意满足齐次 Cauchy-Riemann 方程组的函数  也分别关于单复变量  全纯。反过来，则有如下 Hartogs 定理：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理&lt;/strong&gt; (F. Hartogs, 1906):
设  为一区域，。若  分别关于每一单复变量  全纯，则 。&lt;/p&gt;
&lt;p&gt;上述定理说明全纯函数定义中的  为多余条件。&lt;/p&gt;
&lt;p&gt;Hartogs 定理在实变函数论中不成立：设 ，&lt;/p&gt;

&lt;p&gt;显然  关于  均是实解析的，但其在  处无界。&lt;/p&gt;
&lt;h2&gt;Osgood 定理&lt;a href=&quot;#osgood-定理&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;引理&lt;/strong&gt; (Osgood):
设  为一区域，。若 ，且  分别关于每一单复变量  全纯，则 。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;证明&lt;/em&gt;:
任选一点  以及 ，由于  在  的邻域内关于每一单复变量全纯，可以重复使用单复变量全纯函数的 Cauchy 积分公式，得&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;strong&gt;引理&lt;/strong&gt; (Schwarz):
记  为复平面上的单位圆盘， 是  上全纯函数且 ，则 ， 且 。若存在  使得  或者 ，则  为一旋转 ，其中 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理&lt;/strong&gt; (Osgood):
设  为一区域， 局部有界且分别关于每一单复变量  全纯，则 。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;证明&lt;/em&gt;:
由 Osgood 引理，只需证 。设 ，任取  使得 ，记 ，对任意  有&lt;/p&gt;

&lt;p&gt; 局部有界，记&lt;/p&gt;
≔
&lt;p&gt; 为单位圆盘。定义 ，取双全纯映射&lt;/p&gt;

&lt;p&gt;令&lt;/p&gt;
≔
&lt;p&gt;则 ， 且 ，由 Schwarz 引理，。&lt;/p&gt;
&lt;p&gt;取 ，则有&lt;/p&gt;

&lt;p&gt;于是&lt;/p&gt;

&lt;p&gt;即  局部 Lipschitz 连续。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>多复变函数论笔记 - 第一章 全纯函数 - 第一节 复欧氏空间</title><link>https://blog.hpcesia.com/posts/notes-on-theory-of-several-complex-variables-1-1/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/notes-on-theory-of-several-complex-variables-1-1/</guid><description>多复变函数论学习笔记 - 复欧氏空间</description><pubDate>Fri, 20 Sep 2024 12:48:48 GMT</pubDate><content:encoded>&lt;article&gt; &lt;h2&gt;符号简述&lt;a href=&quot;#符号简述&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt; 和  分别表示实数域和复数域， 和  分别表示整数和非负整数， 表示正整数。&lt;/p&gt;
&lt;h2&gt;定义&lt;a href=&quot;#定义&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对 ，定义  个复平面的笛卡尔积为  维复数空间&lt;/p&gt;

&lt;p&gt;其具有自然的  维复向量空间结构。 上的&lt;strong&gt;标准 Hermite 内积&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;h2&gt;与 R²ⁿ 的联系&lt;a href=&quot;#与-rⁿ-的联系&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;定义以  为圆心， 为半径的&lt;strong&gt;开球&lt;/strong&gt;为&lt;/p&gt;

&lt;p&gt;设 ，记 ，则映射&lt;/p&gt;

&lt;p&gt;是  到  的一个实线性同构，且对  上的 L-2 范数有 ，所以  为  上以  为圆心， 为半径的开球，即  与  拓扑同胚。&lt;/p&gt;
&lt;p&gt;由此可将  中的拓扑、分析的通常概念替换到  中。&lt;/p&gt;
&lt;h2&gt;基础概念&lt;a href=&quot;#基础概念&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;开集&lt;/strong&gt;：设  为一点集，若 ，，使得 ，则称  为开集。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;连通集&lt;/strong&gt;：设  为一点集，若  不能表示为两个非空开集之并，则称  是连通的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;区域&lt;/strong&gt;：连通的开集。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;相对紧子集&lt;/strong&gt;：设  为一子集，若其闭包 ，则称  为  的一个相对紧子集，记为 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多圆柱&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;定义以  为圆心， 为（多）半径的&lt;strong&gt;开多圆柱&lt;/strong&gt;为&lt;/p&gt;

&lt;p&gt;其为  中  个开圆盘的笛卡尔积。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多圆域&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;更一般地，称  个复平面区域  的笛卡尔积  为一个&lt;strong&gt;多圆域&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;点集  的&lt;strong&gt;拓扑边界&lt;/strong&gt;记为 &lt;/p&gt;
&lt;h2&gt;绝对空间&lt;a href=&quot;#绝对空间&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;称映射  为&lt;strong&gt;绝对空间&lt;/strong&gt;， 中点集在绝对空间下的像可更为方便地用几何表示。&lt;/p&gt;
&lt;p&gt;例如，容易画出  和  在绝对空间的图形如下：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Hartogs 图形&lt;a href=&quot;#hartogs-图形&quot;&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;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;称  这样的一个「对」为一个（欧式）Hartogs 图形。&lt;/p&gt;
&lt;h2&gt;Reinhardt 域&lt;a href=&quot;#reinhardt-域&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意对  而言，&lt;/p&gt;

&lt;p&gt;是一个  维的实环面&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&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;strong&gt;Reinhardt 域&lt;/strong&gt;。若  还满足 ，均有 ，则称  是&lt;strong&gt;完备的&lt;/strong&gt;。 和  是完备的 Reinhardt 域，但是  是不完备的 Reinhardt 域。&lt;/p&gt;
&lt;p&gt;考虑全纯函数的洛朗级数展开时就会遇到 Reinhardt 域， 中典型的完备 Reinhardt 域是以原点为圆心的开圆盘，而典型的不完备 Reinhardt 域是以原点为圆心的圆环区域。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;脚注&lt;a href=&quot;#footnote-label&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt; 个圆环的笛卡尔积 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;  &lt;/article&gt; </content:encoded></item><item><title>VSCode 功能与美化扩展插件推荐</title><link>https://blog.hpcesia.com/posts/vscode-extension-recommendations/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/vscode-extension-recommendations/</guid><description>推荐一些好用实用的 VSCode 扩展。</description><pubDate>Thu, 05 Sep 2024 07:22:43 GMT</pubDate><content:encoded>&lt;article&gt; &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;2025-03-03
&lt;ul&gt;
&lt;li&gt;新增插件推荐：
&lt;ul&gt;
&lt;li&gt;Roo Code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;移除插件推荐：
&lt;ul&gt;
&lt;li&gt;Continue&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-23
&lt;ul&gt;
&lt;li&gt;新增插件推荐：
&lt;ul&gt;
&lt;li&gt;Continue&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;补充了部分扩展的效果图片&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-10
&lt;ul&gt;
&lt;li&gt;新增插件推荐：
&lt;ul&gt;
&lt;li&gt;SpaceBox UI Enhancer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-06
&lt;ul&gt;
&lt;li&gt;新增插件推荐：
&lt;ul&gt;
&lt;li&gt;Excalidraw&lt;/li&gt;
&lt;li&gt;CodeGeeX&lt;/li&gt;
&lt;li&gt;Code Spell Checker&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-05
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2&gt;功能&lt;a href=&quot;#功能&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这节推荐的都是比较通用的功能性扩展，针对某个语言的扩展也不需要我来推荐，自有大把针对性的文章进行介绍。&lt;/p&gt;
&lt;h3&gt;Path Intellisense&lt;a href=&quot;#path-intellisense&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense&quot;&gt;Path Intellisense&lt;/a&gt; 扩展可以在输入文件路径的时候给出自动补全提示，方便输入。&lt;/p&gt;
&lt;h3&gt;Project Manager&lt;a href=&quot;#project-manager&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager&quot;&gt;Project Manager&lt;/a&gt; 扩展可以在侧边栏新增一个「项目管理器」选项，通过在项目管理器中保存项目，可以实现不同工作区之间的快速切换。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Error Lens&lt;a href=&quot;#error-lens&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens&quot;&gt;Error Lens&lt;/a&gt; 扩展可以直接把错误、警告与提示等信息直接显示在代码行后面，而不是只能把光标移动到下划线处才能看到。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Todo Tree&lt;a href=&quot;#todo-tree&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree&quot;&gt;Todo Tree&lt;/a&gt; 扩展可以搜索整个工作区内的「TODO」、「FIXME」、「BUG」等字段，并在侧边栏的选项中查看。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Trailing Spaces&lt;a href=&quot;#trailing-spaces&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces&quot;&gt;Trailing Spaces&lt;/a&gt; 扩展可以标红每行代码尾部多余的空格。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Excalidraw&lt;a href=&quot;#excalidraw&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor&quot;&gt;Excalidraw&lt;/a&gt; 扩展可以在 VSCode 内绘制手绘风格的矢量图片，支持导出 &lt;code&gt;.png&lt;/code&gt; 和 &lt;code&gt;.svg&lt;/code&gt; 格式。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;CodeGeeX&lt;a href=&quot;#codegeex&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=aminer.codegeex&quot;&gt;CodeGeeX&lt;/a&gt; 扩展可以调用本地或网络的大模型，来加速代码编写。CodeGeeX 的大模型在 GitHub 上开源，因此可以通过本地运行大模型，放心地在涉及商业秘密的项目中使用。&lt;/p&gt;
&lt;h3&gt;Code Spell Checker&lt;a href=&quot;#code-spell-checker&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker&quot;&gt;Code Spell Checker&lt;/a&gt; 扩展可以检测代码中的英文拼写错误并给出修改建议。&lt;/p&gt;
&lt;h3&gt;翻译(英汉词典)&lt;a href=&quot;#翻译英汉词典&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=CodeInChinese.EnglishChineseDictionary&quot;&gt;翻译(英汉词典)&lt;/a&gt; 扩展可以在选中单词时在右下角给出单词的翻译，并且可以翻译下划线、驼峰等格式的单词，方便理解代码。&lt;/p&gt;
&lt;p&gt;:::collapse{title=“效果演示}&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h3&gt;驼峰翻译助手&lt;a href=&quot;#驼峰翻译助手&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svenzhao.var-translation&quot;&gt;驼峰翻译助手&lt;/a&gt;扩展可以调用翻译 API，将中文直接翻译为英文的不同格式的变量名，再也不用发愁怎么命名变量。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Roo Code&lt;a href=&quot;#roo-code&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Roo Code 是一个类似 Cursor 的 AI 代码助手插件。优势在于能够调用 VSCode 自带的 GitHub Copilot 的 API，对于有 GitHub Copilot Pro 免费访问的人（学生认证或 1k star 开源库的维护者）比较友好。不过 VSCode 的 API 不支持多模态，只能文字描述需求。&lt;/p&gt;
&lt;h2&gt;美化&lt;a href=&quot;#美化&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Material Icon Theme&lt;a href=&quot;#material-icon-theme&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot;&gt;Material Icon Theme&lt;/a&gt; 扩展是一个文件图标扩展，其为各种文件与文件夹都制作了特殊的图标，方便浏览。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;background-cover&lt;a href=&quot;#background-cover&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=manasxx.background-cover&quot;&gt;background-cover&lt;/a&gt; 扩展可以直接在其自带的命令中修改更换 VSCode 背景图片。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更换背景图后效果如下：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;SpaceBox UI Enhancer&lt;a href=&quot;#spacebox-ui-enhancer&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=SpaceBox.spacebox-ui&quot;&gt;SpaceBox UI Enhancer&lt;/a&gt; 扩展为 VSCode 的菜单增加了大量对效率影响较小的过渡动画效果。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;评论区反应 MacOS 下该插件可能不可用，请注意。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>Hexo 博客搜索引擎收录与 SEO 优化个人经验</title><link>https://blog.hpcesia.com/posts/hexo-blog-search-engine-indexing/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/hexo-blog-search-engine-indexing/</guid><description>简单记录了将 Hexo 博客收录进搜索引擎与优化 SEO 的经验。</description><pubDate>Tue, 03 Sep 2024 18:36:32 GMT</pubDate><content:encoded>&lt;article&gt; &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;2024-09-04
&lt;ul&gt;
&lt;li&gt;新增「添加 nofollow 标签」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-03
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;以下以 Bing 为例进行说明。&lt;/p&gt;
&lt;h2&gt;在 Bing Webmaster Tools 中登录并添加网站&lt;a href=&quot;#在-bing-webmaster-tools-中登录并添加网站&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bing.com/webmasters&quot;&gt;Bing Webmaster Tools&lt;/a&gt; 是必应的网站管理员工具，可以添加个人网站并带进行一些网站操作。打开 &lt;a href=&quot;https://www.bing.com/webmasters&quot;&gt;Webmaster&lt;/a&gt; 后点击「开始」或右上角「登录」以登录到官网。可以选择三种登录账号：Google、Microsoft、Facebook。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;初次登录会提示添加网站，有两种添加方式：从 GSC 导入、手动添加。如果网站已通过 GSC 收录，可以直接用 GSC，我选择手动添加。然后在右侧的输入框中输入网站URL即可。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后会要求验证网站。&lt;/p&gt;
&lt;h2&gt;验证网站&lt;a href=&quot;#验证网站&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;验证网站有多种方式，我选择的是下载 &lt;code&gt;BingSiteAuth.xml&lt;/code&gt; 文件进行验证。&lt;/p&gt;
&lt;p&gt;Webmaster 会要求你将这个文件放到网站的根目录，我们只需要将下载下来的 &lt;code&gt;BingSiteAuth.xml&lt;/code&gt; 文件放到我们博客的 &lt;code&gt;source&lt;/code&gt; 目录下，使用 &lt;code&gt;hexo d -g&lt;/code&gt; 生成并推送到 GitHub 上即可，可以访问网站根目录下找到 &lt;code&gt;BingSiteAuth.xml&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后在 Webmaster 页面中点击验证即可。&lt;/p&gt;
&lt;h2&gt;添加网站地图&lt;a href=&quot;#添加网站地图&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在博客根目录下打开终端，输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-generator-sitemap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;并在 &lt;code&gt;_config.yaml&lt;/code&gt; 中新增如下配置项：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## Sitemap Generator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sitemap&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&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;sitemap.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着使用 &lt;code&gt;hexo d -g&lt;/code&gt; 生成并推送到 GitHub 上。在 Webmaster 左侧边栏选择「网站地图」选项&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后点击右上角的「提交网站地图」按钮，输入你的网站的 &lt;code&gt;sitemap.xml&lt;/code&gt; 位置。按照上述配置方法，我输入的是 &lt;code&gt;https://blog.hpcesia.com/sitemap.xml&lt;/code&gt;。等待一段时间后，网站地图就会审核成功，如图所示：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;等待 48 小时审核后，就可以在搜索引擎上搜索到自己的博客了。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;编制 URL&lt;a href=&quot;#编制-url&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;审核通过后，可能还是搜不到自己的博客，这时候就需要打开左侧边栏的「URL 检查」界面&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;输入自己的博客主页链接检查 URL，如果提示「已发现但未爬网，该 URL 无法在必应上显示」，先确认自己博客没有问题，然后选择「请求编制索引」即可，等待一段时间应该就好了。如果一直不进行索引，可以去联系客服处理。&lt;/p&gt;
&lt;h2&gt;GitHub Action 自动提交 URL&lt;a href=&quot;#github-action-自动提交-url&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果博客更新较勤，可以使用 &lt;a href=&quot;https://github.com/Lete114/Hexo-SEO-AutoPush&quot;&gt;&lt;code&gt;Hexo-SEO-AutoPush&lt;/code&gt;&lt;/a&gt; 插件来配置 GitHub Action 以定期推送 URL 到搜索引擎上，提高爬虫抓取几率。&lt;/p&gt;
&lt;h3&gt;安装&lt;a href=&quot;#安装&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-seo-autopush&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;配置文件&lt;a href=&quot;#配置文件&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在博客根目录下的 &lt;code&gt;_config.yml&lt;/code&gt; 配置文件中添加以下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## enable: 开启/关闭 推送&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## cron: 执行时间周期&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## deployBranch: 部署分支&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## count: 每次提交最新的10篇文章，输入0或者不填写则默认为所有文章(建议是最新的10篇文章)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## date: 更新时间(updated)|创建日期(created)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## https://github.com/Lete114/hexo-seo-autopush.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo_seo_autopush&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0 4 * * *&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;deployBranch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;baidu&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&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;created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;bing&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&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;created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&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;created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;由于生成的 actions 是在&lt;code&gt;.github/workflows/HexoSeoAutoPush.yml&lt;/code&gt;，&lt;code&gt;.&lt;/code&gt; 开头的文件或文件夹都会被视为隐藏文件，&lt;code&gt;hexo-deployer-git&lt;/code&gt; 不会部署隐藏文件，所以需要新增配置项 &lt;code&gt;ignore_hidden&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;git&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;git@github.com:HPCesia/HPCesia.github.io.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;branch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;master&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ignore_hidden&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;APIKEY 设置&lt;a href=&quot;#apikey-设置&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;打开博客部署的 GitHub 仓库的「Setting」选项卡：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在侧边栏找到「Secrets and variables」选项，点开其中的「Actions」选项：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后点击「New repository secret」：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在「Name」和「Secret」处分别填写下方表格中的内容：&lt;/p&gt;
&lt;div&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;baidu_token&lt;/td&gt;&lt;td&gt;UlxxxxxxxxxxxxxB9&lt;/td&gt;&lt;td&gt;【必填】Value 输入百度的 token&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;bing_apikey&lt;/td&gt;&lt;td&gt;47xxxxxxxxxxxxx91&lt;/td&gt;&lt;td&gt;【必填】Value 输入必应的 apikey&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;google_private_key&lt;/td&gt;&lt;td&gt;xxxxxxxxxxxxxxxxx&lt;/td&gt;&lt;td&gt;【必填】Value 输入谷歌的 private_key （注意：填写的时候需要使用&lt;strong&gt;双引号&lt;/strong&gt;包起来，如: &lt;code&gt;&quot;private_key&quot;&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;google_client_email&lt;/td&gt;&lt;td&gt;xxxxxxxxxxxxxxxxx&lt;/td&gt;&lt;td&gt;【必填】Value 输入谷歌的 client_email&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;后续跟随&lt;a href=&quot;https://github.com/Lete114/Hexo-SEO-AutoPush?tab=readme-ov-file#baidu-key&quot;&gt;插件说明&lt;/a&gt;操作即可。&lt;/p&gt;
&lt;h2&gt;添加 nofollow 标签&lt;a href=&quot;#添加-nofollow-标签&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/hexojs/hexo-filter-nofollow&quot;&gt;&lt;code&gt;hexo-filter-nofollow&lt;/code&gt;&lt;/a&gt; 插件可以自动化地为博客中的外链添加 &lt;code&gt;nofollow&lt;/code&gt; 标签。&lt;/p&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&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;hexo-filter-nofollow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;安装 &lt;code&gt;hexo-filter-nofollow&lt;/code&gt; 插件，然后在 &lt;code&gt;_config.yml&lt;/code&gt; 中添加配置项：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## hexo-filter-nofollow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## field - 插件的处理范围，默认值为 site，可选 post 或 site&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;##   post - 仅处理文章内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;##   site - 处理全站所有页面&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## exclude - 域名白名单，不同的子域名视为不同的域名（如 www）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;##   exclude1.com不包括 www.exclude1.com 或 en.exclude1.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nofollow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;field&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;site&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;exclude&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;exclude1.com&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;exclude2.com&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl &amp;amp;&amp;amp; hexo g &amp;amp;&amp;amp; hexo d&lt;/code&gt; 三连即可。&lt;/p&gt;
&lt;h2&gt;参考资料&lt;a href=&quot;#参考资料&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cnblogs.com/RainbowC0/p/18107581&quot;&gt;将 GitHub Pages 个人博客录入搜索引擎（以 Bing 为例） - RainbowC0 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lengnian.github.io/posts/7cddb87d/&quot;&gt;Hexo+GitHub Pages搭建的个人博客加入到Bing搜索引擎 | WeiSJ&amp;amp;HEXO &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ehcoo.com/seo.html&quot;&gt;【搜索优化】Hexo-next百度和谷歌搜索优化 | Ehcoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wrysmile.cn/Hexo-03.html&quot;&gt;Hexo博客之高级优化教程 | Wrysmile 的博客&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>Fluid 主题无侵入改造记录</title><link>https://blog.hpcesia.com/posts/fluid-theme-modification-notes/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/fluid-theme-modification-notes/</guid><description>非侵入式改造 Hexo 的 Fluid 主题的经验记录</description><pubDate>Mon, 26 Aug 2024 07:54:36 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2024-09-07&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更新主题更换提醒。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2024-09-03&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;规范了更新日志格式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2024-08-27&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新增「文章时效性显示」、「随机文章跳转」与「代码块美化」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2024-08-26&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新增「顶部阅读进度条」与「建站时间显示」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2024-08-26&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本博客已更换至 &lt;a href=&quot;https://solitude.js.org/zh/&quot;&gt;Solitude&lt;/a&gt; 主题，Fluid 主题相关内容仅供参考。&lt;/p&gt;
&lt;p&gt;本博客已更换至 &lt;a href=&quot;https://github.com/HPCesia/astral-halo&quot;&gt;Astral Halo&lt;/a&gt; 主题，Solitude 与 Fluid 主题相关内容仅供参考。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://hexo.io&quot;&gt;Hexo&lt;/a&gt; 的 &lt;a href=&quot;https://github.com/fluid-dev/hexo-theme-fluid&quot;&gt;Fluid&lt;/a&gt; 主题是一个很好的主题，功能基本完整，页面简洁，加载浏览都很流畅。但是我对这个主题的页面仍有想修改的地方，特此记录。&lt;/p&gt;
&lt;p&gt;同时为了保证在更新主题是不会影响我的修改，因此本文中所有修改都是&lt;strong&gt;非侵入式&lt;/strong&gt;（不修改主题源代码）的。&lt;/p&gt;
&lt;h2&gt;文章时效性提示&lt;a href=&quot;#文章时效性提示&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;source/custom/js&lt;/code&gt; 目录下新建 &lt;code&gt;outdate-notice.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/outdate-notice.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onload&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; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//不同的日期显示不同的样式，200 天为黄色提示，400天为红色提示，可以自己定义。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; warningDay &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; errorDay &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 确保能够获取到文章时间以及在文章详情页&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; times &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getElementsByTagName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;time&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (times&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; posts &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getElementsByClassName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;post-content&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (posts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 获取系统当前的时间&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; pubTime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(times[&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;dateTime)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/* 文章发布时间戳 */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; now &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; interval &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseInt&lt;/span&gt;&lt;span&gt;(now &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; pubTime)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; days &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseInt&lt;/span&gt;&lt;span&gt;(interval &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;86400000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* 发布时间超过指定时间（毫秒） */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//note warning 以及 note danger 是 Next 主题的自定义模板语法，如果使用其他主题，请自行更改样式以达到最佳显示效果&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (interval &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; warningDay &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3600&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; interval &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; errorDay &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3600&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;posts[&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;innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;div class=&quot;note note-warning&quot;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;h5&amp;gt;文章时效性提示&amp;lt;/h5&amp;gt;&amp;lt;p&amp;gt;这是一篇发布于 &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;days &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos; 天前的文章，部分信息可能已发生改变，请注意甄别。&amp;lt;/p&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;/div&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;posts[&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;innerHTML&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; (interval &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; errorDay &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3600&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;posts[&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;innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;div class=&quot;note note-danger&quot;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;h5&amp;gt;文章时效性提示&amp;lt;/h5&amp;gt;&amp;lt;p&amp;gt;这是一篇发布于 &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;days &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos; 天前的文章，部分信息可能已发生改变，请注意甄别。&amp;lt;/p&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;/div&amp;gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;posts[&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;innerHTML&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在之前创建的 &lt;code&gt;scripts/injector.js&lt;/code&gt; 中新增：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;scripts/injector.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 注入文章时效性提示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;injector&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;body_end&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;`&amp;lt;script src=&quot;custom/js/outdate-notice.js&quot;&amp;gt;&amp;lt;/script&amp;gt;`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;代码块美化&lt;a href=&quot;#代码块美化&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;scripts&lt;/code&gt; 目录下新建 &lt;code&gt;code-pretty.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;scripts/code-pretty.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;use strict&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 获取唯一 ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getUuid&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substring&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;8&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;now&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;after_post_render&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &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; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&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; line_number&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; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; hexo&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;config&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;highlight&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; reg&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (lib &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;highlightjs&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (line_number) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reg &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;figure class=&quot;highlight&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;+?&lt;/span&gt;&lt;span&gt;hljs (&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;.&lt;/span&gt;&lt;span&gt;+?&lt;/span&gt;&lt;span&gt;)(&amp;lt;&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;figure&amp;gt;)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;gims&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reg &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;div class=&quot;code-wrapper&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;+?&lt;/span&gt;&lt;span&gt;hljs (&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;.&lt;/span&gt;&lt;span&gt;+?&lt;/span&gt;&lt;span&gt;)(&amp;lt;&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;div&amp;gt;)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;gims&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&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;if&lt;/span&gt;&lt;span&gt; (lib &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;prismjs&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reg &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;div class=&quot;code-wrapper&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;+?&lt;/span&gt;&lt;span&gt;data-language=&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;.&lt;/span&gt;&lt;span&gt;+?&lt;/span&gt;&lt;span&gt;)(&amp;lt;&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;div&amp;gt;)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;gims&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;content &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;content&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reg&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;begin&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inner&lt;/span&gt;&lt;span&gt;,&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; &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;offset&lt;/span&gt;&lt;span&gt;,&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;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; collapseId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`collapse-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getUuid&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; collapseBtn &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;i class=&quot;iconfont icon-code&quot; type=&quot;button&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;collapseId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&amp;lt;/i&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; collapseDiv &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;div class=&quot;collapse show&quot; id=&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;collapseId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;inner&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; langSpan &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;span&amp;gt;&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;toUpperCase&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/span&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; begin &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; collapseBtn &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; langSpan &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; collapseDiv &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; end&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; data&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;10000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// 应该在完成其他渲染后执行，因此将优先级设大一点&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;tip&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;如果需要修改代码块右上角图标，请更换 &lt;code&gt;collapseBtn&lt;/code&gt; 的 icon 部分 &lt;code&gt;&quot;iconfont icon-code&quot;&lt;/code&gt;。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;再在 &lt;code&gt;custom/css&lt;/code&gt; 中新建 &lt;code&gt;code-pretty.styl&lt;/code&gt; 文件&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;custom/css/code-pretty.styl&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;highlight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;code-wrapper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;border-radius&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;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;highlight&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;code-wrapper&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;e6ebf1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;border-radius&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.625&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 折叠图标&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;777777&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;margin-left&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;px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;line-height&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;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;transition&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; ease-in-out, transform &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; ease-in-out&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &amp;amp;.collapsed {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//   transform: rotate(-90deg);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 代码语言&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;777777&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;margin-left&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;px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;font-weight&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; bold&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;copy-btn&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&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;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; darkslategrey&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;font-size&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;rem !important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;font-weight&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; bold&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;data-user-color-scheme&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;copy-btn&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;c4c6c9&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;transition&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; ease-in-out&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;data-user-color-scheme&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;highlight&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markdown-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;code-wrapper&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;696969&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;transition&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; background-color &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; ease-in-out&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;c4c6c9&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;c4c6c9&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;transition&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; color &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; ease-in-out&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_css&lt;/code&gt; 配置项中添加：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_css&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;custom/css/code-pretty&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;浏览器恶搞标签&lt;a href=&quot;#浏览器恶搞标签&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;source&lt;/code&gt; 目录下新建 &lt;code&gt;custom/js&lt;/code&gt; 目录，再在其中新建 &lt;code&gt;label-page.js&lt;/code&gt; 文件，内容为：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;custom/js/label-page.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 浏览器搞笑标题&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; OriginTitle &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; titleTime&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;visibilitychange&apos;&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; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;hidden) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&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;&apos;(´;ω;｀) 你不要我了吗 - &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; OriginTitle&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;clearTimeout&lt;/span&gt;&lt;span&gt;(titleTime)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&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; OriginTitle&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;titleTime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&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; OriginTitle&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;随后在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_js&lt;/code&gt; 配置项中添加：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_js&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/custom/js/label-page.js&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 浏览器恶搞标题&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;背景动态线条&lt;a href=&quot;#背景动态线条&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;简单版&lt;a href=&quot;#简单版&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;添加&lt;a href=&quot;https://github.com/hustcc/canvas-nest.js&quot;&gt;背景动态线条&lt;/a&gt;只需要在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中新增 &lt;code&gt;custom_html&lt;/code&gt; 配置项并添加如下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_html&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;script type=&quot;text/javascript&quot; color=&quot;255,255,255&quot; opacity=&quot;1.0&quot; zIndex=&quot;-1&quot; count=&quot;110&quot; src=&quot;https://cdn.jsdelivr.net/npm/canvas-nest.js@1.0.1/dist/canvas-nest.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h3&gt;修改版&lt;a href=&quot;#修改版&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;由于 &lt;code&gt;canvas-nest.js&lt;/code&gt; 的 &lt;code&gt;2.0.0&lt;/code&gt; 以后所有版本都与 Fluid 主题有冲突，而 &lt;code&gt;1.0.1&lt;/code&gt; 版本不能修改点的颜色，只能修改线条颜色，因此还可以选择将 &lt;code&gt;1.0.1&lt;/code&gt; 版本的 &lt;code&gt;js&lt;/code&gt; 文件下载到本地进行修改。&lt;/p&gt;
&lt;p&gt;下载&lt;a href=&quot;https://cdn.jsdelivr.net/npm/canvas-nest.js@1.0.1/dist/canvas-nest.js&quot;&gt;源文件&lt;/a&gt;到本地 &lt;code&gt;source/custom/js&lt;/code&gt; 目录下，分别修改以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;c: get_attribute(script, &quot;color&quot;, &quot;0,0,0&quot;),&lt;/code&gt; 后新增一行&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/canvas-nest.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&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;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_attribute&lt;/span&gt;&lt;span&gt;(script&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;pointColor&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0,0,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;//pointColor&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;在&lt;code&gt;context.strokeStyle = &quot;rgba(&quot; + config.c + &quot;,&quot; + (d + 0.2) + &quot;)&quot;&lt;/code&gt; 后新增一行&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/canvas-nest.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fillStyle &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rgba(&quot;&lt;/span&gt;&lt;span&gt; &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;p &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;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中新增 &lt;code&gt;custom_html&lt;/code&gt; 配置项并添加如下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_html&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;script type=&quot;text/javascript&quot; color=&quot;255,255,255&quot; pointColor=&quot;252,228,236&quot; opacity=&quot;1.0&quot; zIndex=&quot;-1&quot; count=&quot;110&quot; src=&quot;/custom/js/canvas-nest.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;顶部阅读进度条&lt;a href=&quot;#顶部阅读进度条&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;source/custom/js&lt;/code&gt; 目录下新建 &lt;code&gt;read-progress-bar.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/read-progress-bar.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;DOMContentLoaded&apos;&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; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; winHeight &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerHeight&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;docHeight &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;documentElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scrollHeight&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progressBar &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#content_progress&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progressBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; docHeight &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; winHeight&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progressBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scrollY&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;scroll&apos;&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; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progressBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;documentElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scrollHeight &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerHeight&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progressBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scrollY&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;再在 &lt;code&gt;source/custom/css&lt;/code&gt; 目录下新建 &lt;code&gt;read-progress-bar.css&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/css/read-progress-bar.css&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;content_progress&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Positioning */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; fixed&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;left&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;top&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;z-index&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;32766&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100%&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;height&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;px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-webkit-appearance&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-moz-appearance&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;appearance&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;border&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; transparent&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;ffffff80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/* 使用半透明白色，适配夜间模式 */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;content_progress&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;-webkit-progress-bar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; transparent&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;content_progress&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;-webkit-progress-value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;ffffff80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;content_progress&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;-moz-progress-bar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;ffffff80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着在 &lt;code&gt;scripts&lt;/code&gt; 目录下新建 &lt;code&gt;injector.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;scripts/injector.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 注入阅读进度条&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;injector&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;head_begin&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;progress id=&quot;content_progress&quot; value=&quot;0&quot;&amp;gt;&amp;lt;/progress&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;最后在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_js&lt;/code&gt; 和 &lt;code&gt;custom_css&lt;/code&gt; 配置项中添加：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_js&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;custom/js/read-progress-bar.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_css&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;custom/css/read-progress-bar.css&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;建站时间&lt;a href=&quot;#建站时间&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;source/custom/js&lt;/code&gt; 目录下新建 &lt;code&gt;create-time.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/create-time.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&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;new&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createtime&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; grt &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&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;&apos;08/19/2024 12:00:00&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;setTime&lt;/span&gt;&lt;span&gt;(now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;250&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;days &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; grt) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dnum &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;floor&lt;/span&gt;&lt;span&gt;(days)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hours &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; grt) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; dnum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hnum &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;floor&lt;/span&gt;&lt;span&gt;(hours)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;(hnum)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hnum &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;0&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; hnum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes &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; grt) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; dnum &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; hnum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mnum &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;floor&lt;/span&gt;&lt;span&gt;(minutes)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;(mnum)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mnum &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;0&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; mnum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;seconds &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; grt) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; dnum &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; hnum &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; mnum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;snum &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;round&lt;/span&gt;&lt;span&gt;(seconds)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;(snum)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;snum &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;0&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; snum&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;timeDate&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerHTML &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;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; dnum &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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;times&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; hnum &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;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; mnum &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;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; snum &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;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setInterval&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;createtime()&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;250&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_js&lt;/code&gt; 配置项中添加：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_js&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;custom/js/create-time.js&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;最后在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中修改 &lt;code&gt;footer/content&lt;/code&gt; 配置项，新增一行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&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;&quot;timeDate&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;span&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&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;&quot;times&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;span&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即将 &lt;code&gt;footer/content&lt;/code&gt; 配置项修改为如下形式：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;a href=&quot;https://hexo.io&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&amp;gt;&amp;lt;span&amp;gt;Hexo&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;i class=&quot;iconfont icon-love&quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;a href=&quot;https://github.com/fluid-dev/hexo-theme-fluid&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&amp;gt;&amp;lt;span&amp;gt;Fluid&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;br&amp;gt;&amp;lt;span id=&quot;timeDate&quot;&amp;gt;天数载入中&amp;lt;/span&amp;gt;&amp;lt;span id=&quot;times&quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;h2&gt;随机文章跳转&lt;a href=&quot;#随机文章跳转&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;该方法需要先生成 sitemap，可以参考&lt;a href=&quot;/posts/how-to-build-blog-with-hexo/&quot;&gt;我的另一篇文章&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;先在 &lt;code&gt;source/custom/js&lt;/code&gt; 目录下新建 &lt;code&gt;random-post.js&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;source/custom/js/random-post.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;randomPost&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/sitemap.xml&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&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; res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&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;new&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DOMParser&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parseFromString&lt;/span&gt;&lt;span&gt;(str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;text/xml&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(&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; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; ls &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;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;url loc&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; locationHref&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; locSplit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;locationHref &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ls[Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;(Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; ls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length)]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerHTML&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;locSplit &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; locationHref&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;split&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;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;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// } while (locSplit == &apos;&apos; || locSplit == &apos;tags&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;//若所有文章都如 https://…….com/posts/2022/07/…… 格式，主域名后字符是 posts，则循环条件改为：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (locSplit &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;posts&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; locationHref&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_js&lt;/code&gt; 配置项中添加：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_js&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;custom/js/random-post.js&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;随后在喜欢的位置放上 &lt;code&gt;javascript:randomPost();&lt;/code&gt; 的跳转链接，例如在导航栏：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;menu&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;random&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;随机文章&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&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;&apos;javascript:randomPost();&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;iconfont icon-random&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;hexo cl&lt;/code&gt; + &lt;code&gt;hexo d -g&lt;/code&gt; 重新生成并部署即可。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;tip&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;以上代码中 &lt;code&gt;icon: &quot;iconfont icon-random&quot;&lt;/code&gt; 使用了我自己的 Iconfont 图标库而非&lt;a href=&quot;https://hexo.fluid-dev.com/docs/icon/&quot;&gt;主题内置 Iconfont 图标库&lt;/a&gt;，有需要请自行到 &lt;a href=&quot;https://www.iconfont.cn/&quot;&gt;Iconfont&lt;/a&gt; 创建自己的图标库。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;新增标签语法&lt;a href=&quot;#新增标签语法&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;参看&lt;a href=&quot;/posts/a0486011&quot;&gt;另一篇文章&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;参考资料&lt;a href=&quot;#参考资料&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本篇文章内容参考了类似的大量文章内容，特此感谢（排名不分先后）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zeyulong.com/posts/3edad46f&quot;&gt;Hexo博客美化 - 龙泽雨的博客&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wakutsu0223.top/2023/02/24/Hexo-Fluid%E6%90%AD%E5%BB%BA%E4%B8%8E%E9%AD%94%E6%94%B9%E7%BA%AA%E5%BD%95&quot;&gt;Hexo-Fluid搭建与魔改纪录 - 弥冬のBlog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eurekady.com/article/Fluid/e3b7f02954e5&quot;&gt;Hexo-3-Fluid主题魔改 - 遥望&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.kevinchu.top/2023/07/17/hexo-theme-fluid-modify&quot;&gt;Hexo博客Fluid主题魔改记录 - KEVIN’S BLOG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cnblogs.com/qq597585136/p/7019755.html&quot;&gt;网页动态背景——随鼠标变换的动态线条 - 孤独的飞行者 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fluid-dev/hexo-theme-fluid/issues/1051&quot;&gt;建议添加“文章时效性”提示 · Issue #1051 · fluid-dev/hexo-theme-fluid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kiyanyang.github.io/posts/f92be1eb/&quot;&gt;Hexo-Fluid 博客美化和修改 | Kiyan’s Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kiyanyang.github.io/posts/c4dd4019/&quot;&gt;使用 Hexo 过滤器实现 Fluid 主题的代码折叠 | Kiyan’s Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://immmmm.com/randompost-by-sitemap/&quot;&gt;利用 SiteMap 随机访问站内页面：：木木木木木&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  &lt;/article&gt; </content:encoded></item><item><title>考研数据结构笔记 - KMP 算法</title><link>https://blog.hpcesia.com/posts/kmp-algorithm-notes/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/kmp-algorithm-notes/</guid><description>考研复习数据结构的 KMP 算法的笔记。</description><pubDate>Thu, 22 Aug 2024 04:02:34 GMT</pubDate><content:encoded>&lt;article&gt;  &lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本文基于考研 408 的 KMP 算法编写。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;KMP 算法核心思想：&lt;strong&gt;主字符串指针只进不退&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;KMP 匹配算法&lt;a href=&quot;#kmp-匹配算法&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个比较简单，基于 &lt;code&gt;next&lt;/code&gt; 数组进行计算即可。&lt;/p&gt;
&lt;p&gt;匹配使用双指针进行，主字符串的指针只进不退，当模式串指针指向的字符与主字符串指针指向的字符匹配时，两个指针一起 +1；当模式串的某个字符不匹配时，则根据 &lt;code&gt;next&lt;/code&gt; 数组中的对应值，将模式串指针移动到相应的地方。直接看代码更简单：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;optional&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kmpMatch&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;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&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;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;empty&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;vector&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; next &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateNext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// pattern无符号，需要额外+1来处理首字符不匹配的情况&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt; str_ptr &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; pattern_ptr &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str_ptr &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; str&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; pattern_ptr &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern_ptr &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;||&lt;/span&gt;&lt;span&gt; str&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;str_ptr&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;pattern_ptr &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 匹配时，指针都后移&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str_ptr&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pattern_ptr&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 不匹配时，模式串指针回到next数组中对应位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pattern_ptr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; next&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;pattern_ptr &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern_ptr &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 匹配成功，返回匹配的首个字符位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; str_ptr &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern_ptr &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 匹配失败，返回空&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h2&gt;KMP next 数组生成算法&lt;a href=&quot;#kmp-next-数组生成算法&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个才是重中之重。先上算法代码：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;vector&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateNext&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;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;vector&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt; i &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; j &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; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; next&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;()&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;j &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;||&lt;/span&gt;&lt;span&gt; pattern&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; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&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; &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;j&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; next&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; next&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;以下为叙述方便起见，采用类似 MATLAB 的 &lt;code&gt;str[a:b]&lt;/code&gt; 的形式来表示 &lt;code&gt;str.substr(a, b - a)&lt;/code&gt; 这一子串。&lt;/p&gt;
&lt;p&gt;算法的输出 &lt;code&gt;next&lt;/code&gt; 数组中，&lt;code&gt;next[i]&lt;/code&gt; 对应的是 &lt;code&gt;pattern[0:i - 1]&lt;/code&gt; 的最长公共前后缀长度 +1。算法的循环可以看作两个部分，一个部分是递增 &lt;code&gt;i&lt;/code&gt;，而另一个循环则是移动 &lt;code&gt;j&lt;/code&gt; 来找到 &lt;code&gt;pattern[0:i]&lt;/code&gt; 的最长公共前后缀长度，所以每次 &lt;code&gt;i++&lt;/code&gt; 后，&lt;code&gt;j&lt;/code&gt; 都表示 &lt;code&gt;pattern[0:i - 1]&lt;/code&gt; 的最长公共前后缀长度 +1(因为 &lt;code&gt;j&lt;/code&gt; 也跟着递增了)。&lt;/p&gt;
&lt;p&gt;着重考虑第二个循环，即 &lt;code&gt;i++&lt;/code&gt; 后移动 &lt;code&gt;j&lt;/code&gt; 的部分。循环开始时，比较 &lt;code&gt;pattern[0:i]&lt;/code&gt; 后缀的最后一个字符，即 &lt;code&gt;pattern[i]&lt;/code&gt; ，与 &lt;code&gt;pattern[0:i - 1]&lt;/code&gt; 的最长公共前后缀所对应前缀的下一个字符，即 &lt;code&gt;pattern[j - 1]&lt;/code&gt; 是否相等。&lt;/p&gt;
&lt;p&gt;如果相等，就说明 &lt;code&gt;pattern[0:i]&lt;/code&gt; 的最长公共前后缀为 &lt;code&gt;pattern[0:j - 1]&lt;/code&gt; 和 &lt;code&gt;pattern[i - j:i]&lt;/code&gt;，因为 &lt;code&gt;pattern[0:i - 1]&lt;/code&gt; 的最长公共前后缀恰为 &lt;code&gt;pattern[0:j - 2]&lt;/code&gt; 和 &lt;code&gt;pattern[i - j:i - 1]&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果不相等，则回退 &lt;code&gt;j&lt;/code&gt;。这是因为 &lt;code&gt;pattern[0:j - 2] == pattern[i - j:i - 1]&lt;/code&gt;，而 &lt;code&gt;next[j - 1]&lt;/code&gt; 就是 &lt;code&gt;pattern[0:j - 2]&lt;/code&gt; 的最大公共前后缀长度 +1，也是 &lt;code&gt;pattern[i - j:i - 1]&lt;/code&gt; 的最大公共前后缀长度 +1，所以要把 &lt;code&gt;j&lt;/code&gt; 回退到 &lt;code&gt;next[j - 1]&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;换句话来说，第二个循环就是利用已经计算好的公共前后缀长度与前后缀相同的性质，按顺序不断尝试寻找最长的公共前后缀，如果发现前后缀不匹配，就回退到次长公共前后缀继续尝试寻找，直到 &lt;code&gt;j&lt;/code&gt; 回退到 &lt;code&gt;pattern[0]&lt;/code&gt;，也就是找不到任何公共前后缀时循环结束，递增 &lt;code&gt;i&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;KMP nextval 数组&lt;a href=&quot;#kmp-nextval-数组&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 KMP 的匹配算法中，如果 &lt;code&gt;pattern[i]&lt;/code&gt; 失配，则模式串指针回退到 &lt;code&gt;next[i] - 1&lt;/code&gt; 处。但如果 &lt;code&gt;pattern[i] = pattern[next[i] - 1]&lt;/code&gt;，那回退后进行的下一次匹配一定是失配的，还要继续回退，相当于进行了一次无用的匹配。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nextval&lt;/code&gt; 就是用来解决这个问题的，在计算出 &lt;code&gt;next&lt;/code&gt; 数组后，再遍历 &lt;code&gt;next&lt;/code&gt; 数组做一次修改，如果 &lt;code&gt;pattern[i] = pattern[next[i] - 1]&lt;/code&gt;，就让 &lt;code&gt;next[i] = next[next[i] - 1]&lt;/code&gt;，省去一次无用的跳转。&lt;/p&gt;
&lt;p&gt;算法代码如下：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateNextval&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;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;vector&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;size_t&lt;/span&gt;&lt;span&gt; i &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; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;span&gt; &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; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pattern&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; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;next&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; &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&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; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; next&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;next&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; &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;  &lt;/article&gt; </content:encoded></item><item><title>使用 Hexo + GitHub Page 搭建个人博客的实践记录。</title><link>https://blog.hpcesia.com/posts/how-to-build-blog-with-hexo/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/how-to-build-blog-with-hexo/</guid><description>简单记录了自己使用 Hexo 搭建博客的经验。</description><pubDate>Wed, 21 Aug 2024 08:23:00 GMT</pubDate><content:encoded>&lt;article&gt; &lt;div&gt;&lt;div&gt;更新日志&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;2024-11-14
&lt;ul&gt;
&lt;li&gt;更新了 gulp 压缩使用的脚本。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-10-28
&lt;ul&gt;
&lt;li&gt;新增「域名」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-09-03
&lt;ul&gt;
&lt;li&gt;迁移「添加网站到搜索引擎」部分到&lt;a href=&quot;/posts/hexo-blog-search-engine-indexing/&quot;&gt;另一篇文章&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;规范了更新日志格式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-30
&lt;ul&gt;
&lt;li&gt;更新了「数学公式渲染」、「搜索引擎」、「评论系统」的部分内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-28
&lt;ul&gt;
&lt;li&gt;更新了「数学公式渲染」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-27
&lt;ul&gt;
&lt;li&gt;新增「优化博客性能」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-26
&lt;ul&gt;
&lt;li&gt;新增「添加 RSS 订阅」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-25
&lt;ul&gt;
&lt;li&gt;新增「添加网站到搜索引擎」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-24
&lt;ul&gt;
&lt;li&gt;新增「字体修改」与「启用评论数学公式」相关内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024-08-21
&lt;ul&gt;
&lt;li&gt;发布文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;为了方便自己以后更换电脑后重新配置这个博客，以及日常调试，在此将自己的建站经验记录下来。&lt;/p&gt;
&lt;p&gt;本文仅适用于 Windows 平台。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;环境搭建&lt;a href=&quot;#环境搭建&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;前置环境&lt;a href=&quot;#前置环境&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;Node.js &amp;amp; npm&lt;a href=&quot;#nodejs--npm&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;检查当前环境是否安装 Node.js 以及当前的版本号，若未安装，需要在&lt;a href=&quot;https://nodejs.cn/en/download&quot;&gt;官网&lt;/a&gt;上下载并安装。Node.js 默认配置了 npm，因此不需要额外下载。&lt;/p&gt;
&lt;p&gt;此外，中国大陆地区使用 npm 需要配置淘宝的镜像源：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&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;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;registry&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://registry.npmmirror.com&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Git&lt;a href=&quot;#git&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在&lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;官网&lt;/a&gt;上下载 Windows 版本的 Git 安装包并安装。&lt;/p&gt;
&lt;h3&gt;Hexo&lt;a href=&quot;#hexo&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;安装&lt;a href=&quot;#安装&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;进行 Hexo 的安装操作，在终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-version&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;出现版本号即说明安装成功。&lt;/p&gt;
&lt;h2&gt;本地建站&lt;a href=&quot;#本地建站&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;初始化&lt;a href=&quot;#初始化&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;新建一个用于存储博客数据的目录(如&lt;code&gt;D:\Blog&lt;/code&gt;)并确保该目录为空，随后在终端中执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;D:&lt;/span&gt;&lt;span&gt;\B&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;等待一段时间，即可成功初始化。此时可使用&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;来本地预览初始化成功的博客。&lt;/p&gt;
&lt;h3&gt;GitHub 部署&lt;a href=&quot;#github-部署&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;注册 &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; 账号部分不进行叙述，请参考网上教程。&lt;/p&gt;
&lt;p&gt;首先打开根目录下站点配置文件 &lt;code&gt;_config.yml&lt;/code&gt;，配置有关 &lt;code&gt;deploy&lt;/code&gt; 的部分：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## Deployment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### Docs: https://hexo.io/docs/one-command-deployment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;git&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;git@github.com:用户名/用户名.github.io.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;branch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;master&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;同时在博客根目录下终端执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-deployer-git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;安装部署插件。然后终端执行&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;即可部署到 GitHub 上。打开上面输入的对应的 &lt;code&gt;用户名.github.io&lt;/code&gt; 网站，如果能看到和 &lt;code&gt;hexo s&lt;/code&gt; 一样的网站界面，就说明部署成功。&lt;/p&gt;
&lt;h2&gt;更多配置&lt;a href=&quot;#更多配置&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这部分是我自己的博客配置，仅供参考。&lt;/p&gt;
&lt;h3&gt;短永久链接&lt;a href=&quot;#短永久链接&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Hexo 默认的永久地址格式是 &lt;code&gt;YYYY/MM/DD/title&lt;/code&gt;，如果标题为中文，那就是灾难性的链接长度，因此需要更换更短的永久链接。&lt;/p&gt;
&lt;p&gt;本站使用了 &lt;a href=&quot;https://github.com/ohroy/hexo-abbrlink&quot;&gt;&lt;code&gt;hexo-abbrlink&lt;/code&gt;&lt;/a&gt; 插件固定博文的地址。附上我自己在 &lt;code&gt;_config.yml&lt;/code&gt; 中的配置，仅供参考。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## abbrlink config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;abbrlink&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;alg&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crc32&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#support crc16(default) and crc32&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rep&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#support dec(default) and hex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;drafts&lt;/span&gt;&lt;span&gt;:&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;#(true)Process draft,(false)Do not process draft. false(default)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Generate categories from directory-tree&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# depth: the max_depth of directory-tree you want to generate, should &amp;gt; 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;auto_category&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&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;#true(default)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;depth&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;#3(default)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;over_write&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;auto_title&lt;/span&gt;&lt;span&gt;:&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;#enable auto title, it can auto fill the title by path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;auto_date&lt;/span&gt;&lt;span&gt;:&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;#enable auto date, it can auto fill the date by time today&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &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;false&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#enable force mode,in this mode, the plugin will ignore the cache, and calc the abbrlink for every post even it already had abbrlink. This only updates abbrlink rather than other front variables.&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;h3&gt;主题&lt;a href=&quot;#主题&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以在 Hexo 官网的&lt;a href=&quot;https://hexo.io/themes/&quot;&gt;主题列表&lt;/a&gt;里选择心仪的主题进行更换，并参考主题的配置说明进行配置。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;caution&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本博客已更换至 &lt;a href=&quot;https://solitude.js.org/zh/&quot;&gt;Solitude&lt;/a&gt; 主题 &lt;a href=&quot;https://github.com/HPCesia/astral-halo&quot;&gt;astral-halo&lt;/a&gt; 主题，以下 Fluid 主题相关内容仅供参考。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;本博客使用 &lt;a href=&quot;https://hexo.fluid-dev.com/&quot;&gt;Fluid&lt;/a&gt; 主题。&lt;/p&gt;
&lt;h4&gt;站名与图标&lt;a href=&quot;#站名与图标&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;按照 &lt;a href=&quot;https://hexo.fluid-dev.com/docs/start/&quot;&gt;Fluid 官方配置文档&lt;/a&gt;安装 Fluid 主题后，先在 &lt;code&gt;_config.yml&lt;/code&gt; 中修改主站名、描述和网站语言&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## Site&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HPCesia 的摆烂小屋&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;subtitle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;记录自己的摆烂日常与学习记录&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;author&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HPCesia&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zh-CN&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zh-TW&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;timezone&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Asia/Shanghai&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 这个默认是主机时区，不用管&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后可以顺便在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中修改一下网站图标。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 用于浏览器标签的图标&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## Icon for browser tab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;favicon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/img/fluid.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 用于苹果设备的图标&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## Icon for Apple touch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apple_touch_icon&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/img/fluid.png&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;这里建议将新图标放在 &lt;code&gt;./source&lt;/code&gt; 文件夹中，在生成过程中会与主题自带的文件进行合并。&lt;/p&gt;
&lt;h4&gt;字体&lt;a href=&quot;#字体&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;本博客使用&lt;a href=&quot;https://github.com/lxgw/LxgwWenKai&quot;&gt;霞鹜文楷&lt;/a&gt;字体，如需配置其他字体，请参考&lt;a href=&quot;https://hexo.fluid-dev.com/docs/guide/#%E5%85%A8%E5%B1%80%E5%AD%97%E4%BD%93&quot;&gt;主题配置指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中搜索 &lt;code&gt;font_family&lt;/code&gt; 即可找到字体配置&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;font&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font_size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16px&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font_family&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;letter_spacing&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.02em&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;code_font_size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;85%&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;font_family&lt;/code&gt; 后面添加 &lt;code&gt;&quot;LXGW WenKai Screen&quot;&lt;/code&gt;，并在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_css&lt;/code&gt; 下添加&lt;a href=&quot;https://github.com/CMBill/lxgw-wenkai-screen-web&quot;&gt;霞鹜文楷屏幕阅读版网络字体仓库&lt;/a&gt;中给出的链接：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_css&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://cdn.jsdelivr.net/npm/lxgw-wenkai-screen-web/style.css&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;再使用 &lt;code&gt;hexo clean&lt;/code&gt; + &lt;code&gt;hexo g&lt;/code&gt;，即可更换字体。&lt;/p&gt;
&lt;h4&gt;头图&lt;a href=&quot;#头图&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中搜索 &lt;code&gt;banner_img&lt;/code&gt; 即可找到各页面的头图配置。由于大陆访问 GitHub 的速度相当便秘，头图应该使用 &lt;code&gt;.webp&lt;/code&gt; 格式进行高度压缩，以在质量不太拉胯的前提下加快加载速度。&lt;/p&gt;
&lt;h4&gt;数学公式&lt;a href=&quot;#数学公式&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;本博客使用 mathjax 进行数学公式渲染，参考&lt;a href=&quot;https://hexo.fluid-dev.com/docs/guide/#latex-%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F&quot;&gt;主题配置指南&lt;/a&gt;进行了相应配置。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;如果你想用 KaTeX&lt;/div&gt;&lt;div&gt;&lt;p&gt;KaTeX 使用的 &lt;code&gt;hexo-markdown-it&lt;/code&gt; 渲染引擎会与 &lt;code&gt;tocbot&lt;/code&gt; 冲突，导致侧边栏一级目录跳转失效，经排查发现是一级标题对应的 &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; 没有 &lt;code&gt;id&lt;/code&gt; 导致的&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：在 &lt;code&gt;scripts&lt;/code&gt; 目录下新建 &lt;code&gt;hexo-markdown-it-bugfix.js&lt;/code&gt; 文件：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;scripts/hexo-markdown-it-bugfix.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;after_post_render&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;post&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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (post&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; uniqueIdStore &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&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;content &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;content&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&amp;lt;h1&amp;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;\/&lt;/span&gt;&lt;span&gt;h1&amp;gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;g&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; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;p1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; cleanId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; p1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;trim&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toLowerCase&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/\s&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;g&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;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&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;amp;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;g&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;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; uniqueId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cleanId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (cleanId &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;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uniqueId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;default&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (uniqueIdStore[cleanId]) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uniqueId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cleanId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;uniqueIdStore&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;cleanId&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uniqueIdStore[cleanId] &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uniqueIdStore[cleanId] &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&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;h1 id=&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;*?&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;(match)) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;h1 id=&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;uniqueId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;p1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/h1&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; match&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;效果是为没有添加 &lt;code&gt;id&lt;/code&gt; 的 &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; 添加正确的 &lt;code&gt;id&lt;/code&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4&gt;评论&lt;a href=&quot;#评论&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;本博客使用 &lt;a href=&quot;https://twikoo.js.org/&quot;&gt;Twikoo&lt;/a&gt; 评论系统，请参考&lt;a href=&quot;https://twikoo.js.org/quick-start.html&quot;&gt;配置指南&lt;/a&gt;进行配置。&lt;/p&gt;
&lt;p&gt;本博客使用的配置方法为配置指南中的 &lt;a href=&quot;https://www.mongodb.com/&quot;&gt;MongoDB Atlas&lt;/a&gt; + &lt;a href=&quot;https://huggingface.co&quot;&gt;Hugging Face&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;主题需要增加自定义 &lt;code&gt;.js&lt;/code&gt; 文件来让 Twikoo 评论也能渲染公式。在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中的 &lt;code&gt;custom_js&lt;/code&gt; 下添加&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_js&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;如果使用的是 mathjax 进行文章数学公式渲染，则还需要在 &lt;code&gt;custom_css&lt;/code&gt; 下添加&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;custom_css&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Twikoo Katex 数学公式渲染&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;再重新 &lt;code&gt;hexo clean&lt;/code&gt; + &lt;code&gt;hexo g&lt;/code&gt;，即可在评论区激活数学公式渲染。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;如果发现评论头像无法加载，请参考&lt;a href=&quot;https://twikoo.js.org/frontend.html#%E6%9B%B4%E6%8D%A2-cdn-%E9%95%9C%E5%83%8F&quot;&gt;Twikoo 前端部署&lt;/a&gt;更换 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 的 &lt;code&gt;static_prefix&lt;/code&gt; 配置项中关于 Twikoo 的静态资源链接。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h4&gt;添加 RSS 订阅&lt;a href=&quot;#添加-rss-订阅&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;安装 &lt;a href=&quot;https://github.com/hexojs/hexo-generator-feed&quot;&gt;&lt;code&gt;hexo-generator-feed&lt;/code&gt;&lt;/a&gt; 插件:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-generator-feed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;_config.fluid.yml&lt;/code&gt; 中追加配置项：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;_config.fluid.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## hexo-generator-feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;plugins&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo-generator-feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;feed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rss2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 类型 atom | rss2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&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;rss2.xml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 文件路径, 默认是 atom.xml | rss2.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;limit&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;# 展示文章的数量, 使用0或则false代表展示全部&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;hub&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&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;# 在RSS文件中是否包含内容, true | false, 默认不填为 false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;content_limit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;140&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 指定内容的长度作为摘要,仅仅在上面content设置为false和没有自定义的描述出现&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;content_limit_delim&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;/span&gt;&lt;span&gt;# 截取描述的分隔符, 以指定分隔符作为截取结束的标志.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;order_by&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;autodiscovery&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后随便找个位置，增加 &lt;code&gt;&amp;lt;a href=&quot;/rss2.xml&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&amp;gt;&amp;lt;i class=&quot;iconfont icon-rss&quot;&amp;gt;&amp;lt;/i&amp;gt;RSS&amp;lt;/a&amp;gt;&lt;/code&gt; 进行展示就行，我是放在页脚。&lt;/p&gt;
&lt;h4&gt;更多主题修改&lt;a href=&quot;#更多主题修改&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;参看我的&lt;/p&gt;
&lt;h3&gt;域名&lt;a href=&quot;#域名&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;如何挑选&lt;a href=&quot;#如何挑选&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;首先确定一个喜欢的域名，先去找个域名注册网站查一下该域名是否可注册，然后在&lt;a href=&quot;https://www.nazhumi.com/&quot;&gt;哪煮米&lt;/a&gt;上找到满足自身要求的便宜且靠谱的域名服务商。&lt;/p&gt;
&lt;p&gt;有国内备案需求最好选择国内的域名服务商，比如阿里云、腾讯云、华为云等；反之不需要备案，对个人隐私有需求，则选择能免费隐藏 whois 信息的国外域名服务商。&lt;/p&gt;
&lt;h4&gt;切换域名&lt;a href=&quot;#切换域名&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在域名服务商处增加一条 DNS 解析，将主域名或者某个子域名用 CNAME 解析到部署的 GitHub page 域名，然后在 &lt;code&gt;source&lt;/code&gt; 目录下新建 &lt;code&gt;CNAME&lt;/code&gt; 文件，文件内容是你刚刚添加解析的域名，比如在域名服务商那里添加了 &lt;code&gt;blog CNAME username.github.io&lt;/code&gt;，就应该在 &lt;code&gt;CNAME&lt;/code&gt; 文件中写上&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;blog.your.domain&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;接着修改一下 &lt;code&gt;.config.yml&lt;/code&gt; 与 &lt;code&gt;.config.主题.yml&lt;/code&gt; 中关于博客域名相关配置，最后&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&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;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;素质三连即可。&lt;/p&gt;
&lt;h4&gt;域名邮箱&lt;a href=&quot;#域名邮箱&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;有自己的域名了，自然也要有自己的域名邮箱。域名邮箱的可选项并不多，不介意实名可以直接使用阿里云的&lt;a href=&quot;https://common-buy.aliyun.com/?userCode=r3yteowb?spm=a2c6h.12873639.article-detail.8.85464bf1CFEevS&amp;amp;commodityCode=alimail&amp;amp;specCode=lx_18482&amp;amp;request=%7B%22ord_time%22:%223:Year%22,%22account_num%22:%225%22%7D#/buy&quot;&gt;免费企业邮箱&lt;/a&gt;。反之则可以考虑域名服务商提供的邮件服务，或者 &lt;a href=&quot;https://www.zoho.com/&quot;&gt;Zoho&lt;/a&gt;（可免费注册域名邮箱，但是免费的只有网页版，没有 IMAP/SMTP/POP3）上注册一个。当然偶尔也会有公司会提供免费收发的域名邮箱注册，但一般是小公司且有时效性，可以将评论系统的回复提醒邮箱放在上面，但主力邮箱不建议放在上面，或者设置转发到稳定的邮箱，并且邮件容易进垃圾箱。&lt;/p&gt;
&lt;p&gt;或者你还可以使用 Resend + CloudFlare 来制作丐版域名邮箱。首先你要在 CloudFlare 上托管你的域名，然后就可以利用 CloudFlare 的电子邮件路由功能将邮件转发到自己的已有邮箱中。随后在 Resend 中绑定你的域名，再申请个 API，就可以利用 Resend 来发邮件了。&lt;/p&gt;
&lt;h3&gt;将网站添加到搜索引擎&lt;a href=&quot;#将网站添加到搜索引擎&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;本节内容已整体迁移至&lt;a href=&quot;/posts/hexo-blog-search-engine-indexing/&quot;&gt;另一篇文章&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;优化博客性能&lt;a href=&quot;#优化博客性能&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4&gt;使用图床&lt;a href=&quot;#使用图床&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;使用图床来放置博客中的图片，能够减少博客部署的本体所占用的空间，并且当图床部署了 CDN 时，网站的加载速度也会极大提升。&lt;/p&gt;
&lt;p&gt;使用图床，首先应该下载 &lt;a href=&quot;https://picgo.github.io/PicGo-Doc/zh/&quot;&gt;PicGo&lt;/a&gt;。这是一个开源的图床上传软件，可以聚合多个图床，预览图片，结合插件还可以做到上传时压缩图片。&lt;/p&gt;
&lt;h5&gt;非自建图床&lt;a href=&quot;#非自建图床&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;这部分没什么好说的，找一个信得过的图床，检查一下是否有 PicGo 插件支持该图床，用就完事了。个人推荐杜老师的&lt;a href=&quot;https://7bu.top/&quot;&gt;去不图床&lt;/a&gt;，这也是我目前在使用的图床。免费的可以考虑老牌免费图床 &lt;a href=&quot;https://sm.ms/&quot;&gt;sm.ms&lt;/a&gt;。&lt;/p&gt;
&lt;h5&gt;GitHub + jsDelivr CDN 图床&lt;a href=&quot;#github--jsdelivr-cdn-图床&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;该方法属于滥用 GitHub 仓库，既不道德，又有概率会封掉仓库，有条件用其他图床就不建议使用。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;新建一个公开仓库，然后在 PicGo 中选择 GitHub 图床进行配置：&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其中 Token 需要访问 &lt;a href=&quot;https://github.com/settings/tokens&quot;&gt;Personal Access Tokens (Classic)&lt;/a&gt; 生成，注意 token 只有生成的时候能看到，之后就不能再次打开了，因此需要注意妥善保存。&lt;/p&gt;
&lt;p&gt;自定义域名部分则是选用了 jsDelivr CDN 进行，可以加快国内大陆地区的访问速度。&lt;/p&gt;
&lt;h5&gt;CloudFlare R2 存储自建图床&lt;a href=&quot;#cloudflare-r2-存储自建图床&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;这种方式需要用到绑定了银行卡的 PayPal 账户。仅给出参考链接。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sspai.com/post/90170&quot;&gt;从零开始搭建你的免费图床系统 （Cloudflare R2 + WebP Cloud + PicGo） - 少数派&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;使用 gulp 压缩网站内容&lt;a href=&quot;#使用-gulp-压缩网站内容&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;此段内容参考&lt;a href=&quot;https://blog.inkuang.com/2021/405/&quot;&gt;使用 gulp 压缩 Hexo 博客文件（兼容 ES6 标准） | Ming’s Blog&lt;/a&gt;编写。&lt;/p&gt;
&lt;h5&gt;安装插件&lt;a href=&quot;#安装插件&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;在博客根目录下打开终端，输入：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&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;gulp-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#全局安装 gulp 指令集&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#安装 gulp 插件&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;安装 gulp 插件。随后输入&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gulp-clean-css&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gulp-terser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gulp-html-minifier-terser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;安装附属插件。&lt;/p&gt;
&lt;h5&gt;配置 gulp&lt;a href=&quot;#配置-gulp&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;在博客根目录下新建 &lt;code&gt;gulpfile.js&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;gulpfile.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; gulp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gulp&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; cleancss &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gulp-clean-css&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; terser &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gulp-terser&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; htmlmin &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gulp-html-minifier-terser&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 压缩 public 目录下的 css 文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 可接受参数的文档：https://github.com/jakubpawlowicz/clean-css#constructor-options&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;task&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;minify-css&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;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; gulp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;&apos;./public/**/*.css&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;// 处理public目录下所有的css文件，下同&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cleancss&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;dest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;./public&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 压缩public目录下的js文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 可接受参数的文档：https://github.com/terser/terser?tab=readme-ov-file#minify-options-structure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;task&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;minify-js&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;=&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;&apos;./public/**/*.js&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;!./public/**/*.min.js&apos;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;terser&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;semicolons&lt;/span&gt;&lt;span&gt;:&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;// 使用换行而非分号压缩 JS 脚本，对浏览器压缩性能无影响，但是方便调试&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;dest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;./public&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 压缩public目录下的html文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 可接受参数的文档：https://github.com/terser/html-minifier-terser#options-quick-reference&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;task&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;minify-html&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;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; gulp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &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;&apos;./public/**/*.html&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;htmlmin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;removeComments&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;caseSensitive&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;removeEmptyAttributes&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;removeRedundantAttributes&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;collapseBooleanAttributes&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preventAttributesEscaping&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;collapseWhitespace&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;conservativeCollapse&lt;/span&gt;&lt;span&gt;:&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;// 始终折叠为 1 个空格（永远不要完全移除它）。必须与 collapseWhitespace=true 一起使用。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;noNewlinesBeforeTagClose&lt;/span&gt;&lt;span&gt;:&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minifyCSS&lt;/span&gt;&lt;span&gt;:&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;// 压缩 HTML 中的 CSS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minifyJS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;// 调用 terser 压缩 HTML 中的 JS，配置同 terser&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;semicolons&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;quote_style&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;// 始终使用单引号包裹字符串，可以避免类似 `onclick=&quot;foo(&apos;bar&apos;)&quot;` 这类属性出现 bug&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minifyURLs&lt;/span&gt;&lt;span&gt;:&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;// 压缩 HTML 中的链接&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt;(gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;dest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;./public&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 默认任务，不带任务名运行gulp时执行的任务&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;task&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;default&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; gulp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parallel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;minify-css&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;minify-js&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;minify-html&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;此时在运行 &lt;code&gt;hexo g&lt;/code&gt; 后手动运行 &lt;code&gt;gulp&lt;/code&gt; 即可压缩文件。&lt;/p&gt;
&lt;h5&gt;自动化配置&lt;a href=&quot;#自动化配置&quot;&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;在博客根目录下找到 &lt;code&gt;package.json&lt;/code&gt;，在 &lt;code&gt;scripts&lt;/code&gt; 键下添加新脚本：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;package.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;postbuild&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;&quot;gulp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;随后在 &lt;code&gt;scripts&lt;/code&gt; 目录下新建 &lt;code&gt;generator.js&lt;/code&gt;，添加以下内容：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;scripts/generator.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;generator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;postbuild&apos;&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; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&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; exec &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;child_process&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;npm run postbuild&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;err&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stderr&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;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (err) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&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;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Error: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;stderr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&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;`Output: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;
&lt;p&gt;这样在运行 &lt;code&gt;hexo g&lt;/code&gt; 后就会自动运行 &lt;code&gt;gulp&lt;/code&gt; 对博客进行压缩。&lt;/p&gt;  &lt;/article&gt; </content:encoded></item><item><title>向前欧拉、向后欧拉、跃点（蛙跳）、梯形四种有限差分方法的准确性（收敛性）、稳定性数学推导</title><link>https://blog.hpcesia.com/posts/derivations-of-some-finite-difference-methods/</link><guid isPermaLink="true">https://blog.hpcesia.com/posts/derivations-of-some-finite-difference-methods/</guid><description>对向前欧拉、向后欧拉、跃点(Leap frog)、梯形四种有限差分格式的准确性、稳定性进行数学推导，并给出数值计算结果。</description><pubDate>Mon, 19 Aug 2024 12:55:30 GMT</pubDate><content:encoded>&lt;article&gt; &lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;note&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;本文由以前的课程论文使用 &lt;a href=&quot;https://pandoc.org/&quot;&gt;pandoc&lt;/a&gt; 转换到 markdown 博客，原文为本人厦门大学数学系课程《微分方程数值解》的课程论文，参考时请注意。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2&gt;简介&lt;a href=&quot;#简介&quot;&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;ul&gt;
&lt;li&gt;向前欧拉格式&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;向后欧拉格式&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;跃点(Leap frog)格式&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;梯形格式&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;接下来，对以上四种有限差分格式，我们将进行其准确性(Accuracy)与稳定性(Stability)的数学推导。&lt;/p&gt;
&lt;h2&gt;准确性推导&lt;a href=&quot;#准确性推导&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先定义局部截断误差(Local Truncation Error) ，其定义为：
其他点处的精确解在  处按照差分格式计算得到的结果与  处的精确解的差值。&lt;/p&gt;
&lt;blockquote&gt;

&lt;div&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;上述局部截断误差与通常定义的局部截断误差相差一个 ，参考时请注意。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h3&gt;向前欧拉格式&lt;a href=&quot;#向前欧拉格式&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;向前欧拉格式的局部截断误差  可表示为如下等式&lt;/p&gt;

&lt;p&gt;对  进行 Taylor 展开有&lt;/p&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;/a&gt;&lt;/h3&gt;
&lt;p&gt;向后欧拉格式的局部截断误差  可表示为如下等式&lt;/p&gt;

&lt;p&gt;对  进行 Taylor 展开有&lt;/p&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;/a&gt;&lt;/h3&gt;
&lt;p&gt;跃点格式的局部截断误差  可表示为如下等式&lt;/p&gt;

&lt;p&gt;对  和  进行 Taylor 展开有&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;h3&gt;梯形格式&lt;a href=&quot;#梯形格式&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;跃点格式的局部截断误差  可表示为如下等式&lt;/p&gt;

&lt;p&gt;对  和  进行 Taylor 展开有&lt;/p&gt;


&lt;p&gt;于是有&lt;/p&gt;

&lt;p&gt;误差  可表示为如下形式：&lt;/p&gt;

&lt;p&gt;令 ，假定 ，对误差  有如下估计：&lt;/p&gt;


&lt;h2&gt;稳定性推导&lt;a href=&quot;#稳定性推导&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;考虑模型问题&lt;/p&gt;

&lt;p&gt;其中  为常数。定义  为舍入误差，. 我们称差分格式的绝对稳定区域(Absolute Stability Region)为复平面上所有使差分格式的解稳定的  的集合。&lt;/p&gt;
&lt;h3&gt;向前欧拉格式&lt;a href=&quot;#向前欧拉格式-1&quot;&gt;#&lt;/a&gt;&lt;/h3&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;h3&gt;向后欧拉格式&lt;a href=&quot;#向后欧拉格式-1&quot;&gt;#&lt;/a&gt;&lt;/h3&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;h3&gt;跃点格式&lt;a href=&quot;#跃点格式-1&quot;&gt;#&lt;/a&gt;&lt;/h3&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;h3&gt;梯形格式&lt;a href=&quot;#梯形格式-1&quot;&gt;#&lt;/a&gt;&lt;/h3&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;h2&gt;数值试验&lt;a href=&quot;#数值试验&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;四种有限差分格式的MATLAB代码&lt;/div&gt;&lt;div&gt;&lt;p&gt;向前欧拉格式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&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;result&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;forward_euler&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;step&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;u0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x = linspace(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, T, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h = T &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; step;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result = zeros(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) = u0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k = &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;:step &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(k) = result(k &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; h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; f(x(k &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;), result(k &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;向后欧拉格式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&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;result&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;backward_euler&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;step&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;u0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x = linspace(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, T, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h = T &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; step;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result = zeros(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) = u0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k = &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;:step &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_func = @(uk) result(k &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; h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; f(x(k), uk) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; uk;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(k) = fzero(temp_func, result(k &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;跃点格式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&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;result&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;leap_frog&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;step&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;u0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;u1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x = linspace(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, T, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h = T &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; step;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result = zeros(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) = u0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;) = u1;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k = &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;:step &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(k) = result(k &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;2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; f(x(k &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;), result(k &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;p&gt;梯形格式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&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;result&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;trapezoidal&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;step&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;u0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x = linspace(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, T, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h = T &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; step;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result = zeros(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, step &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) = u0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k = &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;:step &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_func = @(uk) result(k &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; uk &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; (f(x(k), uk) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; f(x(k &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;), result(k &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;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result(k) = fzero(temp_func, result(k &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&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;/figure&gt;&lt;/div&gt;&lt;/div&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;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;/article&gt; </content:encoded></item></channel></rss>