<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>高级 on OINK</title>
    <link>https://oink.pgsty.com/zh/categories/%E9%AB%98%E7%BA%A7/</link>
    <description>Recent content in 高级 on OINK</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    
    
      <lastBuildDate>Fri, 14 Aug 2026 21:56:46 +0800</lastBuildDate>
    
    
      <atom:link href="https://oink.pgsty.com/zh/categories/%E9%AB%98%E7%BA%A7/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>键盘导航</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/keyboard/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/keyboard/</guid>
        <description>&lt;p&gt;OINK 在文档、博客与 Swagger 页面内置单键键盘导航。默认开启，所有按键都会为输入让行，站点或单页均可关闭。设计上，当前页就是侧栏的隐含光标，章节跳转复用渲染后的页面目录，所有动作都委托给主题的既有机制，不维护第二套平行状态。&lt;/p&gt;&#xA;&lt;h2 id=&#34;shortcuts&#34;&gt;快捷键&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#shortcuts&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;sidebar&#34;&gt;侧边栏&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sidebar&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;w&lt;/code&gt;、&lt;code&gt;s&lt;/code&gt;、&lt;code&gt;a&lt;/code&gt;、&lt;code&gt;d&lt;/code&gt;&#xA;一步到位地驾驭侧边栏：当前页面所在项就是隐含的起点，首次按键即从那里移动或折叠。焦点行的底色比“当前页”药丸更深一档，“我在哪”与“光标在哪”一眼可辨。窄屏下侧栏收进抽屉时，首次按键会先打开抽屉；桌面侧栏若已折叠，同一次按键会先恢复侧栏，并继续完成所请求的移动或折叠。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;按键&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;行为&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;w&lt;/code&gt; / &lt;code&gt;↑&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;焦点移到上一个可见项&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;s&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;焦点移到下一个可见项&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;a&lt;/code&gt; / &lt;code&gt;←&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;折叠焦点分组；叶子节点则跳到父级&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;d&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;展开焦点分组；已展开则进入第一个子项&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Enter&lt;/code&gt; / &lt;code&gt;Space&lt;/code&gt; / &lt;code&gt;g&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;打开焦点页面&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Escape&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;焦点返回正文&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;方向键只在焦点位于侧边栏内时作用于树——在正文中保持浏览器原生滚动行为。RTL 语言下&#xA;&lt;code&gt;←&lt;/code&gt;/&lt;code&gt;→&lt;/code&gt; 随阅读方向对调。&lt;/p&gt;&#xA;&lt;h3 id=&#34;reading&#34;&gt;阅读&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#reading&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;按键&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;行为&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;j&lt;/code&gt; / &lt;code&gt;k&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;沿页面目录跳到下一节 / 上一节&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;q&lt;/code&gt; / &lt;code&gt;e&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;按侧边栏顺序前往上一篇 / 下一篇&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;隐藏/恢复全部导航外壳（专注阅读模式）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;j&lt;/code&gt; 与 &lt;code&gt;k&lt;/code&gt;&#xA;跟右侧目录同源，以固定 100ms 的快速 ease-out 滑动落位；连续按键时，每次都会继续前进一个目录项，无需等待上一段动画。深入某一节时&#xA;&lt;code&gt;k&lt;/code&gt; 会先回到本节起点，无标题的页面退化为同样的短促滑动。&lt;code&gt;h&lt;/code&gt;&#xA;的阅读模式在会话内被记住，用 &lt;code&gt;h&lt;/code&gt;&#xA;会隐藏顶部导航栏、左右栏、浮动控件与页脚。状态会在同一标签页会话中于首帧前恢复，因此用&#xA;&lt;code&gt;q&lt;/code&gt;/&lt;code&gt;e&lt;/code&gt; 翻页既不会丢失也不会闪烁；侧栏主动隐藏时，WASD 保持静默。&lt;/p&gt;</description>
      </item>
    <item>
        <title>搜索与命令面板</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/search/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/search/</guid>
        <description>&lt;p&gt;OINK 默认且推荐本地搜索：Hugo 为每种语言生成独立索引，Lunr 与 CJK 回退都从同源资源提供。站点不需要公共爬虫、外部账户、CDN 或网络连接就能完成构建和搜索。&lt;/p&gt;&#xA;&lt;p&gt;Google Custom Search 与 Algolia&#xA;DocSearch 作为兼容集成保留，默认关闭。&lt;strong&gt;同一时间只能启用一种搜索实现。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;enable-local-search&#34;&gt;启用本地搜索&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#enable-local-search&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--titled&#34; id=&#34;td-code-5fee8be2-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;yaml&#34; data-line-count=&#34;5&#34; role=&#34;group&#34; aria-labelledby=&#34;td-code-5fee8be2-fence-0-title&#34;&gt;&#xA;  &lt;div class=&#34;td-code__header&#34;&gt;&#xA;    &lt;span class=&#34;td-code__filename&#34; id=&#34;td-code-5fee8be2-fence-0-title&#34; title=&#34;hugo.yaml&#34;&gt;hugo.yaml&lt;/span&gt;&lt;div class=&#34;td-code__utilities&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;YAML&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-5fee8be2-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;offlineSearch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;offlineSearchIndex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# summary | content&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;offlineSearchSummaryLength&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;offlineSearchMaxResults&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-fields&#34;&gt;&#xA;  &lt;dl class=&#34;td-fields__list&#34;&gt;&#xA;    &lt;div class=&#34;td-field&#34;&gt;&#xA;      &lt;dt class=&#34;td-field__term&#34;&gt;&#xA;        &lt;code class=&#34;td-field__name&#34;&gt;offlineSearch&lt;/code&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__type&#34;&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/span&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__required&#34;&gt;required&lt;/span&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__default&#34;&gt;default: &lt;code&gt;false&lt;/code&gt;&lt;/span&gt;&#xA;      &lt;/dt&gt;&#xA;      &lt;dd class=&#34;td-field__description&#34;&gt;&lt;p&gt;启用本地索引与命令面板。不要同时配置 &lt;code&gt;gcs_engine_id&lt;/code&gt; 或&#xA;&lt;code&gt;params.search.algolia&lt;/code&gt;。&lt;/p&gt;&lt;/dd&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;td-field&#34;&gt;&#xA;      &lt;dt class=&#34;td-field__term&#34;&gt;&#xA;        &lt;code class=&#34;td-field__name&#34;&gt;offlineSearchIndex&lt;/code&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__type&#34;&gt;&lt;code&gt;string&lt;/code&gt;&lt;/span&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__default&#34;&gt;default: &lt;code&gt;content&lt;/code&gt;&lt;/span&gt;&#xA;      &lt;/dt&gt;&#xA;      &lt;dd class=&#34;td-field__description&#34;&gt;&lt;p&gt;&lt;code&gt;summary&lt;/code&gt; 只索引标题、描述与摘要；&lt;code&gt;content&lt;/code&gt; 索引全部正文。&lt;strong&gt;千页级站点应该用&#xA;&lt;code&gt;summary&lt;/code&gt;&lt;/strong&gt;——&lt;code&gt;content&lt;/code&gt; 会产生数 MB 的索引，读者每次搜索都要先下载它。&lt;/p&gt;&lt;/dd&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;td-field&#34;&gt;&#xA;      &lt;dt class=&#34;td-field__term&#34;&gt;&#xA;        &lt;code class=&#34;td-field__name&#34;&gt;offlineSearchSummaryLength&lt;/code&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__type&#34;&gt;&lt;code&gt;integer&lt;/code&gt;&lt;/span&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__default&#34;&gt;default: &lt;code&gt;70&lt;/code&gt;&lt;/span&gt;&#xA;      &lt;/dt&gt;&#xA;      &lt;dd class=&#34;td-field__description&#34;&gt;&lt;p&gt;结果摘要的长度。&lt;/p&gt;&lt;/dd&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;td-field&#34;&gt;&#xA;      &lt;dt class=&#34;td-field__term&#34;&gt;&#xA;        &lt;code class=&#34;td-field__name&#34;&gt;offlineSearchMaxResults&lt;/code&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__type&#34;&gt;&lt;code&gt;integer&lt;/code&gt;&lt;/span&gt;&#xA;        &lt;span class=&#34;visually-hidden&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;td-field__default&#34;&gt;default: &lt;code&gt;10&lt;/code&gt;&lt;/span&gt;&#xA;      &lt;/dt&gt;&#xA;      &lt;dd class=&#34;td-field__description&#34;&gt;&lt;p&gt;最多显示几条结果。数值要保证对话框在移动端仍然好用。&lt;/p&gt;&lt;/dd&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/dl&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;构建后每种语言会生成一个索引：&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-5fee8be2-fence-1&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;text&#34; data-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;TEXT&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-5fee8be2-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public/offline-search-index.en.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public/offline-search-index.zh.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-alert td-alert--md alert alert-important&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;td-alert-heading alert-heading&#34; role=&#34;heading&#34; aria-level=&#34;4&#34;&gt;子路径部署时，确认浏览器是从配置的 &lt;code&gt;baseURL&lt;/code&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-alert-body&#34;&gt;&#xA;    &lt;p&gt;下请求索引，而不是域名根目录。这是搜索「没结果」最常见的原因，而且页面本身看起来是正常的。&lt;/p&gt;</description>
      </item>
    <item>
        <title>打印支持</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/print/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/print/</guid>
        <description>&lt;p&gt;大多数浏览器都能很好地打印单篇文档，因为页面样式会从打印输出中移除导航外壳。因此，打印单个页面交给浏览器自带的&#xA;&lt;code&gt;Cmd/Ctrl+P&lt;/code&gt; 即可，OINK 不再提供页面级的打印操作。&lt;/p&gt;&#xA;&lt;p&gt;有些站点适合启用“打印整节”功能（本用户指南就是如此）。选择后，系统会把当前顶层分区（例如本页所在的“高级特性”）连同全部子页面和子分区渲染为适合打印的格式，并附上该分区的完整目录。&lt;/p&gt;&#xA;&lt;p&gt;要启用此功能，请在站点的 &lt;code&gt;hugo.toml&lt;/code&gt;、&lt;code&gt;hugo.yaml&lt;/code&gt; 或 &lt;code&gt;hugo.json&lt;/code&gt; 中，为&#xA;&lt;code&gt;section&lt;/code&gt; 类型添加 &lt;code&gt;print&lt;/code&gt; 输出格式：&lt;/p&gt;&#xA;&lt;!-- markdownlint-disable no-shortcut-ref-link --&gt;&#xA;&lt;!-- prettier-ignore-start --&gt;&#xA;&lt;ul class=&#34;nav nav-tabs&#34; id=&#34;tabs-0&#34; role=&#34;tablist&#34;&gt;&lt;li class=&#34;nav-item&#34; role=&#34;presentation&#34;&gt;&lt;button class=&#34;nav-link disabled&#34; id=&#34;tabs-00-00-tab&#34; data-bs-toggle=&#34;tab&#34; data-bs-target=&#34;#tabs-00-00&#34; role=&#34;tab&#34; aria-controls=&#34;tabs-00-00&#34; aria-selected=&#34;false&#34; disabled aria-disabled=&#34;true&#34;&gt;配置文件：&lt;/button&gt;&lt;/li&gt;&lt;li class=&#34;nav-item&#34; role=&#34;presentation&#34;&gt;&lt;button class=&#34;nav-link active&#34; id=&#34;tabs-00-01-tab&#34; data-bs-toggle=&#34;tab&#34; data-bs-target=&#34;#tabs-00-01&#34; role=&#34;tab&#34; data-td-tp-persist=&#34;toml&#34; aria-controls=&#34;tabs-00-01&#34; aria-selected=&#34;true&#34;&gt;hugo.toml&lt;/button&gt;&lt;/li&gt;&lt;li class=&#34;nav-item&#34; role=&#34;presentation&#34;&gt;&lt;button class=&#34;nav-link&#34; id=&#34;tabs-00-02-tab&#34; data-bs-toggle=&#34;tab&#34; data-bs-target=&#34;#tabs-00-02&#34; role=&#34;tab&#34; data-td-tp-persist=&#34;yaml&#34; aria-controls=&#34;tabs-00-02&#34; aria-selected=&#34;false&#34;&gt;hugo.yaml&lt;/button&gt;&lt;/li&gt;&lt;li class=&#34;nav-item&#34; role=&#34;presentation&#34;&gt;&lt;button class=&#34;nav-link&#34; id=&#34;tabs-00-03-tab&#34; data-bs-toggle=&#34;tab&#34; data-bs-target=&#34;#tabs-00-03&#34; role=&#34;tab&#34; data-td-tp-persist=&#34;json&#34; aria-controls=&#34;tabs-00-03&#34; aria-selected=&#34;false&#34;&gt;hugo.json&lt;/button&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;div class=&#34;tab-content&#34; id=&#34;tabs-0-content&#34;&gt;&lt;div class=&#34;tab-pane fade&#34; id=&#34;tabs-00-00&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;tabs-00-00-tab&#34; tabindex=&#34;0&#34;&gt;&#xA;&lt;div class=&#34;td-tabpane__print-title&#34;&gt;配置文件：&lt;/div&gt;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-831ca792-tabpane-0-00&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;&#34; data-line-count=&#34;0&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-831ca792-tabpane-0-00-viewport&#34; data-td-code-viewport&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;div class=&#34;tab-pane fade show active&#34; id=&#34;tabs-00-01&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;tabs-00-01-tab&#34; tabindex=&#34;0&#34;&gt;&#xA;&lt;div class=&#34;td-tabpane__print-title&#34;&gt;hugo.toml&lt;/div&gt;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-831ca792-tabpane-0-01&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;toml&#34; data-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;TOML&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-831ca792-tabpane-0-01-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;RSS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;print&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;div class=&#34;tab-pane fade&#34; id=&#34;tabs-00-02&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;tabs-00-02-tab&#34; tabindex=&#34;0&#34;&gt;&#xA;&lt;div class=&#34;td-tabpane__print-title&#34;&gt;hugo.yaml&lt;/div&gt;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-831ca792-tabpane-0-02&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;yaml&#34; data-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;YAML&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-831ca792-tabpane-0-02-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;HTML&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;RSS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;print&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;div class=&#34;tab-pane fade&#34; id=&#34;tabs-00-03&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;tabs-00-03-tab&#34; tabindex=&#34;0&#34;&gt;&#xA;&lt;div class=&#34;td-tabpane__print-title&#34;&gt;hugo.json&lt;/div&gt;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-831ca792-tabpane-0-03&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;json&#34; data-line-count=&#34;10&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;JSON&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-831ca792-tabpane-0-03-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;outputs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;section&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;RSS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;print&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;!-- prettier-ignore-end --&gt;&#xA;&lt;!-- markdownlint-enable no-shortcut-ref-link --&gt;&#xA;&lt;p&gt;随后，&lt;a href=&#34;https://oink.pgsty.com/zh/docs/configure/navigation/#page-actions&#34;&gt;页面操作菜单&lt;/a&gt;中会出现「打印整个分区」条目，命令面板中则以&#xA;&lt;code&gt;print_section&lt;/code&gt; 的形式出现。&lt;/p&gt;</description>
      </item>
    <item>
        <title>AI 智能体支持</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/agent-support/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/agent-support/</guid>
        <description>&lt;div class=&#34;td-alert td-alert--md alert alert-note&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;td-alert-heading alert-heading&#34; role=&#34;heading&#34; aria-level=&#34;4&#34;&gt;早期评估&lt;/div&gt;&#xA;  &lt;div class=&#34;td-alert-body&#34;&gt;&#xA;    &lt;p&gt;本页介绍的功能仍处于&lt;a href=&#34;https://github.com/google/docsy/blob/main/CHANGELOG.md&#34;&gt;实验阶段&lt;/a&gt;，适合早期采用和评估。后续版本可能会调整输出细节和验证范围。要跟踪智能体支持功能的阶段性演进，请参阅&#xA;&lt;a href=&#34;https://github.com/google/docsy/issues/2614&#34;&gt;Improve support for AI-agent doc consumption #2614&lt;/a&gt;。&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;功能&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#features&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;站点显式启用后，OINK 会提供以下面向用户和机器可读的行为：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;支持 &lt;strong&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/agent-support/#markdown-output&#34;&gt;Markdown 输出格式&lt;/a&gt;&lt;/strong&gt;。项目的 &lt;code&gt;outputs&lt;/code&gt;&#xA;配置决定哪些页面类型发布 Markdown。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发现机制&lt;/strong&gt;：页面 HTML 的 header 会包含指向该页 Markdown 版本的&#xA;&lt;code&gt;rel=&amp;quot;alternate&amp;quot;&lt;/code&gt; 链接。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;复制 Markdown 文本 / 查阅 Markdown 源码&lt;/strong&gt;：当页面存在 Markdown 输出时，页面操作可以复制或打开该版本。复制是面包屑行中拆分按钮的左半边，其余入口在它的菜单里。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;在 ChatGPT / Claude 中打开&lt;/strong&gt;：只有显式启用&#xA;&lt;code&gt;params.ui.page_context_menu.assistant_links&lt;/code&gt;&#xA;后，有源文件的页面操作才会把当前浏览器 URL 交给相应助手。OINK 只在读者激活链接时构造提示词，并保留实际部署域名、查询参数与片段。完整 URL 随后会离开本站；请勿在 URL 中放置秘密信息，并披露这一第三方边界。页面正文不会被上传。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;查阅编辑历史&lt;/strong&gt;：当 &lt;code&gt;github_repo&lt;/code&gt;&#xA;与仓库路径可用时，打开当前源文件的提交历史。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/agent-support/#llms-txt&#34;&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;：位于站点根目录的内容清单文件。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本页其余部分介绍如何启用各项功能，并结合示例讨论相应的&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/agent-support/#validation-and-metrics&#34;&gt;验证与指标&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-d282d047-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;yaml&#34; data-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;YAML&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-d282d047-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;page_context_menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;assistant_links&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;可用布尔型 &lt;code&gt;assistant_links&lt;/code&gt; front matter 按页面覆盖这一选择。&lt;/p&gt;</description>
      </item>
    <item>
        <title>使用 giscus 添加评论</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/comments/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/comments/</guid>
        <description>&lt;p&gt;OINK 在 &lt;code&gt;params.comments&lt;/code&gt; 下提供&lt;a href=&#34;https://imfing.github.io/hextra/zh-cn/docs/advanced/comments/&#34;&gt;与 Hextra 兼容的评论配置&lt;/a&gt;，并通过该配置支持&#xA;&lt;a href=&#34;https://giscus.app/zh-CN&#34;&gt;giscus&lt;/a&gt;。giscus 会为每个内容页关联一条由 &lt;a href=&#34;https://docs.github.com/zh/discussions&#34;&gt;GitHub Discussions&lt;/a&gt;&#xA;保存的评论线程，读者通过 GitHub OAuth 登录后即可发表评论。&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-giscus-works&#34;&gt;giscus 如何工作&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#how-giscus-works&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;页面加载时，giscus 会在配置的仓库中查找与当前页面匹配的 Discussion。如果没有找到，读者首次发表评论或表态时，giscus&#xA;bot 会自动创建一条。维护者直接在 GitHub Discussions 中审核和管理评论。&lt;/p&gt;&#xA;&lt;p&gt;所有人都可以阅读公开评论。读者发表评论时，选择&#xA;&lt;strong&gt;使用 GitHub 登录&lt;/strong&gt;，并授权 giscus&#xA;app 代表自己发帖。OINK 不会索取或保存读者的 GitHub 密码或访问令牌。&lt;/p&gt;&#xA;&lt;div class=&#34;td-alert td-alert--md alert alert-important&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;td-alert-heading alert-heading&#34; role=&#34;heading&#34; aria-level=&#34;4&#34;&gt;外部服务&lt;/div&gt;&#xA;  &lt;div class=&#34;td-alert-body&#34;&gt;&#xA;    &lt;p&gt;giscus 是需要显式启用的在线集成。启用评论的页面会从 &lt;code&gt;https://giscus.app&lt;/code&gt;&#xA;加载脚本和 iframe，因此无法在网络隔离环境中运行。必要时，请在消费站点的隐私与安全政策中说明这条外部数据边界。&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;prepare-github&#34;&gt;准备 GitHub 仓库&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#prepare-github&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;配置 OINK 前，请完成以下准备：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;使用 &lt;strong&gt;公开&lt;/strong&gt; GitHub 仓库保存评论线程。访客无法读取私有仓库中的 Discussions。&lt;/li&gt;&#xA;&lt;li&gt;在仓库的 &lt;strong&gt;Settings &amp;gt; Features&lt;/strong&gt; 中&lt;a href=&#34;https://docs.github.com/zh/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/enabling-or-disabling-github-discussions-for-a-repository&#34;&gt;启用 GitHub Discussions&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;为该仓库安装 &lt;a href=&#34;https://github.com/apps/giscus&#34;&gt;giscus GitHub App&lt;/a&gt;。没有此 App，访客无法评论或表态。&lt;/li&gt;&#xA;&lt;li&gt;选择一个 Discussion 分类。giscus 推荐使用 &lt;strong&gt;Announcements&lt;/strong&gt;&#xA;类型，以便只有维护者和 giscus bot 能创建新的 Discussions。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;仓库 ID 与分类 ID 是公开标识符，不是凭据。不要在 Hugo 配置中加入 GitHub personal&#xA;access token、OAuth secret 或密码。&lt;/p&gt;</description>
      </item>
    <item>
        <title>分析、用户反馈与 SEO</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/analytics/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/analytics/</guid>
        <description>&lt;p&gt;OINK 默认不会连接分析、表单、评论或广告服务。这些集成属于站点决策：必须显式启用、记录数据边界，并根据用户与站点所在司法辖区提供必要的同意机制或政策说明。&lt;/p&gt;&#xA;&lt;h2 id=&#34;adding-analytics&#34;&gt;添加分析&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#adding-analytics&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hugo 为分析服务提供嵌入模板。站点配置 Google&#xA;Analytics 后，页面浏览量与自定义事件等浏览器使用信息会发送给 Google。这与完全网络隔离的运行环境不兼容，也可能不符合严格的同源内容安全策略（CSP）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;setup&#34;&gt;配置&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#setup&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;取得站点的 Google Analytics measurement ID，然后使用 Hugo 当前的服务配置：&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-046f640e-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-language=&#34;yaml&#34; data-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;&#xA;  &lt;span class=&#34;td-code__language&#34;&gt;YAML&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-046f640e-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;googleAnalytics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;G-YOUR-ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;不要同时设置已经弃用的顶层 &lt;code&gt;googleAnalytics&lt;/code&gt; 键。通常只有 Hugo &lt;code&gt;production&lt;/code&gt;&#xA;环境才会输出分析代码。发布前，请构建生产预览，并检查 HTML 与浏览器网络日志。&lt;/p&gt;&#xA;&lt;p&gt;禁用分析后，OINK 不会发起 Google&#xA;Analytics 请求。应彻底删除相关配置，而不是填写虚假 ID。&lt;/p&gt;&#xA;&lt;h2 id=&#34;user-feedback&#34;&gt;用户反馈&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#user-feedback&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;OINK 可以在文档页底部显示“本页是否有帮助？”小组件。它提供 &lt;strong&gt;是&lt;/strong&gt; 与 &lt;strong&gt;否&lt;/strong&gt;&#xA;两个操作，随后显示配置好的响应；响应通常包含创建文档 issue 的链接。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://oink.pgsty.com/images/feedback.png&#34;&#xA;       alt=&#34;页面询问内容是否有帮助，并提供“是”和“否”两个按钮。&#34;/&gt;&#xA;  &lt;figcaption&gt;图 1：页面反馈组件&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;即使不启用分析，响应仍然可以发挥作用：它可以把读者引导到 issue 模板、讨论区、电子邮箱或站点自有的其他反馈渠道。只有站点配置了适当目标后，才会发生数据收集和事件上报。&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-feedback-data-is-useful&#34;&gt;反馈数据有什么用？&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#how-feedback-data-is-useful&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;应结合上下文理解反馈，不能把单一分数当作结论。访问量高且反复收到负面反馈的页面是值得优先复查的候选；高评分页面则可能揭示值得在其他页面验证的模式。&lt;/p&gt;&#xA;&lt;p&gt;应尽可能采用聚焦的编辑变更。例如，只更新一篇过时教程，或者把一小组页面的代码示例提前，然后在合适的时间范围内比较反馈。同时记录发布事件、流量变化、支持事件和其他可能解释变化的因素。&lt;/p&gt;&#xA;&lt;p&gt;反馈只能提供方向性证据，不能取代用户研究、无障碍评审、支持数据或技术验证。&lt;/p&gt;</description>
      </item>
    <item>
        <title>高级功能</title>
        <link>https://oink.pgsty.com/zh/docs/advanced/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://oink.pgsty.com/zh/docs/advanced/</guid>
        <description>&lt;p&gt;这一章介绍主题的高级能力。无需外部服务的键盘导航默认开启；会改变站点策略或向第三方传输数据的能力仍需显式启用——主题提供实现，但不替站点做策略决定。&lt;/p&gt;&#xA;&lt;h2 id=&#34;in-this-chapter&#34;&gt;本章内容&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#in-this-chapter&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/keyboard/&#34;&gt;键盘导航&lt;/a&gt;：完整单键映射、焦点规则与按页关闭方法&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/search/&#34;&gt;搜索与命令面板&lt;/a&gt;：本地索引、搜索排序、&lt;code&gt;Cmd/Ctrl-K&lt;/code&gt;、&lt;code&gt;/&lt;/code&gt; 完整搜索与&#xA;&lt;code&gt;\&lt;/code&gt; 命令模式&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/print/&#34;&gt;打印输出&lt;/a&gt;：整个分区的打印视图&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/agent-support/&#34;&gt;AI 与 Agent 支持&lt;/a&gt;：Markdown 输出、&lt;code&gt;llms.txt&lt;/code&gt;、页面操作&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/comments/&#34;&gt;评论&lt;/a&gt;：giscus 集成&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oink.pgsty.com/zh/docs/advanced/analytics/&#34;&gt;分析统计&lt;/a&gt;：Google Analytics 与其他统计服务&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opt-in-by-default&#34;&gt;默认值遵循风险边界&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#opt-in-by-default&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;能力&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;参数&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;默认&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;键盘导航&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.ui.keyboard_nav.enable&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;本地搜索&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.offlineSearch&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;明暗切换&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.ui.showLightDarkModeMenu&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;图片缩放&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.ui.image_zoom.enable&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;评论&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.comments.enable&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;页面反馈&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.ui.feedback.enable&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;助手链接&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;params.ui.page_context_menu.assistant_links&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;这不是保守，而是边界问题：&lt;strong&gt;是否把读者数据发给第三方，是站点的决定，不是主题的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;同理，PlantUML 和 Draw.io 缺少显式端点配置时会中断构建，而不是悄悄用一个公共服务。&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
