<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hugo on Kuqilin&#39;s Blog</title>
    <link>https://www.kuqilin.top/tags/hugo/</link>
    <description>Recent content from Kuqilin&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>kuqilin@outlook.com (Kuqilin)</managingEditor>
    <webMaster>kuqilin@outlook.com (Kuqilin)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sun, 16 Aug 2026 11:43:32 +0800</lastBuildDate>
    
    
    <atom:link href="https://www.kuqilin.top/tags/hugo/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
      
    

    <item>
      <title>望文生义 · 成语辨析小测</title>
      <link>https://www.kuqilin.top/post/wang-wen-sheng-yi-1/</link>
      <pubDate>Sun, 16 Aug 2026 11:22:15 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/wang-wen-sheng-yi-1/</guid>
      <description>
        <![CDATA[<h1>望文生义 · 成语辨析小测</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          <p>成语最怕「望文生义」。小测随机抽一个成语，从「原意」与常见的「易错点」中二选一——小心，错误选项往往就是你第一反应想选的那个。题库共 315 条，答对/答错即时反馈，换题无刷新。</p>
<p>独立小测页面可以随时打开：</p>
<a href="https://kuqilin.github.io/wang-wen-sheng-yi/quiz.html" title="望文生义 · 成语辨析小测" target="_blank">望文生义 · 成语辨析小测</a>
<h2 id="内嵌版直接在文章里玩">
<a class="header-anchor" href="#%e5%86%85%e5%b5%8c%e7%89%88%e7%9b%b4%e6%8e%a5%e5%9c%a8%e6%96%87%e7%ab%a0%e9%87%8c%e7%8e%a9"></a>
内嵌版：直接在文章里玩
</h2><p>以下小测直接嵌在正文里，和博客共用视觉与深浅色模式，手机上也能自适应宽度正常玩。</p>
<style>
.wq-quiz { max-width: 560px; margin: 24px auto; text-align: center; padding: 28px 24px 24px; border: 1px solid #99c2cc; border-radius: 14px; background: #fff; box-shadow: 0 10px 24px rgba(25,118,140,.10); font-family: inherit; color: #24292e; }
.wq-quiz .wq-badge { font-size: 13px; letter-spacing: 2px; color: #408d9f; margin-bottom: 14px; }
.wq-quiz .wq-idiom { font-size: 44px; font-weight: 700; color: #24292e; margin-bottom: 4px; line-height: 1.3; }
.wq-quiz .wq-question { font-size: 15px; color: #7d7d7d; margin-bottom: 22px; }
.wq-quiz .wq-options { display: flex; flex-direction: column; gap: 12px; }
.wq-quiz button.wq-opt { display: block; width: 100%; font-family: inherit; font-size: 16px; line-height: 1.7; text-align: left; padding: 12px 16px; border: 2px solid #99c2cc; border-radius: 10px; background: #fff; color: #24292e; cursor: pointer; transition: transform .08s, border-color .15s, background .15s; box-shadow: none; }
.wq-quiz button.wq-opt:hover { border-color: #408d9f; background: #eaf2f5; transform: translateY(-1px); }
.wq-quiz button.wq-opt:disabled { cursor: default; transform: none; }
.wq-quiz button.wq-opt.wq-correct { border-color: #22863a; background: #f0fff4; color: #22863a; }
.wq-quiz button.wq-opt.wq-wrong { border-color: #d73a49; background: #ffeef0; color: #d73a49; }
.wq-quiz button.wq-opt.wq-dim { opacity: .55; }
.wq-quiz .wq-feedback { margin-top: 18px; font-size: 15px; min-height: 24px; color: #7d7d7d; }
.wq-quiz .wq-feedback.wq-ok { color: #22863a; }
.wq-quiz .wq-feedback.wq-bad { color: #d73a49; }
.wq-quiz button.wq-next { margin-top: 16px; font-family: inherit; font-size: 16px; padding: 10px 32px; border: none; border-radius: 10px; background: #19768c; color: #fff; cursor: pointer; box-shadow: 0 4px 12px rgba(25,118,140,.35); }
.wq-quiz button.wq-next:hover { background: #00677f; }
.wq-quiz button.wq-next[hidden] { display: none; }
.wq-quiz .wq-count { margin-top: 18px; font-size: 12px; color: #73abb9; }
@keyframes wqFadeUp { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.wq-quiz button.wq-opt { animation: wqFadeUp .22s ease; }
.wq-quiz .wq-idiom.wq-flash { animation: wqFadeUp .3s ease; }
@keyframes wqPop { 0% { transform: scale(.5); opacity: 0; } 60% { transform: scale(1.2); } 100% { transform: scale(1); opacity: 1; } }
.wq-quiz .wq-feedback.wq-ok, .wq-quiz .wq-feedback.wq-bad { animation: wqPop .3s ease; }
/* 深色模式：跟随主题 html[data-theme="dark"] */
html[data-theme="dark"] .wq-quiz { background: #272b30; border-color: #3e7f92; color: #c9d1d9; box-shadow: 0 10px 24px rgba(0,0,0,.35); }
html[data-theme="dark"] .wq-quiz .wq-badge { color: #6db7c7; }
html[data-theme="dark"] .wq-quiz .wq-idiom { color: #e6edf3; }
html[data-theme="dark"] .wq-quiz .wq-question { color: #8b949e; }
html[data-theme="dark"] .wq-quiz button.wq-opt { border-color: #3e7f92; background: #272b30; color: #c9d1d9; }
html[data-theme="dark"] .wq-quiz button.wq-opt:hover { border-color: #6db7c7; background: rgba(64,141,159,.18); }
html[data-theme="dark"] .wq-quiz button.wq-opt.wq-correct { border-color: #7ee787; background: rgba(46,160,67,.18); color: #7ee787; }
html[data-theme="dark"] .wq-quiz button.wq-opt.wq-wrong { border-color: #ff7b72; background: rgba(248,81,73,.16); color: #ff7b72; }
html[data-theme="dark"] .wq-quiz .wq-feedback { color: #8b949e; }
html[data-theme="dark"] .wq-quiz .wq-feedback.wq-ok { color: #7ee787; }
html[data-theme="dark"] .wq-quiz .wq-feedback.wq-bad { color: #ff7b72; }
html[data-theme="dark"] .wq-quiz button.wq-next { background: #2b93ab; box-shadow: 0 4px 12px rgba(0,0,0,.35); }
html[data-theme="dark"] .wq-quiz button.wq-next:hover { background: #19768c; }
html[data-theme="dark"] .wq-quiz .wq-count { color: #6db7c7; }
</style>
<div class="wq-quiz">
<div class="wq-badge">🧐 望文生义 · 成语释义二选一</div>
<div class="wq-idiom" id="wq-idiom"></div>
<div class="wq-question">下列选项中，哪一个是这个成语的正确释义？</div>
<div class="wq-options" id="wq-options"></div>
<div class="wq-feedback" id="wq-feedback"></div>
<button class="wq-next" id="wq-next" hidden>下一题 ➡️</button>
<div class="wq-count" id="wq-count"></div>
</div>
<script>
(function () {
  if (!document.getElementById("wq-idiom")) return;
  const idiomEl = document.getElementById("wq-idiom");
  const box = document.getElementById("wq-options");
  const feedback = document.getElementById("wq-feedback");
  const next = document.getElementById("wq-next");
  const countEl = document.getElementById("wq-count");

  function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
  }

  // 连续两次不抽同一题
  let last = null;
  function pick(DATA) {
    let e;
    do {
      e = DATA[Math.floor(Math.random() * DATA.length)];
    } while (e === last && DATA.length > 1);
    last = e;
    return e;
  }

  const goodEmojis = ["👍", "🎉", "🌟", "💯", "🏆", "👏"];
  const badEmojis = ["😅", "🤔", "💡", "🙈"];
  function rand(a) { return a[Math.floor(Math.random() * a.length)]; }

  fetch("/wang-wen-sheng-yi/wang-wen-sheng-yi.json", { cache: "no-store" })
    .then(r => { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
    .then(data => {
      const usable = data.filter(
        e => e["成语"] && e["原意"] && e["易错点"] && e["原意"] !== e["易错点"]
      );
      if (!usable.length) {
        idiomEl.textContent = "📭 题库为空";
        countEl.textContent = "JSON 里没有可出的题（每条需含 成语/原意/易错点，且原意不等于易错点）。";
        return;
      }
      countEl.textContent = "📚 题库共 " + data.length + " 条，可出题 " + usable.length + " 条";

      function renderQuestion() {
        const entry = pick(usable);
        idiomEl.textContent = entry["成语"];
        idiomEl.classList.remove("wq-flash");
        void idiomEl.offsetWidth;
        idiomEl.classList.add("wq-flash");

        box.innerHTML = "";
        feedback.className = "wq-feedback";
        feedback.textContent = "";
        next.hidden = true;

        const options = shuffle([
          { text: entry["原意"], correct: true },
          { text: entry["易错点"], correct: false },
        ]);

        let answered = false;
        for (const opt of options) {
          const btn = document.createElement("button");
          btn.className = "wq-opt";
          btn.textContent = opt.text;
          btn.dataset.correct = opt.correct ? "true" : "false";
          btn.addEventListener("click", () => {
            if (answered) return;
            answered = true;
            for (const b of box.children) b.disabled = true;
            for (const b of box.children) {
              if (b.dataset.correct === "true") b.classList.add("wq-correct");
            }
            if (opt.correct) {
              feedback.className = "wq-feedback wq-ok";
              feedback.innerHTML = rand(goodEmojis) + " 回答正确！<br>🔎参见原书编号 " + entry["编号"];
            } else {
              btn.classList.add("wq-wrong");
              for (const b of box.children) {
                if (b !== btn && b.dataset.correct !== "true") b.classList.add("wq-dim");
              }
              feedback.className = "wq-feedback wq-bad";
              feedback.innerHTML = rand(badEmojis) + " 回答错误，选错了释义。<br>🔎参见原书编号 " + entry["编号"];
            }
            next.hidden = false;
          });
          box.appendChild(btn);
        }
      }

      next.addEventListener("click", renderQuestion);
      renderQuestion();
    })
    .catch(err => {
      idiomEl.textContent = "❌ 题库加载失败";
      countEl.textContent = "错误：" + err.message;
    });
})();
</script>
<p>内嵌版直接复用独立页面同款逻辑（随机抽题、防连抽、即时判题、前端换题），数据从站点根目录的 <code>/wang-wen-sheng-yi/wang-wen-sheng-yi.json</code> 实时加载，改题库后无需清缓存。</p>
<h2 id="内嵌网页版独立页面嵌入">
<a class="header-anchor" href="#%e5%86%85%e5%b5%8c%e7%bd%91%e9%a1%b5%e7%89%88%e7%8b%ac%e7%ab%8b%e9%a1%b5%e9%9d%a2%e5%b5%8c%e5%85%a5"></a>
内嵌网页版：独立页面嵌入
</h2>
  <blockquote class="alert-blockquote important">
    <p class="alert-heading">
      Important
    </p>
    <p><p><strong>这个版本不适合手机等小屏幕。</strong> 独立页面按桌面卡片设计（卡片固定 560px 宽、iframe 固定 600px 高，还有固定在角落的按钮），在小屏上会被挤压甚至溢出，体验很差。手机访问请用上面的<strong>内嵌版</strong>（自适应宽度），或直接打开外链的独立小测页面。</p></p>
  </blockquote>

<p>把独立的页面以 iframe 形式嵌进来，外观是「页面套页面」，自带整页背景色与居中卡片，左上角有「首页」按钮、右上角有「关于」按钮。</p>
<p><strong>释义二选一：</strong></p>
<iframe src="/wang-wen-sheng-yi/quiz.html" loading="lazy" title="望文生义成语小测" style="width:100%;height:600px;border:1px solid #99c2cc;border-radius:12px;background:#fff;"></iframe>

        
        <hr><p>本文2026-08-16首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-08-16</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>记录</category>
      
    </item>
    
      
    

    <item>
      <title>望文生义 · 成语用法辨析</title>
      <link>https://www.kuqilin.top/post/wang-wen-sheng-yi-2/</link>
      <pubDate>Sun, 16 Aug 2026 11:43:32 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/wang-wen-sheng-yi-2/</guid>
      <description>
        <![CDATA[<h1>望文生义 · 成语用法辨析</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          <p>释义认得，实战才是真考验。小测随机抽一个成语，给你两句含成语的句子，判断哪句用得<strong>正确</strong>——答完还会给出原意与易错点解析，并标注原书编号。答对/答错即时反馈，换题无刷新。</p>
<p>独立小测页面可以随时打开：</p>
<a href="https://kuqilin.github.io/wang-wen-sheng-yi/quiz1.html" title="成语用法辨析 · 二选一" target="_blank">成语用法辨析 · 二选一</a>
<h2 id="内嵌版直接在文章里玩">
<a class="header-anchor" href="#%e5%86%85%e5%b5%8c%e7%89%88%e7%9b%b4%e6%8e%a5%e5%9c%a8%e6%96%87%e7%ab%a0%e9%87%8c%e7%8e%a9"></a>
内嵌版：直接在文章里玩
</h2><p>以下小测直接嵌在正文里，和博客共用视觉与深浅色模式，手机上也能自适应宽度正常玩。</p>
<style>
@keyframes wqFadeUp { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes wqPop { 0% { transform: scale(.5); opacity: 0; } 60% { transform: scale(1.2); } 100% { transform: scale(1); opacity: 1; } }
.wq2-quiz { max-width: 560px; margin: 24px auto; text-align: center; padding: 28px 24px 24px; border: 1px solid #99c2cc; border-radius: 14px; background: #fff; box-shadow: 0 10px 24px rgba(25,118,140,.10); font-family: inherit; color: #24292e; }
.wq2-quiz .wq2-badge { font-size: 13px; letter-spacing: 2px; color: #408d9f; margin-bottom: 14px; }
.wq2-quiz .wq2-idiom { font-size: 44px; font-weight: 700; color: #24292e; margin-bottom: 4px; line-height: 1.3; }
.wq2-quiz .wq2-question { font-size: 15px; color: #7d7d7d; margin-bottom: 22px; }
.wq2-quiz .wq2-options { display: flex; flex-direction: column; gap: 12px; }
.wq2-quiz button.wq2-opt { display: block; width: 100%; font-family: inherit; font-size: 15px; line-height: 1.8; text-align: left; padding: 12px 16px; border: 2px solid #99c2cc; border-radius: 10px; background: #fff; color: #24292e; cursor: pointer; transition: transform .08s, border-color .15s, background .15s; box-shadow: none; }
.wq2-quiz button.wq2-opt:hover { border-color: #408d9f; background: #eaf2f5; transform: translateY(-1px); }
.wq2-quiz button.wq2-opt:disabled { cursor: default; transform: none; }
.wq2-quiz button.wq2-opt.wq2-correct { border-color: #22863a; background: #f0fff4; color: #22863a; }
.wq2-quiz button.wq2-opt.wq2-wrong { border-color: #d73a49; background: #ffeef0; color: #d73a49; }
.wq2-quiz button.wq2-opt.wq2-dim { opacity: .55; }
.wq2-quiz .wq2-feedback { margin-top: 18px; font-size: 15px; min-height: 24px; line-height: 1.8; color: #7d7d7d; }
.wq2-quiz .wq2-feedback.wq2-ok { color: #22863a; }
.wq2-quiz .wq2-feedback.wq2-bad { color: #d73a49; }
.wq2-quiz button.wq2-next { margin-top: 16px; font-family: inherit; font-size: 16px; padding: 10px 32px; border: none; border-radius: 10px; background: #19768c; color: #fff; cursor: pointer; box-shadow: 0 4px 12px rgba(25,118,140,.35); }
.wq2-quiz button.wq2-next:hover { background: #00677f; }
.wq2-quiz button.wq2-next[hidden] { display: none; }
.wq2-quiz .wq2-count { margin-top: 18px; font-size: 12px; color: #73abb9; }
.wq2-quiz .wq2-idiom.wq2-flash { animation: wqFadeUp .3s ease; }
.wq2-quiz button.wq2-opt { animation: wqFadeUp .22s ease; }
.wq2-quiz .wq2-feedback.wq2-ok, .wq2-quiz .wq2-feedback.wq2-bad { animation: wqPop .3s ease; }
/* 深色模式：跟随主题 html[data-theme="dark"] */
html[data-theme="dark"] .wq2-quiz { background: #272b30; border-color: #3e7f92; color: #c9d1d9; box-shadow: 0 10px 24px rgba(0,0,0,.35); }
html[data-theme="dark"] .wq2-quiz .wq2-badge { color: #6db7c7; }
html[data-theme="dark"] .wq2-quiz .wq2-idiom { color: #e6edf3; }
html[data-theme="dark"] .wq2-quiz .wq2-question { color: #8b949e; }
html[data-theme="dark"] .wq2-quiz button.wq2-opt { border-color: #3e7f92; background: #272b30; color: #c9d1d9; }
html[data-theme="dark"] .wq2-quiz button.wq2-opt:hover { border-color: #6db7c7; background: rgba(64,141,159,.18); }
html[data-theme="dark"] .wq2-quiz button.wq2-opt.wq2-correct { border-color: #7ee787; background: rgba(46,160,67,.18); color: #7ee787; }
html[data-theme="dark"] .wq2-quiz button.wq2-opt.wq2-wrong { border-color: #ff7b72; background: rgba(248,81,73,.16); color: #ff7b72; }
html[data-theme="dark"] .wq2-quiz .wq2-feedback { color: #8b949e; }
html[data-theme="dark"] .wq2-quiz .wq2-feedback.wq2-ok { color: #7ee787; }
html[data-theme="dark"] .wq2-quiz .wq2-feedback.wq2-bad { color: #ff7b72; }
html[data-theme="dark"] .wq2-quiz button.wq2-next { background: #2b93ab; box-shadow: 0 4px 12px rgba(0,0,0,.35); }
html[data-theme="dark"] .wq2-quiz button.wq2-next:hover { background: #19768c; }
html[data-theme="dark"] .wq2-quiz .wq2-count { color: #6db7c7; }
</style>
<div class="wq2-quiz">
<div class="wq2-badge">📝 成语用法辨析 · 二选一</div>
<div class="wq2-idiom" id="wq2-idiom"></div>
<div class="wq2-question">下面哪个句子中，这个成语使用得<strong>正确</strong>？</div>
<div class="wq2-options" id="wq2-options"></div>
<div class="wq2-feedback" id="wq2-feedback"></div>
<button class="wq2-next" id="wq2-next" hidden>下一题 ➡️</button>
<div class="wq2-count" id="wq2-count"></div>
</div>
<script>
(async function () {
  if (!document.getElementById("wq2-idiom")) return;
  const idiomEl = document.getElementById("wq2-idiom");
  const box = document.getElementById("wq2-options");
  const feedback = document.getElementById("wq2-feedback");
  const next = document.getElementById("wq2-next");
  const countEl = document.getElementById("wq2-count");

  function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
  }

  // 连续两次不抽同一题
  let last = null;
  function pick(DATA) {
    let e;
    do {
      e = DATA[Math.floor(Math.random() * DATA.length)];
    } while (e === last && DATA.length > 1);
    last = e;
    return e;
  }

  const goodEmojis = ["👍", "🎉", "🌟", "💯", "🏆", "👏"];
  const badEmojis = ["😅", "🤔", "💡", "🙈"];
  function rand(a) { return a[Math.floor(Math.random() * a.length)]; }

  // 1. 解析数据（原意/易错点），加载失败不影响出题
  let legacyMap = {};
  try {
    const respLegacy = await fetch("/wang-wen-sheng-yi/wang-wen-sheng-yi.json", { cache: "no-store" });
    if (respLegacy.ok) {
      const legacyData = await respLegacy.json();
      legacyData.forEach(item => {
        if (item["成语"]) {
          legacyMap[item["成语"]] = {
            原意: item["原意"] || "",
            易错点: item["易错点"] || ""
          };
        }
      });
    }
  } catch (e) {
    // 忽略：没有解析也能出题
  }

  // 2. 题目数据
  let data;
  try {
    const resp = await fetch("/wang-wen-sheng-yi/wang-wen-sheng-yi-quiz.json", { cache: "no-store" });
    if (!resp.ok) throw new Error("HTTP " + resp.status);
    data = await resp.json();
  } catch (err) {
    idiomEl.textContent = "❌ 题库加载失败";
    countEl.textContent = "错误：" + err.message;
    return;
  }

  const usable = data.filter(
    e => e["编号"] && e["成语"] && e["正确"] && e["错误"] && e["正确"] !== e["错误"]
  );
  if (!usable.length) {
    idiomEl.textContent = "📭 题库为空";
    countEl.textContent = "JSON 里没有可出的题（每条需含 编号/成语/正确/错误，且正确不等于错误）。";
    return;
  }
  countEl.textContent = "📚 题库共 " + data.length + " 条，可出题 " + usable.length + " 条";

  function renderQuestion() {
    const entry = pick(usable);
    idiomEl.textContent = entry["成语"];
    idiomEl.classList.remove("wq2-flash");
    void idiomEl.offsetWidth;
    idiomEl.classList.add("wq2-flash");

    box.innerHTML = "";
    feedback.className = "wq2-feedback";
    feedback.textContent = "";
    next.hidden = true;

    const options = shuffle([
      { text: entry["正确"], correct: true },
      { text: entry["错误"], correct: false },
    ]);

    const legacy = legacyMap[entry["成语"]] || {};
    const 原意 = legacy["原意"] || "";
    const 易错点 = legacy["易错点"] || "";
    const 编号 = entry["编号"] || "";

    let answered = false;
    for (const opt of options) {
      const btn = document.createElement("button");
      btn.className = "wq2-opt";
      btn.innerHTML = opt.text;
      btn.dataset.correct = opt.correct ? "true" : "false";
      btn.addEventListener("click", () => {
        if (answered) return;
        answered = true;
        for (const b of box.children) b.disabled = true;
        for (const b of box.children) {
          if (b.dataset.correct === "true") b.classList.add("wq2-correct");
        }
        let analysis = "";
        if (原意 || 易错点) {
          analysis = "<br>📝 解析：" + (原意 || "（无原意）") + "<br>⚠️ 易错点：" + (易错点 || "（无易错点）");
        }
        analysis += "<br>🔎 参见原书编号 " + 编号;
        if (opt.correct) {
          feedback.className = "wq2-feedback wq2-ok";
          feedback.innerHTML = rand(goodEmojis) + " 回答正确！" + analysis;
        } else {
          btn.classList.add("wq2-wrong");
          for (const b of box.children) {
            if (b !== btn && b.dataset.correct !== "true") b.classList.add("wq2-dim");
          }
          feedback.className = "wq2-feedback wq2-bad";
          feedback.innerHTML = rand(badEmojis) + " 回答错误，选错了用法。" + analysis;
        }
        next.hidden = false;
      });
      box.appendChild(btn);
    }
  }

  next.addEventListener("click", renderQuestion);
  renderQuestion();
})();
</script>
<p>本小测与《望文生义 · 成语辨析小测》共用解析数据（原意/易错点），答对答错都会给出解析与原书编号，支持深浅色模式。</p>
<h2 id="内嵌网页版独立页面嵌入">
<a class="header-anchor" href="#%e5%86%85%e5%b5%8c%e7%bd%91%e9%a1%b5%e7%89%88%e7%8b%ac%e7%ab%8b%e9%a1%b5%e9%9d%a2%e5%b5%8c%e5%85%a5"></a>
内嵌网页版：独立页面嵌入
</h2>
  <blockquote class="alert-blockquote important">
    <p class="alert-heading">
      Important
    </p>
    <p><p><strong>这个版本不适合手机等小屏幕。</strong> 独立页面按桌面卡片设计（卡片固定 560px 宽、iframe 固定 600px 高，还有固定在角落的按钮），在小屏上会被挤压甚至溢出，体验很差。手机访问请用上面的<strong>内嵌版</strong>（自适应宽度），或直接打开外链的独立小测页面。</p></p>
  </blockquote>

<p>把独立的 <code>quiz1.html</code> 页面以 iframe 形式嵌进来，外观是「页面套页面」，自带整页背景色与居中卡片，左上角有「首页」按钮、右上角有「关于」按钮：</p>
<iframe src="/wang-wen-sheng-yi/quiz1.html" loading="lazy" title="成语用法辨析小测" style="width:100%;height:600px;border:1px solid #99c2cc;border-radius:12px;background:#fff;"></iframe>

        
        <hr><p>本文2026-08-16首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-08-16</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>记录</category>
      
    </item>
    
      
    

    <item>
      <title>一些有用的东西</title>
      <link>https://www.kuqilin.top/post/yi-xie-you-yong-de-dong-xi/</link>
      <pubDate>Sat, 15 Aug 2026 23:50:24 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/yi-xie-you-yong-de-dong-xi/</guid>
      <description>
        <![CDATA[<h1>一些有用的东西</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          <p>这里放一些小工具、网页之类的。</p>
<a href="https://kuqilin.github.io/wang-wen-sheng-yi/quiz.html" title="315 望文生义成语释义辨析" target="_blank">315 望文生义成语释义辨析</a>
<a href="https://kuqilin.github.io/wang-wen-sheng-yi/quiz1.html" title="315 望文生义成语用法辨析" target="_blank">315 望文生义成语用法辨析</a>
<a href="https://kuqilin.github.io/docs/leizhou-guide.html" title="雷州一日游" target="_blank">雷州一日游</a>
<a href="https://kuqilin.github.io/docs/xuwen-guide.html" title="徐闻一日游" target="_blank">徐闻一日游</a>

        
        <hr><p>本文2026-08-15首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-08-15</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>记录</category>
      
    </item>
    
      
    

    <item>
      <title>Reimu 主题下的 i18n</title>
      <link>https://www.kuqilin.top/post/hugo-reimu-i18n/</link>
      <pubDate>Sat, 01 Aug 2026 17:15:02 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/hugo-reimu-i18n/</guid>
      <description>
        <![CDATA[<h1>Reimu 主题下的 i18n</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          
  <blockquote class="alert-blockquote tips">
    <p class="alert-heading">
      Tips
    </p>
    <p><p>建议先通读本文了解基本流程和坑以后在一步一步跟着操作。<br>
因为作者表达能力欠佳，本文由作者写完之后交由 AI 进行润色。</p></p>
  </blockquote>

<p>虽然花时间翻译自己的文章并不常见，但既然做了，就记录一下完整流程，方便后来者。</p>
<h2 id="为什么需要手动配置">
<a class="header-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81%e6%89%8b%e5%8a%a8%e9%85%8d%e7%bd%ae"></a>
为什么需要手动配置？
</h2><p>Hugo 本身支持多语言（i18n），但主题通常需要你按约定组织文件和配置。Reimu 主题默认只提供单语言结构，要启用多语言，你需要做三件事：</p>
<ol>
<li>重构内容文件夹，按语言分目录</li>
<li>为每篇文章关联翻译（通过 <code>translationKey</code>）</li>
<li>在配置文件中声明语言，并（如果使用非内置语言）补充主题的本地化文案和翻译文件</li>
</ol>
<p>下面按步骤展开。</p>
<h2 id="第一步调整内容文件夹结构">
<a class="header-anchor" href="#%e7%ac%ac%e4%b8%80%e6%ad%a5%e8%b0%83%e6%95%b4%e5%86%85%e5%ae%b9%e6%96%87%e4%bb%b6%e5%a4%b9%e7%bb%93%e6%9e%84"></a>
第一步：调整内容文件夹结构
</h2><p>Reimu 主题默认将文章放在 <code>content/</code> 下（如 <code>content/post/</code>、<code>content/about.md</code> 等）。<br>
<strong>多语言时，需在 <code>content/</code> 下为每种语言单独建一个子文件夹</strong>，子文件夹名即为语言代码（如 <code>zh-CN</code>、<code>en</code>、<code>yue</code>）。</p>
<p><strong>操作示例</strong><br>
假设你原有简体中文内容（<code>zh-CN</code>），现在要增加英文（<code>en</code>）和粤语（<code>yue</code>）：</p>
<ol>
<li>在 <code>content/</code> 下新建 <code>zh-CN/</code>、<code>en/</code>、<code>yue/</code> 文件夹。</li>
<li>将原来 <code>content/</code> 下的所有内容（<code>about.md</code>、<code>post/</code> 等）<strong>整个移动或复制</strong>到 <code>zh-CN/</code> 内（作为默认语言）。</li>
<li>再将 <code>zh-CN/</code> 下的内容<strong>复制</strong>到 <code>en/</code> 和 <code>yue/</code> 中，之后分别翻译各文件夹内的 <code>.md</code> 文件。</li>
</ol>
<p>最终结构类似：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">content/
</span></span><span class="line"><span class="cl">├── en/
</span></span><span class="line"><span class="cl">│   ├── about.md
</span></span><span class="line"><span class="cl">│   ├── archives/
</span></span><span class="line"><span class="cl">│   ├── friend.md
</span></span><span class="line"><span class="cl">│   └── post/
</span></span><span class="line"><span class="cl">├── yue/
</span></span><span class="line"><span class="cl">│   ├── about.md
</span></span><span class="line"><span class="cl">│   ├── archives/
</span></span><span class="line"><span class="cl">│   ├── friend.md
</span></span><span class="line"><span class="cl">│   └── post/
</span></span><span class="line"><span class="cl">├── zh-CN/
</span></span><span class="line"><span class="cl">│   ├── about.md
</span></span><span class="line"><span class="cl">│   ├── archives/
</span></span><span class="line"><span class="cl">│   ├── friend.md
</span></span><span class="line"><span class="cl">│   └── post/
</span></span><span class="line"><span class="cl">└── zh-TW/          <span class="c1"># 可选，以此类推</span>
</span></span><span class="line"><span class="cl">    ├── about.md
</span></span><span class="line"><span class="cl">    ├── archives/
</span></span><span class="line"><span class="cl">    ├── friend.md
</span></span><span class="line"><span class="cl">    └── post/
</span></span></code></pre></div><blockquote>
<p><strong>注意</strong>：原 <code>content/</code> 根目录下不要再放置任何内容，否则 Hugo 会将其视为无语言归属的内容，可能引发混乱。</p>
</blockquote>
<h2 id="第二步关联不同语言版本translationkey">
<a class="header-anchor" href="#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e5%85%b3%e8%81%94%e4%b8%8d%e5%90%8c%e8%af%ad%e8%a8%80%e7%89%88%e6%9c%actranslationkey"></a>
第二步：关联不同语言版本（translationKey）
</h2><p>Hugo 需要通过 <code>translationKey</code> 来识别哪些文件互为翻译。<br>
<strong>在每个语言的对应文件中，frontmatter 里写上相同的 <code>translationKey</code> 值</strong>。</p>
<p>例如，在 <code>content/zh-CN/about.md</code>、<code>content/en/about.md</code> 和 <code>content/yue/about.md</code> 中都加入：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">translationKey</span><span class="p">:</span><span class="w"> </span><span class="l">about</span><span class="w">
</span></span></span></code></pre></div><p>同样，每篇博文（如 <code>post/hello.md</code>）也要在所有语言版本中设置相同的 <code>translationKey</code>（可以设置为文章标题的 slug 或自定义标识）。</p>
<p><strong>为什么重要</strong>：没有这个字段，语言切换按钮将无法在文章页显示可切换的语言列表。</p>
<h2 id="第三步在-hugotoml-中声明语言">
<a class="header-anchor" href="#%e7%ac%ac%e4%b8%89%e6%ad%a5%e5%9c%a8-hugotoml-%e4%b8%ad%e5%a3%b0%e6%98%8e%e8%af%ad%e8%a8%80"></a>
第三步：在 <code>hugo.toml</code> 中声明语言
</h2><p>完成文件夹结构后，构建时 Hugo 会找不到语言定义而喜提报错。你需要在 <code>hugo.toml</code>（或 <code>config.toml</code>）中为每一种语言添加配置。</p>
<p><strong>基础配置示例</strong>（以粤语 <code>yue</code> 为例）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">languages</span><span class="p">.</span><span class="nx">yue</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="nx">locale</span> <span class="p">=</span> <span class="s2">&#34;yue&#34;</span>                <span class="c"># 语言代码，需与文件夹名一致</span>
</span></span><span class="line"><span class="cl">  <span class="nx">label</span> <span class="p">=</span> <span class="s2">&#34;粵語&#34;</span>                <span class="c"># 界面显示的语言名称（可自定义）</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hasCJKLanguage</span> <span class="p">=</span> <span class="kc">true</span>         <span class="c"># 若语言包含中日韩文字，设为 true</span>
</span></span><span class="line"><span class="cl">  <span class="nx">contentDir</span> <span class="p">=</span> <span class="s2">&#34;content/yue&#34;</span>    <span class="c"># 指向该语言的内容文件夹</span>
</span></span><span class="line"><span class="cl">  <span class="nx">weight</span> <span class="p">=</span> <span class="mi">2</span>                    <span class="c"># 在语言切换列表中的排序，数值越小越靠前</span>
</span></span></code></pre></div><p><strong>其他语言</strong>（如英文）同理：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">languages</span><span class="p">.</span><span class="nx">en</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="nx">locale</span> <span class="p">=</span> <span class="s2">&#34;en&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">label</span> <span class="p">=</span> <span class="s2">&#34;English&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hasCJKLanguage</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">  <span class="nx">contentDir</span> <span class="p">=</span> <span class="s2">&#34;content/en&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">weight</span> <span class="p">=</span> <span class="mi">3</span>
</span></span></code></pre></div><p><strong>设置默认语言</strong>（避免浏览器语言偏好干扰）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">defaultContentLanguage</span> <span class="p">=</span> <span class="s2">&#34;zh-CN&#34;</span>   <span class="c"># 设为你的主语言</span>
</span></span></code></pre></div><blockquote>
<p>提示：<code>weight</code> 影响切换菜单中的顺序，建议为常用语言设较小值。</p>
</blockquote>
<h2 id="第四步处理主题未内置的自定义语言">
<a class="header-anchor" href="#%e7%ac%ac%e5%9b%9b%e6%ad%a5%e5%a4%84%e7%90%86%e4%b8%bb%e9%a2%98%e6%9c%aa%e5%86%85%e7%bd%ae%e7%9a%84%e8%87%aa%e5%ae%9a%e4%b9%89%e8%af%ad%e8%a8%80"></a>
第四步：处理「主题未内置」的自定义语言
</h2><p>Reimu 主题自带了一些 UI 文案（如“复制成功”），但只在部分语言（如 <code>en</code>、<code>zh-CN</code>、<code>ja</code> 等）中预置了翻译。<br>
如果你添加的语言不在主题支持列表中（例如泰文 <code>th</code>、粤语 <code>yue</code> 虽然主题可能未包含），则必须额外补充两处配置，否则构建时主题会因找不到对应语言的文案而报错。</p>
<h3 id="41-补充-paramsyml-中的文案翻译">
<a class="header-anchor" href="#41-%e8%a1%a5%e5%85%85-paramsyml-%e4%b8%ad%e7%9a%84%e6%96%87%e6%a1%88%e7%bf%bb%e8%af%91"></a>
4.1 补充 <code>params.yml</code> 中的文案翻译
</h3><p>主题的 UI 文案定义在 <code>themes/reimu/config/_default/params.yml</code> 中。<br>
你需要<strong>将这份文件复制到项目根目录的 <code>config/_default/params.yml</code></strong>（若没有则新建对应文件夹），然后在该文件中为你的语言添加所有字段。</p>
<p>例如，原文件中有 <code>clipboard.success</code> 字段：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl"><span class="nt">clipboard</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">success</span><span class="p">:</span><span class="w"> 
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">en</span><span class="p">:</span><span class="w"> </span><span class="l">Copy successfully (*^▽^*)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">zh-CN</span><span class="p">:</span><span class="w"> </span><span class="l">复制成功 (*^▽^*)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">yue</span><span class="p">:</span><span class="w"> </span><span class="l">複製成功 (*^▽^*)         </span><span class="w"> </span><span class="c"># 新增 yue 的翻译</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">zh-TW</span><span class="p">:</span><span class="w"> </span><span class="l">複製成功 (*^▽^*)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ja</span><span class="p">:</span><span class="w"> </span><span class="l">コピー成功 (*^▽^*)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pt-BR</span><span class="p">:</span><span class="w"> </span><span class="l">Copiado com sucesso (*^▽^*)</span><span class="w">
</span></span></span></code></pre></div><p>你需要检查所有带 i18n 的字段（如 <code>comment.title</code>、<code>preloader.text</code> 等），逐一为你的语言添加对应值。<br>
<strong>注意</strong>：语言键（如 <code>yue</code>）必须与你在 <code>hugo.toml</code> 中 <code>[languages.yue]</code> 的 <code>locale</code> 值完全一致。</p>
<h3 id="42-创建独立的-i18n-翻译文件">
<a class="header-anchor" href="#42-%e5%88%9b%e5%bb%ba%e7%8b%ac%e7%ab%8b%e7%9a%84-i18n-%e7%bf%bb%e8%af%91%e6%96%87%e4%bb%b6"></a>
4.2 创建独立的 <code>i18n</code> 翻译文件
</h3><p>Hugo 本身需要一些基础翻译字符串（如月份名称、日期格式等），这些在主题的 <code>i18n/</code> 文件夹中提供。<br>
同样，将 <code>themes/reimu/i18n/</code> 下的某个现有文件（如 <code>zh-CN.yml</code>）复制到项目根目录的 <code>i18n/</code> 文件夹中，重命名为你的语言代码（如 <code>yue.yml</code>），然后将里面的字符串逐一翻译成你的语言。</p>
<p>如果不做这一步，Hugo 构建时会因为缺少翻译数据而报错（类似 <code>missing translations</code>）。</p>
<h2 id="常见问题">
<a class="header-anchor" href="#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98"></a>
常见问题
</h2><ul>
<li>
<p><strong>切换语言后页面 404？</strong><br>
检查 <code>contentDir</code> 路径是否正确，且每个语言文件夹内确有对应文件。</p>
</li>
<li>
<p><strong>语言切换按钮不出现？</strong><br>
确认所有互为翻译的文件都设置了相同的 <code>translationKey</code>，且至少有两个语言版本存在。</p>
</li>
<li>
<p><strong>修改后仍报错？</strong><br>
运行 <code>hugo --cleanDestinationDir</code> 清除缓存后重新构建，有时旧配置会残留。</p>
</li>
<li>
<p><strong>只改 <code>params.yml</code> 还不够？</strong><br>
确保同时完成了 <strong>4.1</strong> 和 <strong>4.2</strong> 两步，缺一不可。</p>
</li>
</ul>
<h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><p>Reimu 主题的 i18n 配置虽不复杂，但步骤环环相扣。简记要点：</p>
<ul>
<li>按语言分目录 → 加 <code>translationKey</code> → 声明语言配置</li>
<li>若使用非内置语言，额外补充主题 UI 文案（<code>params.yml</code>）和基础翻译（<code>i18n/*.yml</code>）</li>
</ul>
<p>按照上述步骤操作，你就能拥有一个完美切换的多语言 Hugo 站点。祝写作愉快！</p>

        
        <hr><p>本文2026-08-01首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-08-01</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
      
    

    <item>
      <title>网站看板娘 —— 37 泉眼深处</title>
      <link>https://www.kuqilin.top/post/kan-ban-niang/</link>
      <pubDate>Tue, 28 Jul 2026 20:41:02 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/kan-ban-niang/</guid>
      <description>
        <![CDATA[<h1>网站看板娘 —— 37 泉眼深处</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          <h2 id="再次更新">
<a class="header-anchor" href="#%e5%86%8d%e6%ac%a1%e6%9b%b4%e6%96%b0"></a>
再次更新
</h2><p>再次更新，用上了 Cloudflare 的 R2 储存桶，绑了<code>kuqilin.eu.org</code>域名，可以 <del>尽情</del> 适度食用了。速度比 jsDelivr 快多了！20 秒之内 99% 的用户都能加载出来了。都去给我欣赏「泉眼深处」😠😠😠</p>
<h2 id="更新">
<a class="header-anchor" href="#%e6%9b%b4%e6%96%b0"></a>
更新
</h2><p>太好了，经历各种斗智斗勇（bushi）终于把网站看板娘搞好了 —— 一个不会说话的 37。<br>
为什么说斗智斗勇呢？你去看<a href="/post/kan-ban-niang/#37-%e5%ae%8c%e7%be%8e%e7%9a%84%e6%b5%81%e4%bd%93">后文</a>。不容易啊，最终发现有这些小白块大抵是因为大佬解包过程中出了一些小问题，导致模型图片里面有一个白块，当时看模型图片就感觉奇怪，上 9 看了皮肤，发现本来这里什么都没有，于是用 IsoPix Pro 把白块擦掉了，发现终于没有白块了（应该不会有什么问题的）。<br>
然后也把模型放置位置和大小做了一些调整。可惜的是暂时还不会怎么给她添加例如举牌子、对话框之类的，所以看板娘傻傻的。<br>
欸，国内裸连 GitHub 还是不太好，把 moc3 文件上传到 jsDelivr 上也没多快，你们最坏情况要 2 分钟才能看到美丽的 37！（最好情况是 3 秒）</p>
<p>就此事向仓库管理发了 Issue，结果人家已经知道这个问题了:)</p>
<p><img src="https://image.kuqilin.eu.org/2026/screenshot-2026-07-31-09-58-16.png" 
     alt="Issue截图" 
     referrerpolicy="no-referrer" 
     loading="lazy" /></p>
<p>那好吧，没删干净。如果你的网络状况良好（指连接 GitHub 速度飞快），那你可以点<a href="https://l2d-viewer.hacxy.cn/viewer?model=https%3A%2F%2Fkuqilin.github.io%2Flive2d%2F37_skin4%2Fv2a2_306604_37_test.model3.json">这里</a>看看，这里能选择 37 的不同表情和动作。</p>
<p><img src="https://image.kuqilin.eu.org/2026/2026-07-31_10-01-23.png" 
     alt="37" 
     referrerpolicy="no-referrer" 
     loading="lazy" /></p>
<h2 id="37-完美的流体">
<a class="header-anchor" href="#37-%e5%ae%8c%e7%be%8e%e7%9a%84%e6%b5%81%e4%bd%93"></a>
37 完美的流体
</h2>
  <blockquote class="alert-blockquote caution">
    <p class="alert-heading">
      Caution
    </p>
    <p><p>哈哈哈哈哈，下面的内容没有时效性了，我搞定了泉眼深处<br>
下文原标题为《网站看板娘 —— 37 完美的流体》</p></p>
  </blockquote>

<p>耗费许久，最终 vibe code 了网站的看板娘出来，《重返未来：1999》里面角色 37 的皮肤——完美的流体。<br>
或许玩过 1999 的人会问：“难道你不觉得快乐的捕鸟人或者泉眼深处更好看吗？”我会回答：“对！我也想用泉眼深处。”<br>
只不过，这几个有“亿点点”问题：
<img src="https://i0.hdslb.com/bfs/openplatform/131f5ad538ef5056c41530d790eaaebf0b5b2325.png" 
     alt="比较表格" 
     referrerpolicy="no-referrer" 
     loading="lazy" />
具体的情况，请看以下图片：
<img src="https://i0.hdslb.com/bfs/openplatform/8e4046ea74d5264870f733499e1ea4d49b344720.png" 
     alt="快乐的捕鸟人" 
     referrerpolicy="no-referrer" 
     loading="lazy" />
<img src="https://i0.hdslb.com/bfs/openplatform/b99d55192a2b02da804cdb4ba33b6ef0eec17752.png" 
     alt="泉眼深处" 
     referrerpolicy="no-referrer" 
     loading="lazy" />
看到那几个白块了吗？37 的洞二皮也有这个问题，vibe 解决不了 <del>我是废物</del> 没办法了，泉眼深处真的很好看啊，部署出来还会有小鸟在飞来飞去，可是这个白块真的没办法解决，不然也不会用这个 <del>洛天依</del> 完美的流体了。</p>
<p>本来我用的 Reimu 主题是直接能用 Live2d 的，但是没办法，你 9 的模型版本太高了，只得自己 vibe 出来
<img src="https://i0.hdslb.com/bfs/openplatform/cd7e9794335c7ded95730954615b507dbcdd9290.png" 
     alt="vsc界面" 
     referrerpolicy="no-referrer" 
     loading="lazy" />
厉不厉害你 Deepseek-V4-Pro 预览版？</p>
<p>不过还好，这个皮肤也不算难看。并且动作和表情也还是有的。调了一个 5 秒钟自动切换动画和一个点击切换动画。需要注意的是，在显示宽度小于 960px 的情况下这个看板娘是不会显示的，就跟侧边栏一样，她俩是同步的。<br>
坏了，为了加快国内的访问速度，把这个“可能侵权”的文件上传到了图床，不知道会有什么风险呢？</p>
<p>还是感觉很可惜，没能让泉眼深处当网站看板娘😭😭😭</p>
<p>这些模型都是从<a href="https://github.com/myssal/Reverse-1999-CN-Asset/">https://github.com/myssal/Reverse-1999-CN-Asset/</a>下载的大佬解包资源，如有侵权，请<a href="mailto:kuqilin@outlook.com&amp;subject=%e5%88%a0%e9%99%a4%e4%be%b5%e6%9d%83%e6%96%87%e4%bb%b6">联系删除</a>。</p>

        
        <hr><p>本文2026-07-28首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-07-29</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>记录</category>
      
    </item>
    
      
    

    <item>
      <title>Termux 安装 Hugo</title>
      <link>https://www.kuqilin.top/post/termux-install-hugo/</link>
      <pubDate>Tue, 28 Jul 2026 16:52:05 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/termux-install-hugo/</guid>
      <description>
        <![CDATA[<h1>Termux 安装 Hugo</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          
  <blockquote class="alert-blockquote important">
    <p class="alert-heading">
      Important
    </p>
    <p><p>建议先通读全文了解基本流程再进行</p></p>
  </blockquote>

<p>Hugo 在 GitHub 上并没有适用于 Android Termux 的 aarch64 架构的二进制文件，因此，需要手动在 Termux 上自行编译安装。</p>
<h2 id="安装-go">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85-go"></a>
安装 Go
</h2><p>使用以下命令来安装 Go：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="go">[~]$ pkg install golang
</span></span></span></code></pre></div><p>检查是否安装成功，正常输出 go 版本号即为成功：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> go version
</span></span><span class="line"><span class="cl"><span class="go">go version go1.26.5 android/arm64
</span></span></span></code></pre></div><h2 id="编译-hugo">
<a class="header-anchor" href="#%e7%bc%96%e8%af%91-hugo"></a>
编译 Hugo
</h2><p>在 Hugo 的 GitHub 仓库中，README 文件贴出了手动编译的命令。源码是从 GitHub 下载，所以请确认网络环境状况或者使用镜像网站。<br>
因为我使用的 Hugo 主题是 hugo-theme-reimu 所以我要安装拓展版本（Extended edition）。安装拓展版本需要保证有 GCC 或者 Clang 安装，如果没有，运行<code>pkg install clang</code>即可。<br>
然后执行以下命令进行拓展版本的编译：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="go">CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
</span></span></span></code></pre></div><p>跑完这一大串就应该编译好了， <del>本人的麒麟 970 芯片只花了 58 秒就编译好了，你也来试试吧</del></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>~<span class="o">]</span>$ <span class="nv">CGO_ENABLED</span><span class="o">=</span><span class="m">1</span> go install -tags extended github.com/gohugoio/hugo@latest
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/hugo v0.164.0                 go: downloading github.com/bep/godartsass/v2 v2.5.0               go: downloading github.com/bep/golibsass v1.2.0                   go: downloading github.com/pelletier/go-toml/v2 v2.4.3            go: downloading github.com/spf13/afero v1.15.0                    go: downloading github.com/tdewolff/parse/v2 v2.8.12              go: downloading github.com/bep/logg v0.4.0                        go: downloading github.com/fatih/color v1.18.0                    go: downloading github.com/alecthomas/chroma/v2 v2.27.0           go: downloading github.com/bep/clocks v0.5.0                      go: downloading github.com/bep/debounce v1.2.0                    go: downloading github.com/bep/lazycache v0.8.1                   go: downloading github.com/bep/mclib v1.20401.20400               go: downloading github.com/bep/overlayfs v0.11.0                  go: downloading github.com/fsnotify/fsnotify v1.9.0               go: downloading github.com/bep/simplecobra v0.7.0                 go: downloading github.com/goccy/go-yaml v1.19.2                  go: downloading github.com/spf13/cobra v1.10.2                    go: downloading github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c                                                           go: downloading github.com/spf13/fsync v0.10.1                    go: downloading github.com/spf13/pflag v1.0.10                    go: downloading go.uber.org/automaxprocs v1.5.3                   go: downloading golang.org/x/sync v0.21.0                         go: downloading golang.org/x/text v0.38.0                         go: downloading github.com/cespare/xxhash/v2 v2.3.0               go: downloading github.com/gohugoio/hashstructure v0.6.0          go: downloading github.com/mattn/go-isatty v0.0.22                go: downloading github.com/mattn/go-colorable v0.1.14             go: downloading google.golang.org/protobuf v1.36.11
</span></span><span class="line"><span class="cl">go: downloading github.com/hashicorp/golang-lru/v2 v2.0.7
</span></span><span class="line"><span class="cl">go: downloading github.com/dlclark/regexp2/v2 v2.2.1
</span></span><span class="line"><span class="cl">go: downloading github.com/pkg/errors v0.9.1
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/helpers v0.12.0
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/golocales v0.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/spf13/cast v1.10.0
</span></span><span class="line"><span class="cl">go: downloading github.com/gobwas/glob v0.2.3
</span></span><span class="line"><span class="cl">go: downloading github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c
</span></span><span class="line"><span class="cl">go: downloading github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/go-radix v1.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/jdkato/prose v1.2.1
</span></span><span class="line"><span class="cl">go: downloading github.com/dlclark/regexp2 v1.12.0
</span></span><span class="line"><span class="cl">go: downloading github.com/kyokomi/emoji/v2 v2.2.13
</span></span><span class="line"><span class="cl">go: downloading github.com/olekukonko/tablewriter v1.1.4
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/gitmap v1.9.0
</span></span><span class="line"><span class="cl">go: downloading github.com/frankban/quicktest v1.14.6
</span></span><span class="line"><span class="cl">go: downloading github.com/gobuffalo/flect v1.0.3
</span></span><span class="line"><span class="cl">go: downloading github.com/hairyhenderson/go-codeowners v0.7.0
</span></span><span class="line"><span class="cl">go: downloading github.com/yuin/goldmark v1.8.2
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/tools v0.47.0
</span></span><span class="line"><span class="cl">go: downloading github.com/rogpeppe/go-internal v1.15.0
</span></span><span class="line"><span class="cl">go: downloading github.com/gorilla/websocket v1.5.3
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/mod v0.37.0
</span></span><span class="line"><span class="cl">go: downloading github.com/clbanning/mxj/v2 v2.7.0
</span></span><span class="line"><span class="cl">go: downloading github.com/niklasfasching/go-org v1.9.1
</span></span><span class="line"><span class="cl">go: downloading github.com/bits-and-blooms/bitset v1.24.5
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/sys v0.46.0
</span></span><span class="line"><span class="cl">go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.6
</span></span><span class="line"><span class="cl">go: downloading go.yaml.in/yaml/v3 v3.0.4
</span></span><span class="line"><span class="cl">go: downloading github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/httpcache v0.8.0
</span></span><span class="line"><span class="cl">go: downloading github.com/tdewolff/minify/v2 v2.24.13
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/imagemeta v0.17.2
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/gift v0.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/makeworld-the-better-one/dither/v2 v2.4.0
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/image v0.43.0
</span></span><span class="line"><span class="cl">go: downloading github.com/muesli/smartcrop v0.3.0
</span></span><span class="line"><span class="cl">go: downloading github.com/tetratelabs/wazero v1.12.0
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/textandbinarywriter v0.1.0
</span></span><span class="line"><span class="cl">go: downloading github.com/marekm4/color-extractor v1.2.1
</span></span><span class="line"><span class="cl">go: downloading github.com/mattn/go-runewidth v0.0.19
</span></span><span class="line"><span class="cl">go: downloading github.com/olekukonko/errors v1.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/olekukonko/ll v0.1.6
</span></span><span class="line"><span class="cl">go: downloading github.com/evanw/esbuild v0.28.1
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/go-i18n/v2 v2.1.3-0.20251018145728-cfcc22d823c6
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/net v0.56.0
</span></span><span class="line"><span class="cl">go: downloading github.com/google/go-cmp v0.7.0
</span></span><span class="line"><span class="cl">go: downloading github.com/kr/pretty v0.3.1
</span></span><span class="line"><span class="cl">go: downloading software.sslmate.com/src/go-pkcs12 v0.7.0
</span></span><span class="line"><span class="cl">go: downloading github.com/russross/blackfriday/v2 v2.1.0
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/tmc v0.6.0
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/hugo-goldmark-extensions/extras v0.7.0
</span></span><span class="line"><span class="cl">go: downloading github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.5.0
</span></span><span class="line"><span class="cl">go: downloading github.com/microcosm-cc/bluemonday v1.0.27
</span></span><span class="line"><span class="cl">go: downloading github.com/yuin/goldmark-emoji v1.0.6
</span></span><span class="line"><span class="cl">go: downloading github.com/clipperhouse/uax29/v2 v2.6.0
</span></span><span class="line"><span class="cl">go: downloading github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6
</span></span><span class="line"><span class="cl">go: downloading github.com/clipperhouse/displaywidth v0.10.0
</span></span><span class="line"><span class="cl">go: downloading rsc.io/qr v0.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/goat v0.5.0
</span></span><span class="line"><span class="cl">go: downloading github.com/getkin/kin-openapi v0.140.0
</span></span><span class="line"><span class="cl">go: downloading github.com/JohannesKaufmann/html-to-markdown/v2 v2.5.2
</span></span><span class="line"><span class="cl">go: downloading github.com/bep/goportabletext v0.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/kr/text v0.2.0
</span></span><span class="line"><span class="cl">go: downloading golang.org/x/crypto v0.53.0
</span></span><span class="line"><span class="cl">go: downloading github.com/aymerick/douceur v0.2.0
</span></span><span class="line"><span class="cl">go: downloading github.com/JohannesKaufmann/dom v0.3.1
</span></span><span class="line"><span class="cl">go: downloading github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
</span></span><span class="line"><span class="cl">go: downloading github.com/go-openapi/jsonpointer v0.22.5
</span></span><span class="line"><span class="cl">go: downloading github.com/oasdiff/yaml v0.1.0
</span></span><span class="line"><span class="cl">go: downloading github.com/gorilla/css v1.0.1
</span></span><span class="line"><span class="cl">go: downloading github.com/go-openapi/swag/jsonname v0.25.5
</span></span><span class="line"><span class="cl">go: downloading github.com/oasdiff/yaml3 v0.0.13
</span></span></code></pre></div><p>不出意外，编译好的 Hugo 会在<code>~/go/bin/</code>里面，检查一下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ ~/go/bin/hugo version
</span></span><span class="line"><span class="cl">hugo v0.164.0+extended android/arm64 <span class="nv">BuildDate</span><span class="o">=</span>unknown
</span></span></code></pre></div><p>如果你看到类似的输出，恭喜你，编译好了。不过为了方便，执行</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>~<span class="o">]</span>$ cp ~/go/bin/hugo ~/../usr/bin/
</span></span></code></pre></div><p>就可以随意调用 Hugo 了。</p>
<h2 id="结语">
<a class="header-anchor" href="#%e7%bb%93%e8%af%ad"></a>
结语
</h2><p>话说是我的原因吗？从 GitHub 下载的 Hugo 二进制文件，已经是 arm64 的，但还是跑不起来，所以只能自己编译。大佬可以给我发邮件讲解一下😁</p>
<p>如果你急需在 Termux 上使用 Hugo 并且编译条件不好，可以发急邮到<a href="mailto:kuqilin@88.com">kuqilin@88.com</a>给我，如果我看到了，会把编译好的二进制文件发给你。</p>

        
        <hr><p>本文2026-07-28首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-07-28</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
      
    

    <item>
      <title>Hugo 搭建个人博客</title>
      <link>https://www.kuqilin.top/post/hugo/</link>
      <pubDate>Sat, 11 Jul 2026 23:17:12 &#43;0800</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/hugo/</guid>
      <description>
        <![CDATA[<h1>Hugo 搭建个人博客</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          
  <blockquote class="alert-blockquote tip">
    <p class="alert-heading">
      Tip
    </p>
    <p><p>请务必先通读全文再进行操作，避免一些不必要的错误。</p></p>
  </blockquote>

<h2 id="安装-hugo">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85-hugo"></a>
安装 Hugo
</h2><h3 id="windows">
<a class="header-anchor" href="#windows"></a>
Windows
</h3><p>前往官网下载 Hugo 的<code>exe</code>文件，随便找个位置放，然后把他添加到环境变量中即可。</p>
<h3 id="linux">
<a class="header-anchor" href="#linux"></a>
Linux
</h3><p>先安装 Hugo 的二进制文件，可以在官网上下载，也可以直接使用软件包管理器，考虑到<code>apt</code>更新极为缓慢，建议 Debian 系去官网下载<code>deb</code>包进行安装。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install hugo    <span class="c1"># Debian 系</span>
</span></span><span class="line"><span class="cl">yay -S hugo              <span class="c1"># Arch 系</span>
</span></span></code></pre></div><p>安装完成后，执行<code>hugo version</code>会看到类似如下的提示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">❯ hugo version  
</span></span><span class="line"><span class="cl">hugo v0.164.0-ce2470e7012b5ab5fc4e10ebe4027e9f8d9e00dc+extended linux/amd64 <span class="nv">BuildDate</span><span class="o">=</span>2026-07-06T16:39:30Z <span class="nv">VendorInfo</span><span class="o">=</span>gohugoio
</span></span></code></pre></div><p>即安装完成。</p>
<h2 id="创建项目">
<a class="header-anchor" href="#%e5%88%9b%e5%bb%ba%e9%a1%b9%e7%9b%ae"></a>
创建项目
</h2><p>我们使用<code>hugo new site &lt;项目名称&gt;</code>来创建项目，比如：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">❯ hugo new site myBlog  
</span></span><span class="line"><span class="cl">Congratulations! Your new Hugo site was created in /home/kuqilin/myBlog.  
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">Just a few more steps...  
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">1. Change the current directory to /home/kuqilin/myBlog.  
</span></span><span class="line"><span class="cl">2. Create or install a theme:  
</span></span><span class="line"><span class="cl">  - Create a new theme with the <span class="nb">command</span> <span class="s2">&#34;hugo new theme &lt;THEMENAME&gt;&#34;</span>  
</span></span><span class="line"><span class="cl">  - Install a theme from https://themes.gohugo.io/  
</span></span><span class="line"><span class="cl">3. Edit hugo.toml, setting the <span class="s2">&#34;theme&#34;</span> property to the theme name.  
</span></span><span class="line"><span class="cl">4. Create new content with the <span class="nb">command</span> <span class="s2">&#34;hugo new content &lt;SECTIONNAME&gt;/&lt;FILENAME&gt;.&lt;FORMAT&gt;&#34;</span>.  
</span></span><span class="line"><span class="cl">5. Start the embedded web server with the <span class="nb">command</span> <span class="s2">&#34;hugo server --buildDrafts&#34;</span>.  
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">See documentation at https://gohugo.io/.
</span></span></code></pre></div><p>可以看到成功的提示，接下来<code>cd</code>到项目文件夹<code>myBlog</code>，按照提示进行配置。</p>
<h2 id="创建或安装主题">
<a class="header-anchor" href="#%e5%88%9b%e5%bb%ba%e6%88%96%e5%ae%89%e8%a3%85%e4%b8%bb%e9%a2%98"></a>
创建或安装主题
</h2><p>显然，我们是可以自己创建主题的，但是为了<del>白嫖</del>方便，直接前往 <a href="https://themes.gohugo.io/">Hugo Themes</a> 下载一个称心的即可，这里选择了 <a href="https://themes.gohugo.io/themes/hugo-theme-reimu/">hugo-theme-reimu</a> 这个主题。</p>
<p>主题安装有几种方式，推荐使用 Git Submodule：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> myBlog
</span></span><span class="line"><span class="cl">git init
</span></span><span class="line"><span class="cl">git submodule add https://github.com/D-Sketon/hugo-theme-reimu.git themes/hugo-theme-reimu
</span></span></code></pre></div><p>也可以直接下载主题压缩包，解压到<code>themes</code>文件夹下。</p>
<p>然后在 <code>hugo.toml</code> 中指定主题：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">theme</span> <span class="p">=</span> <span class="s2">&#34;hugo-theme-reimu&#34;</span>
</span></span></code></pre></div><h2 id="配置-hugo-theme-reimu">
<a class="header-anchor" href="#%e9%85%8d%e7%bd%ae-hugo-theme-reimu"></a>
配置 hugo-theme-reimu
</h2><p>主题的配置文件默认在 <code>themes/hugo-theme-reimu/config/_default/</code> 下。我们不应该直接修改主题文件，因为更新主题时会将其覆盖掉，所以应该在项目根目录的 <code>config/_default/</code> 下创建同名文件来覆盖。我们把<code>params.yml</code>（主题参数）复制即可。</p>
<h3 id="基础站点配置hugotoml">
<a class="header-anchor" href="#%e5%9f%ba%e7%a1%80%e7%ab%99%e7%82%b9%e9%85%8d%e7%bd%aehugotoml"></a>
基础站点配置（hugo.toml）
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">baseURL</span> <span class="p">=</span> <span class="s1">&#39;https://&lt;你的用户名&gt;.github.io/&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nx">theme</span> <span class="p">=</span> <span class="s2">&#34;hugo-theme-reimu&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">title</span> <span class="p">=</span> <span class="s2">&#34;xxx&#39;s Blog&#34;</span>       <span class="c"># 站点标题</span>
</span></span><span class="line"><span class="cl"><span class="nx">locale</span> <span class="p">=</span> <span class="s2">&#34;zh-CN&#34;</span>           <span class="c"># 语言</span>
</span></span><span class="line"><span class="cl"><span class="nx">languageName</span> <span class="p">=</span> <span class="s2">&#34;简体中文&#34;</span>   <span class="c"># 语言名称</span>
</span></span><span class="line"><span class="cl"><span class="nx">hasCJKLanguage</span> <span class="p">=</span> <span class="kc">true</span>      <span class="c"># 是否包含 CJK 字符</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">markup</span><span class="p">.</span><span class="nx">highlight</span><span class="p">]</span>         <span class="c"># 语法高亮（含代码块必须）</span>
</span></span><span class="line"><span class="cl"><span class="nx">guessSyntax</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">noClasses</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">markup</span><span class="p">.</span><span class="nx">goldmark</span><span class="p">.</span><span class="nx">renderer</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">unsafe</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">markup</span><span class="p">.</span><span class="nx">goldmark</span><span class="p">.</span><span class="nx">extensions</span><span class="p">.</span><span class="nx">passthrough</span><span class="p">]</span> <span class="c"># 含数学公式必须</span>
</span></span><span class="line"><span class="cl"><span class="nx">enable</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">delimiters</span><span class="p">.</span><span class="nx">block</span> <span class="p">=</span> <span class="p">[[</span><span class="s2">&#34;\\[&#34;</span><span class="p">,</span> <span class="s2">&#34;\\]&#34;</span><span class="p">],</span> <span class="p">[</span><span class="s2">&#34;$$&#34;</span><span class="p">,</span> <span class="s2">&#34;$$&#34;</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">delimiters</span><span class="p">.</span><span class="nx">inline</span> <span class="p">=</span> <span class="p">[[</span><span class="s2">&#34;\\(&#34;</span><span class="p">,</span> <span class="s2">&#34;\\)&#34;</span><span class="p">],</span> <span class="p">[</span><span class="s2">&#34;$&#34;</span><span class="p">,</span> <span class="s2">&#34;$&#34;</span><span class="p">]]</span>
</span></span></code></pre></div><p><code>unsafe = true</code> 允许在 Markdown 中直接使用 HTML，<code>passthrough</code> 用于支持数学公式的 <code>$...$</code> 和 <code>$$...$$</code> 语法。</p>
<h3 id="主题参数配置paramsyml">
<a class="header-anchor" href="#%e4%b8%bb%e9%a2%98%e5%8f%82%e6%95%b0%e9%85%8d%e7%bd%aeparamsyml"></a>
主题参数配置（params.yml）
</h3><p>在 <code>config/_default/params.yml</code> 中配置主题的各项功能，这里介绍几个关键项：</p>
<p><strong>导航菜单：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">menu</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">home</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">archives</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;archives&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">about</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;about&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">friend</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;friend&#34;</span><span class="w">
</span></span></span></code></pre></div><p><strong>个人信息和头像：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">author</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;你的名字&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">email</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;你的邮箱&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">avatar</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;avatar.jpg&#34;</span><span class="w">           </span><span class="c"># 放在 static/avatar/ 下</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">banner</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;images/banner.webp&#34;</span><span class="w">   </span><span class="c"># 放在 static/images/ 下</span><span class="w">
</span></span></span></code></pre></div><p><strong>社交链接：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">social</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">email</span><span class="p">:</span><span class="w"> </span><span class="l">mailto:&lt;你的邮箱&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">github</span><span class="p">:</span><span class="w"> </span><span class="l">https://github.com/&lt;你的用户名&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">twitter</span><span class="p">:</span><span class="w"> </span><span class="l">https://twitter.com/&lt;你的用户名&gt;</span><span class="w">
</span></span></span></code></pre></div><p><strong>侧边栏和小组件：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">sidebar</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">position</span><span class="p">:</span><span class="w"> </span><span class="l">left </span><span class="w"> </span><span class="c"># 左右可选</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">widgets</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">category</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">tag</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">tagcloud</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">recent_posts</span><span class="w">
</span></span></span></code></pre></div><p><strong>评论区（以 Waline 为例）：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">comment</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="l">waline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">waline</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">enable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">serverURL</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&lt;你的 Waline 服务地址&gt;&#34;</span><span class="w">
</span></span></span></code></pre></div><p><strong>启用功能：</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">toc</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                </span><span class="c"># 目录</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">dark_mode</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">enable</span><span class="p">:</span><span class="w"> </span><span class="l">auto          </span><span class="w"> </span><span class="c"># 自动跟随系统</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">math</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">mathjax</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">enable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">         </span><span class="c"># 数学公式</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">show_update_time</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">   </span><span class="c"># 显示更新时间</span><span class="w">
</span></span></span></code></pre></div><p>更多配置项（鼠标特效、Live2D、字体、加载动画等）请参考<a href="https://github.com/D-Sketon/hugo-theme-reimu">主题官方文档</a>。</p>
<p>配置完成后，运行 <code>hugo server -D</code> 即可在本地预览 <code>http://localhost:1313</code>。</p>
<h3 id="其他内容">
<a class="header-anchor" href="#%e5%85%b6%e4%bb%96%e5%86%85%e5%ae%b9"></a>
其他内容
</h3><p>其他内容，比如更改鼠标指针、修改字体、文章头图、文章封面、网站主题色、短代码、友链等等，请查看<a href="https://github.com/D-Sketon/hugo-theme-reimu">官方文档</a>，这里不再赘述。<del>嘻嘻</del></p>
<h2 id="部署到-github-pages">
<a class="header-anchor" href="#%e9%83%a8%e7%bd%b2%e5%88%b0-github-pages"></a>
部署到 GitHub Pages
</h2><p>部署的核心思路是把 Hugo 构建生成的 <code>public/</code> 目录推送到 <code>&lt;用户名&gt;.github.io</code> 仓库。GitHub Pages 会自动将这个仓库的内容作为静态网站发布。</p>
<p>也就是说，我们需要两个仓库：</p>
<ul>
<li><strong>源码仓库</strong>（如 <code>hugo-build</code>）：放 Hugo 项目源文件（Markdown、配置、主题等）</li>
<li><strong>页面仓库</strong>（<code>&lt;用户名&gt;.github.io</code>）：只放 <code>public/</code> 里的静态文件</li>
</ul>
<p>下面分别介绍手动推送和 GitHub Actions 自动推送两种方式。</p>
<h2 id="方式一手动推送到-githubio">
<a class="header-anchor" href="#%e6%96%b9%e5%bc%8f%e4%b8%80%e6%89%8b%e5%8a%a8%e6%8e%a8%e9%80%81%e5%88%b0-githubio"></a>
方式一：手动推送到 github.io
</h2><p>最直接的方式——在本地执行 <code>hugo</code> 构建，然后把 <code>public/</code> 目录的内容推到页面仓库。</p>
<h3 id="1-克隆页面仓库">
<a class="header-anchor" href="#1-%e5%85%8b%e9%9a%86%e9%a1%b5%e9%9d%a2%e4%bb%93%e5%ba%93"></a>
1. 克隆页面仓库
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/&lt;你的用户名&gt;/&lt;你的用户名&gt;.github.io.git public
</span></span></code></pre></div><p>如果 <code>public/</code> 目录已存在（Hugo 构建会生成），先删掉再克隆。</p>
<h3 id="2-构建并推送">
<a class="header-anchor" href="#2-%e6%9e%84%e5%bb%ba%e5%b9%b6%e6%8e%a8%e9%80%81"></a>
2. 构建并推送
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 回到源码仓库根目录，先构建</span>
</span></span><span class="line"><span class="cl">hugo
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 进入 public 目录（此时它已经是页面仓库的克隆）</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> public
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 提交并推送</span>
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;update&#34;</span>
</span></span><span class="line"><span class="cl">git push origin main
</span></span></code></pre></div><p>每次更新博客时，重复上面几步即可。</p>
<h3 id="3-写个脚本简化操作">
<a class="header-anchor" href="#3-%e5%86%99%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%ae%80%e5%8c%96%e6%93%8d%e4%bd%9c"></a>
3. 写个脚本简化操作
</h3><p>可以把以上步骤写成一个脚本 <code>deploy.sh</code>：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Building...&#34;</span>
</span></span><span class="line"><span class="cl">hugo
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Deploying...&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> public
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;update </span><span class="k">$(</span>date <span class="s1">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">git push origin main
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> ..
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Done!&#34;</span>
</span></span></code></pre></div><p>以后只需运行 <code>bash deploy.sh</code> 就完成构建和部署了。</p>
<p>这种方式的优点是不依赖任何第三方 CI 服务，简单直接；缺点是需要手动执行，并且要保证本地 Hugo 环境正常。</p>
<h2 id="方式二github-actions-自动部署">
<a class="header-anchor" href="#%e6%96%b9%e5%bc%8f%e4%ba%8cgithub-actions-%e8%87%aa%e5%8a%a8%e9%83%a8%e7%bd%b2"></a>
方式二：GitHub Actions 自动部署
</h2><p>懒人必备——每次把源码推到 GitHub，剩下的构建和部署全交给 Actions 自动完成。</p>
<h3 id="1-创建-personal-access-token">
<a class="header-anchor" href="#1-%e5%88%9b%e5%bb%ba-personal-access-token"></a>
1. 创建 Personal Access Token
</h3><p>为了让 Actions 能够向页面仓库推送代码，需要一个 Token：</p>
<ol>
<li>GitHub → Settings → Developer settings → Personal access tokens → Tokens(classic)</li>
<li>生成新 Token，勾选 <code>repo</code> 和 <code>workflow</code> 权限</li>
<li>复制生成的 Token（注意：此 Token <strong>只显示一次</strong>，务必保存好）</li>
</ol>
<p>然后在<strong>源码仓库</strong>的 Settings → Secrets and variables → Actions 中新建一个 Secret，名称为 <code>TOKEN</code>，填入刚才复制的 Token。</p>
<h3 id="2-编写-workflow-文件">
<a class="header-anchor" href="#2-%e7%bc%96%e5%86%99-workflow-%e6%96%87%e4%bb%b6"></a>
2. 编写 Workflow 文件
</h3><p>在源码仓库根目录创建 <code>.github/workflows/hugo.yaml</code>：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">deploy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">on</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">push</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">branches</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">main</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">jobs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">deploy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Checkout</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">fetch-depth</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">submodules</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">       </span><span class="c"># 如果主题用 git submodule 安装，需要这行</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Setup Hugo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">peaceiris/actions-hugo@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">hugo-version</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;latest&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">extended</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Build Web</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">hugo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Deploy Web</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">peaceiris/actions-gh-pages@v4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PERSONAL_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.TOKEN }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">EXTERNAL_REPOSITORY</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;你的用户名&gt;/&lt;你的用户名&gt;.github.io</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PUBLISH_BRANCH</span><span class="p">:</span><span class="w"> </span><span class="l">main</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PUBLISH_DIR</span><span class="p">:</span><span class="w"> </span><span class="l">./public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">commit_message</span><span class="p">:</span><span class="w"> </span><span class="l">auto deploy</span><span class="w">
</span></span></span></code></pre></div><p>各步骤说明：</p>
<table>
	<thead>
			<tr>
					<th>步骤</th>
					<th>作用</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>actions/checkout@v4</code></td>
					<td>拉取源码，<code>submodules: true</code> 同时拉取主题子模块</td>
			</tr>
			<tr>
					<td><code>peaceiris/actions-hugo@v3</code></td>
					<td>安装 Hugo 环境（extended 版支持 SCSS）</td>
			</tr>
			<tr>
					<td><code>hugo</code></td>
					<td>构建站点，生成 <code>public/</code> 目录</td>
			</tr>
			<tr>
					<td><code>peaceiris/actions-gh-pages@v4</code></td>
					<td>将 <code>public/</code> 推送到页面仓库</td>
			</tr>
	</tbody>
</table>
<h3 id="3-推送源码触发部署">
<a class="header-anchor" href="#3-%e6%8e%a8%e9%80%81%e6%ba%90%e7%a0%81%e8%a7%a6%e5%8f%91%e9%83%a8%e7%bd%b2"></a>
3. 推送源码触发部署
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;new post&#34;</span>
</span></span><span class="line"><span class="cl">git push origin main
</span></span></code></pre></div><p>每次 <code>push</code> 到 <code>main</code> 分支后，GitHub Actions 就会自动运行。可以在源码仓库的 Actions 标签页查看构建进度，绿色 ✅ 即为部署成功，随后访问 <code>https://&lt;你的用户名&gt;.github.io/</code> 就能看到更新后的博客。</p>
<h3 id="两种方式对比">
<a class="header-anchor" href="#%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e5%af%b9%e6%af%94"></a>
两种方式对比
</h3><table>
	<thead>
			<tr>
					<th></th>
					<th>手动推送</th>
					<th>GitHub Actions</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>操作</td>
					<td>本地跑 <code>hugo</code> + 手动 push</td>
					<td>只需 <code>git push</code> 源码</td>
			</tr>
			<tr>
					<td>依赖</td>
					<td>本地需安装 Hugo</td>
					<td>无需本地环境</td>
			</tr>
			<tr>
					<td>适用场景</td>
					<td>临时更新、不方便配 Actions</td>
					<td>日常写博客，自动化最省心</td>
			</tr>
			<tr>
					<td>复杂度</td>
					<td>⭐ 简单</td>
					<td>⭐⭐ 需配一次 Token 和 yaml</td>
			</tr>
	</tbody>
</table>
<p>两种方式不冲突，可以同时使用——配好 Actions 后日常自动部署，偶尔需要手动推也完全可以。</p>
<p>至此，Hugo 博客的搭建、配置和部署就全部完成了 🎉</p>

        
        <hr><p>本文2026-07-11首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2026-07-17</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>记录</category>
      
    </item>
    
  </channel>
</rss>
