<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>教程 on 我的博客</title><link>https://liu-houliang.github.io/hugo-stack-starter/categories/tutorial/</link><description>Recent content in 教程 on 我的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://liu-houliang.github.io/hugo-stack-starter/categories/tutorial/index.xml" rel="self" type="application/rss+xml"/><item><title>快速开始：使用 Template 一键部署博客</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/hello-world/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/hello-world/</guid><description>&lt;h2 id="欢迎使用-hugo-theme-stack-starter"&gt;&lt;a href="#%e6%ac%a2%e8%bf%8e%e4%bd%bf%e7%94%a8-hugo-theme-stack-starter" class="header-anchor"&gt;&lt;/a&gt;欢迎使用 Hugo Theme Stack Starter
&lt;/h2&gt;&lt;p&gt;这是一个基于 &lt;strong&gt;Hugo Theme Stack v4&lt;/strong&gt; 的开箱即用博客模板，内置美化增强、双语支持和 GitHub Actions 自动部署，&lt;strong&gt;无需本地安装任何工具就能快速上手&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="方式一github-template-一键部署推荐"&gt;&lt;a href="#%e6%96%b9%e5%bc%8f%e4%b8%80github-template-%e4%b8%80%e9%94%ae%e9%83%a8%e7%bd%b2%e6%8e%a8%e8%8d%90" class="header-anchor"&gt;&lt;/a&gt;方式一：GitHub Template 一键部署（推荐）
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;这是最简单的方式，全程在浏览器中完成。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="第-1-步使用模板创建你的仓库"&gt;&lt;a href="#%e7%ac%ac-1-%e6%ad%a5%e4%bd%bf%e7%94%a8%e6%a8%a1%e6%9d%bf%e5%88%9b%e5%bb%ba%e4%bd%a0%e7%9a%84%e4%bb%93%e5%ba%93" class="header-anchor"&gt;&lt;/a&gt;第 1 步：使用模板创建你的仓库
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打开本项目 GitHub 页面&lt;/li&gt;
&lt;li&gt;点击右上角绿色按钮 &lt;strong&gt;&amp;ldquo;Use this template&amp;rdquo;&lt;/strong&gt; → &lt;strong&gt;&amp;ldquo;Create a new repository&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;填写仓库名称（如 &lt;code&gt;my-blog&lt;/code&gt;），选择 &lt;strong&gt;Public&lt;/strong&gt;（GitHub Pages 免费版需要公开仓库）&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;&amp;ldquo;Create repository&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-2-步开启-github-pages"&gt;&lt;a href="#%e7%ac%ac-2-%e6%ad%a5%e5%bc%80%e5%90%af-github-pages" class="header-anchor"&gt;&lt;/a&gt;第 2 步：开启 GitHub Pages
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;进入你新建的仓库，点击 &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;&amp;ldquo;Source&amp;rdquo;&lt;/strong&gt; 下选择 &lt;strong&gt;&amp;ldquo;GitHub Actions&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;保存&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-3-步修改配置"&gt;&lt;a href="#%e7%ac%ac-3-%e6%ad%a5%e4%bf%ae%e6%94%b9%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;第 3 步：修改配置
&lt;/h3&gt;&lt;p&gt;在 GitHub 网页上直接编辑 &lt;code&gt;config/_default/config.toml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 改为你的 GitHub Pages 地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;baseurl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://你的用户名.github.io/仓库名/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;我的博客&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="第-4-步推送触发自动部署"&gt;&lt;a href="#%e7%ac%ac-4-%e6%ad%a5%e6%8e%a8%e9%80%81%e8%a7%a6%e5%8f%91%e8%87%aa%e5%8a%a8%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;第 4 步：推送触发自动部署
&lt;/h3&gt;&lt;p&gt;任何一次代码提交都会触发 GitHub Actions 自动构建并部署。稍等 1-2 分钟后，访问你的 GitHub Pages 地址即可看到博客！&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="方式二本地开发"&gt;&lt;a href="#%e6%96%b9%e5%bc%8f%e4%ba%8c%e6%9c%ac%e5%9c%b0%e5%bc%80%e5%8f%91" class="header-anchor"&gt;&lt;/a&gt;方式二：本地开发
&lt;/h2&gt;&lt;p&gt;如果你想在本地预览和编写：&lt;/p&gt;
&lt;h3 id="安装-hugo扩展版"&gt;&lt;a href="#%e5%ae%89%e8%a3%85-hugo%e6%89%a9%e5%b1%95%e7%89%88" class="header-anchor"&gt;&lt;/a&gt;安装 Hugo（扩展版）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Windows（使用 Scoop）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scoop install hugo-extended
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux（apt）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install hugo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;验证安装（需要 Extended 版本）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 输出应包含 extended&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="克隆并运行"&gt;&lt;a href="#%e5%85%8b%e9%9a%86%e5%b9%b6%e8%bf%90%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;克隆并运行
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/你的用户名/my-blog.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问 &lt;code&gt;http://localhost:1313&lt;/code&gt; 即可预览。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="基本配置说明"&gt;&lt;a href="#%e5%9f%ba%e6%9c%ac%e9%85%8d%e7%bd%ae%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;基本配置说明
&lt;/h2&gt;&lt;p&gt;所有配置文件在 &lt;code&gt;config/_default/&lt;/code&gt; 目录下：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件&lt;/th&gt;
 &lt;th&gt;作用&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;config.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;站点标题、域名、语言&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;languages.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;多语言设置（中/英）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;params.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;主题参数（评论、首页布局等）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;params.zh.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;中文专属参数（头像、副标题）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;menu.zh.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;中文导航菜单&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="必须修改的配置"&gt;&lt;a href="#%e5%bf%85%e9%a1%bb%e4%bf%ae%e6%94%b9%e7%9a%84%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;必须修改的配置
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1. 站点标题和域名&lt;/strong&gt; (&lt;code&gt;config.toml&lt;/code&gt;)：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;baseurl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://你的域名/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;我的博客&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. 你的头像和介绍&lt;/strong&gt; (&lt;code&gt;params.zh.toml&lt;/code&gt;)：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subtitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;你的个性签名&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;img/avatar.jpg&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 替换 assets/img/avatar.jpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. 运行时间&lt;/strong&gt; (&lt;code&gt;params.toml&lt;/code&gt;)：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;launchDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-01&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 博客建站日期&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="目录结构"&gt;&lt;a href="#%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;目录结构
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;my-blog/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .github/workflows/ # GitHub Actions 自动部署（无需修改）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── assets/scss/ # 样式定制
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── custom.scss # 颜色、全局样式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── partials/custom-components/ # 组件样式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── config/_default/ # 所有配置文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── content/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── post/ # 博客文章（在这里写作）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── layouts/ # 自定义布局和 Shortcodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── static/ # 静态资源（图片等）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="下一步"&gt;&lt;a href="#%e4%b8%8b%e4%b8%80%e6%ad%a5" class="header-anchor"&gt;&lt;/a&gt;下一步
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;📖 &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/theme-customization/" &gt;&lt;strong&gt;主题美化介绍&lt;/strong&gt;&lt;/a&gt; — 了解本模板做了哪些改动&lt;/li&gt;
&lt;li&gt;💬 &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/waline-setup/" &gt;&lt;strong&gt;配置 Waline 评论&lt;/strong&gt;&lt;/a&gt; — 为博客添加评论功能&lt;/li&gt;
&lt;li&gt;✏️ &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/start-writing/" &gt;&lt;strong&gt;开始写第一篇博客&lt;/strong&gt;&lt;/a&gt; — 学习 Markdown 和多语言写作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;祝你写作愉快！🎉&lt;/p&gt;</description></item><item><title>主题美化介绍：我做了哪些改动</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/theme-customization/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/theme-customization/</guid><description>&lt;p&gt;本模板基于 &lt;a class="link" href="https://github.com/CaiJimmy/hugo-theme-stack" target="_blank" rel="noopener"
 &gt;Hugo Theme Stack v4&lt;/a&gt; 开发，在保持原有功能完整性的基础上，进行了一系列视觉和交互上的美化。&lt;/p&gt;
&lt;p&gt;所有修改都通过 Hugo 的覆盖机制实现（在 &lt;code&gt;assets/&lt;/code&gt; 和 &lt;code&gt;layouts/&lt;/code&gt; 中创建同名文件），&lt;strong&gt;不修改主题源代码&lt;/strong&gt;，方便随时升级主题版本。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-全局配色系统"&gt;&lt;a href="#1-%e5%85%a8%e5%b1%80%e9%85%8d%e8%89%b2%e7%b3%bb%e7%bb%9f" class="header-anchor"&gt;&lt;/a&gt;1. 全局配色系统
&lt;/h2&gt;&lt;p&gt;重新定义了整套颜色变量，采用深蓝 + 暖米白的配色方案：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;亮色模式&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;背景色：暖米白 &lt;code&gt;#f8f7f2&lt;/code&gt;（比纯白更护眼）&lt;/li&gt;
&lt;li&gt;主色调：深海蓝 &lt;code&gt;#1B365D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;卡片背景：&lt;code&gt;#fdfdfb&lt;/code&gt;（微暖的白）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;暗色模式&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;背景色：&lt;code&gt;#101214&lt;/code&gt;（深灰黑）&lt;/li&gt;
&lt;li&gt;卡片背景：&lt;code&gt;#1c2128&lt;/code&gt;（GitHub 暗色风格）&lt;/li&gt;
&lt;li&gt;暗色模式下图片自动降亮，hover 后恢复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;修改位置：&lt;code&gt;assets/scss/custom.scss&lt;/code&gt; 中的 &lt;code&gt;:root&lt;/code&gt; 变量。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-mac-风格代码块"&gt;&lt;a href="#2-mac-%e9%a3%8e%e6%a0%bc%e4%bb%a3%e7%a0%81%e5%9d%97" class="header-anchor"&gt;&lt;/a&gt;2. Mac 风格代码块
&lt;/h2&gt;&lt;p&gt;原始主题的代码块较为简洁，本模板对其进行了全面美化：&lt;/p&gt;
&lt;h3 id="顶部装饰栏"&gt;&lt;a href="#%e9%a1%b6%e9%83%a8%e8%a3%85%e9%a5%b0%e6%a0%8f" class="header-anchor"&gt;&lt;/a&gt;顶部装饰栏
&lt;/h3&gt;&lt;p&gt;为每个代码块添加了 macOS 风格的三色圆点装饰（红、黄、绿），模拟终端窗口外观。&lt;/p&gt;
&lt;h3 id="复制按钮重设计"&gt;&lt;a href="#%e5%a4%8d%e5%88%b6%e6%8c%89%e9%92%ae%e9%87%8d%e8%ae%be%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;复制按钮重设计
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;从不易发现的图标按钮改为悬浮在标题栏右侧的文字按钮&lt;/li&gt;
&lt;li&gt;亮色模式：毛玻璃风格（backdrop-filter: blur）&lt;/li&gt;
&lt;li&gt;暗色模式：深色半透明背景&lt;/li&gt;
&lt;li&gt;点击后按钮文字变为&amp;quot;✓ Copied!&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="自动折叠长代码块"&gt;&lt;a href="#%e8%87%aa%e5%8a%a8%e6%8a%98%e5%8f%a0%e9%95%bf%e4%bb%a3%e7%a0%81%e5%9d%97" class="header-anchor"&gt;&lt;/a&gt;自动折叠长代码块
&lt;/h3&gt;&lt;p&gt;超过 600px 高度的代码块会自动折叠，底部显示&amp;quot;展开代码&amp;quot;按钮：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;折叠时底部有渐变遮罩&lt;/li&gt;
&lt;li&gt;点击展开后，按钮变为&amp;quot;收起代码&amp;quot;&lt;/li&gt;
&lt;li&gt;收起时自动滚动回代码块顶部，防止页面位置混乱&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="滚动条美化"&gt;&lt;a href="#%e6%bb%9a%e5%8a%a8%e6%9d%a1%e7%be%8e%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;滚动条美化
&lt;/h3&gt;&lt;p&gt;代码块的横向滚动条默认透明，鼠标悬停时才显现，保持界面整洁。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-首页双栏网格布局"&gt;&lt;a href="#3-%e9%a6%96%e9%a1%b5%e5%8f%8c%e6%a0%8f%e7%bd%91%e6%a0%bc%e5%b8%83%e5%b1%80" class="header-anchor"&gt;&lt;/a&gt;3. 首页双栏网格布局
&lt;/h2&gt;&lt;p&gt;在 PC 端（宽度 ≥ 1024px），首页文章列表变为 2 列网格展示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每篇文章以卡片形式呈现，包含封面图、标题、摘要和元信息&lt;/li&gt;
&lt;li&gt;卡片 hover 时有轻微上浮动画&lt;/li&gt;
&lt;li&gt;文章标题和摘要超出时自动截断（2 行）&lt;/li&gt;
&lt;li&gt;移动端自动恢复为单列列表&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;开启方式：在 &lt;code&gt;params.toml&lt;/code&gt; 中设置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;grid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-移动端导航重设计"&gt;&lt;a href="#4-%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%af%bc%e8%88%aa%e9%87%8d%e8%ae%be%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;4. 移动端导航重设计
&lt;/h2&gt;&lt;p&gt;原主题的移动端导航较基础，本模板完全重写了移动端体验：&lt;/p&gt;
&lt;h3 id="顶部悬浮导航栏"&gt;&lt;a href="#%e9%a1%b6%e9%83%a8%e6%82%ac%e6%b5%ae%e5%af%bc%e8%88%aa%e6%a0%8f" class="header-anchor"&gt;&lt;/a&gt;顶部悬浮导航栏
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;固定在顶部（sticky），随页面滚动保持可见&lt;/li&gt;
&lt;li&gt;左侧：头像 + 站点名称（点击回首页）&lt;/li&gt;
&lt;li&gt;右侧：明暗切换、语言切换、搜索、汉堡菜单&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="汉堡菜单"&gt;&lt;a href="#%e6%b1%89%e5%a0%a1%e8%8f%9c%e5%8d%95" class="header-anchor"&gt;&lt;/a&gt;汉堡菜单
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;点击展开侧边菜单，带有淡入动画&lt;/li&gt;
&lt;li&gt;菜单展开时顶栏标题淡出，避免遮挡&lt;/li&gt;
&lt;li&gt;当前页面菜单项高亮显示&lt;/li&gt;
&lt;li&gt;屏幕宽度恢复时自动关闭&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="搜索框"&gt;&lt;a href="#%e6%90%9c%e7%b4%a2%e6%a1%86" class="header-anchor"&gt;&lt;/a&gt;搜索框
&lt;/h3&gt;&lt;p&gt;桌面端侧边栏的搜索框经过重新设计，与卡片样式一致。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-博客统计页stats"&gt;&lt;a href="#5-%e5%8d%9a%e5%ae%a2%e7%bb%9f%e8%ae%a1%e9%a1%b5stats" class="header-anchor"&gt;&lt;/a&gt;5. 博客统计页（Stats）
&lt;/h2&gt;&lt;p&gt;新增了一个功能丰富的 &lt;code&gt;/stats/&lt;/code&gt; 统计页，包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;摘要卡片&lt;/strong&gt;：总文章数、总字数、运行天数（动画数字滚动）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分类分布&lt;/strong&gt;：带进度条的分类列表，可点击进入分类页&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;热门标签&lt;/strong&gt;：标签云展示（前 30 个标签）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写作习惯&lt;/strong&gt;：按周几和时段分析发布习惯（基于 Git 提交时间）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;年度热力图&lt;/strong&gt;：GitHub 风格的贡献热力图（近一年的发布记录）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;配置页面入口：在 &lt;code&gt;content/stats/index.zh.md&lt;/code&gt; 中设置 &lt;code&gt;layout: stats&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6-footer-运行时长"&gt;&lt;a href="#6-footer-%e8%bf%90%e8%a1%8c%e6%97%b6%e9%95%bf" class="header-anchor"&gt;&lt;/a&gt;6. Footer 运行时长
&lt;/h2&gt;&lt;p&gt;Footer 新增博客运行时长展示，会计算从建站日期到当前的天数、小时、分钟。&lt;/p&gt;
&lt;p&gt;点击可跳转到 Stats 统计页。&lt;/p&gt;
&lt;p&gt;配置建站日期：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;launchDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-09-09&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-自定义-shortcodes"&gt;&lt;a href="#7-%e8%87%aa%e5%ae%9a%e4%b9%89-shortcodes" class="header-anchor"&gt;&lt;/a&gt;7. 自定义 Shortcodes
&lt;/h2&gt;&lt;h3 id="时间线timeline"&gt;&lt;a href="#%e6%97%b6%e9%97%b4%e7%ba%bftimeline" class="header-anchor"&gt;&lt;/a&gt;时间线（Timeline）
&lt;/h3&gt;&lt;p&gt;适合展示成长经历、技术栈演进等内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;开始学习 Hugo 建站
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-06&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;博客正式上线
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="标题分割线title"&gt;&lt;a href="#%e6%a0%87%e9%a2%98%e5%88%86%e5%89%b2%e7%ba%bftitle" class="header-anchor"&gt;&lt;/a&gt;标题分割线（Title）
&lt;/h3&gt;&lt;p&gt;适合日记、健身记录等需要分段标题的内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;晨练记录&amp;#34; &amp;#34;green&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;支持颜色：&lt;code&gt;red&lt;/code&gt;、&lt;code&gt;orange&lt;/code&gt;、&lt;code&gt;yellow&lt;/code&gt;、&lt;code&gt;green&lt;/code&gt;、&lt;code&gt;teal&lt;/code&gt;、&lt;code&gt;blue&lt;/code&gt;、&lt;code&gt;indigo&lt;/code&gt;、&lt;code&gt;purple&lt;/code&gt;、&lt;code&gt;pink&lt;/code&gt;、&lt;code&gt;gray&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="如何自定义颜色"&gt;&lt;a href="#%e5%a6%82%e4%bd%95%e8%87%aa%e5%ae%9a%e4%b9%89%e9%a2%9c%e8%89%b2" class="header-anchor"&gt;&lt;/a&gt;如何自定义颜色
&lt;/h2&gt;&lt;p&gt;编辑 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;，修改 &lt;code&gt;:root&lt;/code&gt; 中的变量：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1B365D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 主色调（按钮、链接等） */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f8f7f2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 页面背景 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fdfdfb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 卡片背景 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存后 Hugo 会自动重新编译，浏览器实时刷新。&lt;/p&gt;</description></item><item><title>配置 Waline 评论区</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/waline-setup/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/waline-setup/</guid><description>&lt;p&gt;&lt;a class="link" href="https://waline.js.org/" target="_blank" rel="noopener"
 &gt;Waline&lt;/a&gt; 是一款安全、简洁的评论系统，支持 Markdown，免费部署，无需用户注册即可评论。&lt;/p&gt;
&lt;p&gt;本模板已内置 Waline 集成，只需部署好服务端并填写一行配置即可启用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第一步部署-waline-服务端"&gt;&lt;a href="#%e7%ac%ac%e4%b8%80%e6%ad%a5%e9%83%a8%e7%bd%b2-waline-%e6%9c%8d%e5%8a%a1%e7%ab%af" class="header-anchor"&gt;&lt;/a&gt;第一步：部署 Waline 服务端
&lt;/h2&gt;&lt;p&gt;请参考 &lt;strong&gt;Waline 官方快速上手文档&lt;/strong&gt; 完成服务端的部署：&lt;/p&gt;
&lt;p&gt;👉 &lt;a class="link" href="https://waline.js.org/guide/get-started/" target="_blank" rel="noopener"
 &gt;https://waline.js.org/guide/get-started/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;官方文档提供了在 Vercel 上的&lt;strong&gt;免费一键部署&lt;/strong&gt;方案，整个过程大约 5 分钟。&lt;/p&gt;
&lt;p&gt;部署完成后，你会获得一个 Waline 服务地址，类似：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://your-waline-project.vercel.app/&lt;/code&gt; （默认 Vercel 域名）&lt;/li&gt;
&lt;li&gt;或者你绑定的自定义域名&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;记录这个地址，下一步会用到。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第二步在本模板中配置"&gt;&lt;a href="#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e5%9c%a8%e6%9c%ac%e6%a8%a1%e6%9d%bf%e4%b8%ad%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;第二步：在本模板中配置
&lt;/h2&gt;&lt;p&gt;编辑 &lt;code&gt;config/_default/params.toml&lt;/code&gt;，填入你的服务地址：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;waline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;serverURL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-waline-project.vercel.app/&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# ← 填入你的地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;pageview&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c"&gt;# 同时开启文章阅读量统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# 可选：自定义表情包（默认微博表情）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;emoji&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://unpkg.com/@waline/emojis@1.0.1/weibo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# 评论必填字段&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;requiredMeta&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Admin&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 管理员标识&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存后重启 &lt;code&gt;hugo server&lt;/code&gt;，文章页面底部会出现评论区。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="功能说明"&gt;&lt;a href="#%e5%8a%9f%e8%83%bd%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;功能说明
&lt;/h2&gt;&lt;h3 id="阅读量统计"&gt;&lt;a href="#%e9%98%85%e8%af%bb%e9%87%8f%e7%bb%9f%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;阅读量统计
&lt;/h3&gt;&lt;p&gt;设置 &lt;code&gt;pageview = true&lt;/code&gt; 后，文章头部会自动显示阅读量（需要 Waline 服务端支持）。&lt;/p&gt;
&lt;h3 id="评论管理后台"&gt;&lt;a href="#%e8%af%84%e8%ae%ba%e7%ae%a1%e7%90%86%e5%90%8e%e5%8f%b0" class="header-anchor"&gt;&lt;/a&gt;评论管理后台
&lt;/h3&gt;&lt;p&gt;访问 &lt;code&gt;https://your-waline-project.vercel.app/ui/&lt;/code&gt; 进入管理界面，第一个注册的账号自动成为管理员，可以审核、删除评论。&lt;/p&gt;
&lt;h3 id="邮件通知"&gt;&lt;a href="#%e9%82%ae%e4%bb%b6%e9%80%9a%e7%9f%a5" class="header-anchor"&gt;&lt;/a&gt;邮件通知
&lt;/h3&gt;&lt;p&gt;有人回复时可以通过邮件通知博主，需要在 Vercel 环境变量中配置 SMTP 信息，详见 &lt;a class="link" href="https://waline.js.org/guide/features/notification.html" target="_blank" rel="noopener"
 &gt;官方文档 - 评论通知&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="常见问题"&gt;&lt;a href="#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;常见问题
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;评论区不显示？&lt;/strong&gt;&lt;br&gt;
检查 &lt;code&gt;serverURL&lt;/code&gt; 末尾是否有斜杠 &lt;code&gt;/&lt;/code&gt;，以及 Vercel 服务是否正常运行（直接访问 serverURL 应该能看到 Waline 欢迎页）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cookie 提示遮住评论区？&lt;/strong&gt;&lt;br&gt;
如果开启了 Cookie 同意功能，用户需先接受「功能性 Cookie」后评论区才会显示。可以在 &lt;code&gt;params.toml&lt;/code&gt; 中关闭 Cookie 提示，或引导用户接受。&lt;/p&gt;</description></item><item><title>开始写博客：Markdown 入门与多语言写作</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/start-writing/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/start-writing/</guid><description>&lt;h2 id="创建第一篇文章"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e7%ac%ac%e4%b8%80%e7%af%87%e6%96%87%e7%ab%a0" class="header-anchor"&gt;&lt;/a&gt;创建第一篇文章
&lt;/h2&gt;&lt;h3 id="方式一使用命令创建推荐"&gt;&lt;a href="#%e6%96%b9%e5%bc%8f%e4%b8%80%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e5%88%9b%e5%bb%ba%e6%8e%a8%e8%8d%90" class="header-anchor"&gt;&lt;/a&gt;方式一：使用命令创建（推荐）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建中文文章&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo new content post/my-first-post/index.zh.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 同时创建对应的英文版&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo new content post/my-first-post/index.en.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hugo 会根据 &lt;code&gt;archetypes/default.md&lt;/code&gt; 模板自动填充初始内容。&lt;/p&gt;
&lt;h3 id="方式二手动创建"&gt;&lt;a href="#%e6%96%b9%e5%bc%8f%e4%ba%8c%e6%89%8b%e5%8a%a8%e5%88%9b%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;方式二：手动创建
&lt;/h3&gt;&lt;p&gt;在 &lt;code&gt;content/post/&lt;/code&gt; 下新建一个文件夹，然后在其中创建 &lt;code&gt;index.zh.md&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── post/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── my-first-post/ ← 文章目录（名称即 URL）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── index.zh.md ← 中文正文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── index.en.md ← 英文正文（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── cover.jpg ← 封面图（可选）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="front-matter-说明"&gt;&lt;a href="#front-matter-%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;Front Matter 说明
&lt;/h2&gt;&lt;p&gt;每篇文章顶部的 &lt;code&gt;---&lt;/code&gt; 之间的部分叫 Front Matter，用于定义文章元数据：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;文章标题&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;文章摘要，显示在列表页和 SEO 描述中&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 发布日期&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;lastmod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 最后修改日期（可选）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# true = 草稿，不会发布&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Technology &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 分类（建议只选一个）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Hugo &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 标签（可多个）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Markdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cover.jpg &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 封面图（相对于文章目录）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：&lt;code&gt;date&lt;/code&gt; 决定文章在列表中的排序顺序，未来日期的文章在本地预览时需要 &lt;code&gt;hugo server -F&lt;/code&gt; 才能显示。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="markdown-基本语法"&gt;&lt;a href="#markdown-%e5%9f%ba%e6%9c%ac%e8%af%ad%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;Markdown 基本语法
&lt;/h2&gt;&lt;h3 id="标题"&gt;&lt;a href="#%e6%a0%87%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;标题
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 二级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 三级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;#### 四级标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;文章正文中不使用一级标题（&lt;code&gt;# H1&lt;/code&gt;），因为文章的 &lt;code&gt;title&lt;/code&gt; 字段已经是 H1。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="文字样式"&gt;&lt;a href="#%e6%96%87%e5%ad%97%e6%a0%b7%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;文字样式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**粗体** 加粗
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ge"&gt;*斜体*&lt;/span&gt; 斜体
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;~~删除线~~&lt;/span&gt; 删除线
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`行内代码`&lt;/span&gt; 代码
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果：&lt;strong&gt;粗体&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、&lt;del&gt;删除线&lt;/del&gt;、&lt;code&gt;行内代码&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="链接和图片"&gt;&lt;a href="#%e9%93%be%e6%8e%a5%e5%92%8c%e5%9b%be%e7%89%87" class="header-anchor"&gt;&lt;/a&gt;链接和图片
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;链接文字&lt;/span&gt;](&lt;span class="na"&gt;https://example.com&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;内部链接&lt;/span&gt;](&lt;span class="na"&gt;/post/hello-world/&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;图片描述&lt;/span&gt;](&lt;span class="na"&gt;image.jpg&lt;/span&gt;) # 相对路径（同目录下）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;图片描述&lt;/span&gt;](&lt;span class="na"&gt;/img/photo.jpg&lt;/span&gt;) # 绝对路径（static 目录下）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="列表"&gt;&lt;a href="#%e5%88%97%e8%a1%a8" class="header-anchor"&gt;&lt;/a&gt;列表
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 无序列表项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 第二项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; 嵌套项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; 有序列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; 第二项
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; 第三项
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="代码块"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81%e5%9d%97" class="header-anchor"&gt;&lt;/a&gt;代码块
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```python
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;支持语言高亮：&lt;code&gt;python&lt;/code&gt;、&lt;code&gt;go&lt;/code&gt;、&lt;code&gt;javascript&lt;/code&gt;、&lt;code&gt;bash&lt;/code&gt;、&lt;code&gt;toml&lt;/code&gt;、&lt;code&gt;yaml&lt;/code&gt;、&lt;code&gt;markdown&lt;/code&gt; 等。&lt;/p&gt;
&lt;h3 id="引用块"&gt;&lt;a href="#%e5%bc%95%e7%94%a8%e5%9d%97" class="header-anchor"&gt;&lt;/a&gt;引用块
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;这是一段引用内容
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;可以多行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这是一段引用内容&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="表格"&gt;&lt;a href="#%e8%a1%a8%e6%a0%bc" class="header-anchor"&gt;&lt;/a&gt;表格
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 列1 | 列2 | 列3 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|-------|-------|-------|
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 内容1 | 内容2 | 内容3 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 内容4 | 内容5 | 内容6 |
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="分割线"&gt;&lt;a href="#%e5%88%86%e5%89%b2%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;分割线
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="多语言写作"&gt;&lt;a href="#%e5%a4%9a%e8%af%ad%e8%a8%80%e5%86%99%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;多语言写作
&lt;/h2&gt;&lt;p&gt;本模板默认开启中英双语支持。&lt;/p&gt;
&lt;h3 id="文件命名规则"&gt;&lt;a href="#%e6%96%87%e4%bb%b6%e5%91%bd%e5%90%8d%e8%a7%84%e5%88%99" class="header-anchor"&gt;&lt;/a&gt;文件命名规则
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件名&lt;/th&gt;
 &lt;th&gt;对应语言&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;中文&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index.en.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;英文&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;两个文件放在同一目录下，Hugo 会自动关联为同一篇文章的不同语言版本。&lt;/p&gt;
&lt;h3 id="只写中文版"&gt;&lt;a href="#%e5%8f%aa%e5%86%99%e4%b8%ad%e6%96%87%e7%89%88" class="header-anchor"&gt;&lt;/a&gt;只写中文版
&lt;/h3&gt;&lt;p&gt;如果你不想写英文版，只创建 &lt;code&gt;index.zh.md&lt;/code&gt; 即可。&lt;/p&gt;
&lt;h3 id="添加英文版"&gt;&lt;a href="#%e6%b7%bb%e5%8a%a0%e8%8b%b1%e6%96%87%e7%89%88" class="header-anchor"&gt;&lt;/a&gt;添加英文版
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在同一目录下创建 &lt;code&gt;index.en.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;翻译文章内容（Front Matter 的 &lt;code&gt;title&lt;/code&gt;、&lt;code&gt;description&lt;/code&gt; 也要翻译）&lt;/li&gt;
&lt;li&gt;图片等资源两个语言版本共享，无需复制&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;index.zh.md&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;我的第一篇文章&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;这是我的第一篇博客文章&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;内容...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;index.en.md&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;My First Post&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;This is my first blog post&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Content...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="插入图片"&gt;&lt;a href="#%e6%8f%92%e5%85%a5%e5%9b%be%e7%89%87" class="header-anchor"&gt;&lt;/a&gt;插入图片
&lt;/h2&gt;&lt;h3 id="使用文章目录下的图片推荐"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e6%96%87%e7%ab%a0%e7%9b%ae%e5%bd%95%e4%b8%8b%e7%9a%84%e5%9b%be%e7%89%87%e6%8e%a8%e8%8d%90" class="header-anchor"&gt;&lt;/a&gt;使用文章目录下的图片（推荐）
&lt;/h3&gt;&lt;p&gt;将图片放在文章目录下，然后用相对路径引用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content/post/my-post/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── index.zh.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── cover.jpg ← 封面图
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── screenshot.png ← 文章内图片
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在 Markdown 中：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;截图说明&lt;/span&gt;](&lt;span class="na"&gt;screenshot.png&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;封面图在 Front Matter 中指定：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cover.jpg&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="使用-static-目录下的图片"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8-static-%e7%9b%ae%e5%bd%95%e4%b8%8b%e7%9a%84%e5%9b%be%e7%89%87" class="header-anchor"&gt;&lt;/a&gt;使用 static 目录下的图片
&lt;/h3&gt;&lt;p&gt;将图片放在 &lt;code&gt;static/img/&lt;/code&gt; 下，用绝对路径引用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;图片&lt;/span&gt;](&lt;span class="na"&gt;img/photo.jpg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="使用本模板的-shortcodes"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e6%9c%ac%e6%a8%a1%e6%9d%bf%e7%9a%84-shortcodes" class="header-anchor"&gt;&lt;/a&gt;使用本模板的 Shortcodes
&lt;/h2&gt;&lt;h3 id="标题分割线"&gt;&lt;a href="#%e6%a0%87%e9%a2%98%e5%88%86%e5%89%b2%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;标题分割线
&lt;/h3&gt;&lt;p&gt;适合日记类文章的段落分隔：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;早晨跑步&amp;#34; &amp;#34;green&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;今天跑了 5 公里，状态不错。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;下午阅读&amp;#34; &amp;#34;blue&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;读了两章《深度工作》。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="时间线"&gt;&lt;a href="#%e6%97%b6%e9%97%b4%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;时间线
&lt;/h3&gt;&lt;p&gt;适合展示经历、成长轨迹：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;开始学习编程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-06&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;完成第一个项目
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="写作建议"&gt;&lt;a href="#%e5%86%99%e4%bd%9c%e5%bb%ba%e8%ae%ae" class="header-anchor"&gt;&lt;/a&gt;写作建议
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;文章目录名&lt;/strong&gt;即是 URL，建议用英文小写加连字符，如 &lt;code&gt;my-first-post&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;封面图&lt;/strong&gt;建议尺寸 1200×630px，这也是社交分享时的最佳尺寸&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;description&lt;/strong&gt; 不超过 160 个字符，对 SEO 友好&lt;/li&gt;
&lt;li&gt;本地预览时使用 &lt;code&gt;hugo server -D&lt;/code&gt; 可以看到草稿文章&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;祝写作顺畅！✍️&lt;/p&gt;</description></item><item><title>Shortcodes 使用指南</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/shortcodes-guide/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/shortcodes-guide/</guid><description>&lt;p&gt;Hugo Shortcodes 是在 Markdown 中嵌入特殊组件的方式。本文展示所有自定义 Shortcode 的&lt;strong&gt;实际渲染效果&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="标题分割线-title"&gt;&lt;a href="#%e6%a0%87%e9%a2%98%e5%88%86%e5%89%b2%e7%ba%bf-title" class="header-anchor"&gt;&lt;/a&gt;标题分割线 (title)
&lt;/h2&gt;&lt;p&gt;适合日记、健身记录、学习笔记等需要分段小标题的内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用法：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;标题文字&amp;#34; &amp;#34;颜色&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;实际效果——不同颜色展示：&lt;/strong&gt;&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #43a047;"&gt;绿色标题&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;这是绿色分割线下的内容，适合运动、健康类记录。&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #1e88e5;"&gt;蓝色标题&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;这是蓝色分割线下的内容，适合技术、学习类记录。&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #fb8c00;"&gt;橙色标题&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;这是橙色分割线下的内容，适合创意、设计类记录。&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #8e24aa;"&gt;紫色标题&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;这是紫色分割线下的内容，适合日记、随笔类记录。&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #E91E63;"&gt;自定义颜色 #E91E63&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;也可以直接使用十六进制颜色值。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="时间线-timeline"&gt;&lt;a href="#%e6%97%b6%e9%97%b4%e7%ba%bf-timeline" class="header-anchor"&gt;&lt;/a&gt;时间线 (timeline)
&lt;/h2&gt;&lt;p&gt;适合展示个人经历、项目里程碑、技术成长轨迹等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用法：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;内容...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;实际效果：&lt;/strong&gt;&lt;/p&gt;
&lt;ul class="timeline-container"&gt;
 

&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2024-01&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
开始学习 Hugo，了解静态博客的优势与生态。
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2024-06&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
博客正式上线，发布第一篇技术文章，收获了第一批读者。
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2025-01&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
引入 Waline 评论系统，与读者建立互动，评论区逐渐活跃。
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2025-09&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
对博客主题进行美化改造，添加 Mac 风格代码块、Stats 统计页等功能。
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;



&lt;/ul&gt;

&lt;p&gt;时间线内容支持完整 Markdown，如 &lt;strong&gt;粗体&lt;/strong&gt;、&lt;code&gt;行内代码&lt;/code&gt;、&lt;a class="link" href="#" &gt;链接&lt;/a&gt; 等。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="代码块功能主题增强"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81%e5%9d%97%e5%8a%9f%e8%83%bd%e4%b8%bb%e9%a2%98%e5%a2%9e%e5%bc%ba" class="header-anchor"&gt;&lt;/a&gt;代码块功能（主题增强）
&lt;/h2&gt;&lt;p&gt;代码块本身不是 Shortcode，但本模板对其进行了增强：&lt;/p&gt;
&lt;h3 id="复制按钮"&gt;&lt;a href="#%e5%a4%8d%e5%88%b6%e6%8c%89%e9%92%ae" class="header-anchor"&gt;&lt;/a&gt;复制按钮
&lt;/h3&gt;&lt;p&gt;每个代码块右上角都有复制按钮（在代码块的 macOS 顶栏内）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 点击右上角的复制按钮试试
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sb"&gt;`Hello, &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="自动折叠长代码"&gt;&lt;a href="#%e8%87%aa%e5%8a%a8%e6%8a%98%e5%8f%a0%e9%95%bf%e4%bb%a3%e7%a0%81" class="header-anchor"&gt;&lt;/a&gt;自动折叠长代码
&lt;/h3&gt;&lt;p&gt;超过 600px 高度的代码块会自动折叠，底部出现「展开代码」按钮。这是一段用于测试折叠功能的长代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 这段代码足够长，会触发自动折叠&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BlogStats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;posts_dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;scan_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;扫描所有文章目录&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.md&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;解析单篇文章的 front matter&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 提取 front matter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_front_matter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_front_matter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;解析 YAML front matter&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;categories:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="c1"&gt;# 简化处理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tags:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="c1"&gt;# 简化处理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; - &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lstrip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;- &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;生成统计报告&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;total_posts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;total_words&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;categories&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;tags&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)[:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BlogStats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./content/post&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scan_posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_report&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="如何创建自己的-shortcode"&gt;&lt;a href="#%e5%a6%82%e4%bd%95%e5%88%9b%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84-shortcode" class="header-anchor"&gt;&lt;/a&gt;如何创建自己的 Shortcode
&lt;/h2&gt;&lt;p&gt;在 &lt;code&gt;layouts/shortcodes/&lt;/code&gt; 下新建 HTML 文件即可。例如创建 &lt;code&gt;badge.html&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- layouts/shortcodes/badge.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; display: inline-block;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; padding: 2px 10px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; border-radius: 4px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; font-size: 12px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; font-weight: 600;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; background: {{ .Get 1 | default `var(--accent-color)` }};
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; color: {{ .Get 2 | default `#fff` }};
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ .Get 0 }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用：&lt;code&gt;{{&amp;lt; badge &amp;quot;New&amp;quot; &amp;quot;#059669&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/p&gt;</description></item><item><title>样式自定义指南</title><link>https://liu-houliang.github.io/hugo-stack-starter/post/custom-style/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/post/custom-style/</guid><description>&lt;p&gt;本模板的样式系统基于 SCSS，所有自定义样式都在 &lt;code&gt;assets/scss/&lt;/code&gt; 目录下，&lt;strong&gt;不需要修改主题源文件&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="修改主题色"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e4%b8%bb%e9%a2%98%e8%89%b2" class="header-anchor"&gt;&lt;/a&gt;修改主题色
&lt;/h2&gt;&lt;p&gt;打开 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;，修改 &lt;code&gt;:root&lt;/code&gt; 中的 CSS 变量：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* 亮色模式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1B365D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 主色调：按钮、链接、高亮 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#202A44&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 主色调深色版：hover 状态 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color-text&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#FFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 主色调上的文字颜色 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f8f7f2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 页面背景 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fdfdfb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 卡片背景 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-text-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#2D3748&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 正文文字颜色 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-scheme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* 暗色模式覆盖 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#101214&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1c2128&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存后 Hugo 自动重新编译，浏览器立即刷新。&lt;/p&gt;
&lt;h3 id="常用配色方案参考"&gt;&lt;a href="#%e5%b8%b8%e7%94%a8%e9%85%8d%e8%89%b2%e6%96%b9%e6%a1%88%e5%8f%82%e8%80%83" class="header-anchor"&gt;&lt;/a&gt;常用配色方案参考
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;紫色系&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#7C3AED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#6D28D9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;绿色系&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#059669&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#047857&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;橙色系&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#EA580C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#C2410C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="修改代码块样式"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e4%bb%a3%e7%a0%81%e5%9d%97%e6%a0%b7%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;修改代码块样式
&lt;/h2&gt;&lt;p&gt;代码块相关样式在 &lt;code&gt;assets/scss/partials/custom-components/_code.scss&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id="关闭-mac-风格顶栏"&gt;&lt;a href="#%e5%85%b3%e9%97%ad-mac-%e9%a3%8e%e6%a0%bc%e9%a1%b6%e6%a0%8f" class="header-anchor"&gt;&lt;/a&gt;关闭 Mac 风格顶栏
&lt;/h3&gt;&lt;p&gt;如果不喜欢 macOS 三色圆点，注释掉以下代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 注释掉这个 before 伪元素即可关闭顶栏 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;.article-content .highlight:before {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="修改折叠阈值"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e6%8a%98%e5%8f%a0%e9%98%88%e5%80%bc" class="header-anchor"&gt;&lt;/a&gt;修改折叠阈值
&lt;/h3&gt;&lt;p&gt;在 &lt;code&gt;_code.scss&lt;/code&gt; 和 &lt;code&gt;layouts/_partials/footer/custom.html&lt;/code&gt; 中，将 &lt;code&gt;600&lt;/code&gt; 改为你想要的像素值：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* _code.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.collapsed&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;max-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 改为你想要的高度 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* custom.html 中的 JS */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MAX_HEIGHT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* 与 CSS 保持一致 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="添加自定义字体"&gt;&lt;a href="#%e6%b7%bb%e5%8a%a0%e8%87%aa%e5%ae%9a%e4%b9%89%e5%ad%97%e4%bd%93" class="header-anchor"&gt;&lt;/a&gt;添加自定义字体
&lt;/h2&gt;&lt;p&gt;在 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt; 中添加 Google Fonts 并设置字体：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 引入字体 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url(&amp;#39;https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;700&amp;amp;display=swap&amp;#39;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 应用到正文 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Noto Serif SC&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="ni"&gt;serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 应用到文章内容 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;.article-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Noto Serif SC&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="ni"&gt;serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：国内访问 Google Fonts 可能较慢，可以考虑使用 jsDelivr 加速或自托管字体。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="组件样式文件说明"&gt;&lt;a href="#%e7%bb%84%e4%bb%b6%e6%a0%b7%e5%bc%8f%e6%96%87%e4%bb%b6%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;组件样式文件说明
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件&lt;/th&gt;
 &lt;th&gt;作用&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;custom.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;全局变量、TOC 滚动条&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_code.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;代码块全部样式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_footer.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Footer 运行时长按钮&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_homepage-grid.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;首页双栏网格&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_mobile-menu.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;移动端顶部导航栏&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_timeline.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;时间线 Shortcode 样式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_title.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;标题分割线 Shortcode 样式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每个文件职责单一，可以独立修改，不互相影响。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="关闭首页网格布局"&gt;&lt;a href="#%e5%85%b3%e9%97%ad%e9%a6%96%e9%a1%b5%e7%bd%91%e6%a0%bc%e5%b8%83%e5%b1%80" class="header-anchor"&gt;&lt;/a&gt;关闭首页网格布局
&lt;/h2&gt;&lt;p&gt;如果偏好传统的单列列表，编辑 &lt;code&gt;params.toml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;grid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="覆盖主题布局"&gt;&lt;a href="#%e8%a6%86%e7%9b%96%e4%b8%bb%e9%a2%98%e5%b8%83%e5%b1%80" class="header-anchor"&gt;&lt;/a&gt;覆盖主题布局
&lt;/h2&gt;&lt;p&gt;如果需要修改主题的其他布局文件，在 &lt;code&gt;layouts/&lt;/code&gt; 目录下创建同名文件即可覆盖：&lt;/p&gt;
&lt;p&gt;例如，要修改文章页布局，在 &lt;code&gt;hugo-theme-stack-v4/layouts/single.html&lt;/code&gt; 中查看原文件，然后复制到 &lt;code&gt;layouts/single.html&lt;/code&gt; 并修改。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Hugo 的覆盖机制会优先使用项目根目录下的同名文件，主题文件作为后备。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>