<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>使用说明 · 此间札记</title><description>带有「使用说明」标签的文章订阅。</description><link>https://xiaoxusop.github.io/letterpress/</link><language>zh-CN</language><copyright>© XIAOXUsop</copyright><atom:link href="https://xiaoxusop.github.io/letterpress/tags/%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/rss.xml" rel="self" type="application/rss+xml"/><item><title>这个博客是怎么搭的</title><link>https://xiaoxusop.github.io/letterpress/how-this-works/</link><guid isPermaLink="true">https://xiaoxusop.github.io/letterpress/how-this-works/</guid><description>改一个配置文件就能上线，文章放在一个目录里，知识层会自动长出链接图。这一篇解释目录结构、写作流程，以及怎么把它换成你自己的。</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这一篇是写给你的——如果你 clone 了这个项目，它会告诉你东西都在哪。&lt;/p&gt;
&lt;h2 id=&quot;你只需要改一个文件&quot;&gt;你只需要改一个文件&lt;a class=&quot;heading-anchor&quot; href=&quot;#你只需要改一个文件&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;src/config.ts&lt;/code&gt;。里面的 &lt;code&gt;site&lt;/code&gt;、&lt;code&gt;author&lt;/code&gt;、&lt;code&gt;nav&lt;/code&gt; 三项改完就能上线：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; site&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#F69D50&quot;&gt; SiteConfig&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  title: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;你的站名&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  tagline: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;一句话说清这个站是什么。&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  url: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;https://example.com&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;// 部署前填，不留斜杠&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  lang: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;zh-CN&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,                &lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;// 别改错——浏览器的中文标点规则依赖它&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  author: { name: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;你的名字&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, bio: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&apos;一句话介绍自己。&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;  // …&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;其余全部有可用的默认值，而且默认值本身就是完整站点，不是占位符。&lt;/strong&gt;
你现在看到的这些文章和知识库条目就是示例内容——它们是真的能读的，
不是 &lt;code&gt;lorem ipsum&lt;/code&gt;。删掉它们换成你自己的即可。&lt;/p&gt;
&lt;h2 id=&quot;东西都在哪&quot;&gt;东西都在哪&lt;a class=&quot;heading-anchor&quot; href=&quot;#东西都在哪&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── config.ts            你唯一必须改的文件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── content/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── posts/           文章。按时间排&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   └── wiki/            知识层。按主题互链&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── layouts/             页面骨架&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── components/          组件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── pages/               路由&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── lib/                 纯逻辑（可测试，不依赖 Astro）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── negotiate/       Accept 头解析——[[内容协商]] 的实现&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   └── wiki/            链接图、体检、llms.txt 生成&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── styles/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── tokens.css       设计令牌&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── base.css         基线排版（含 [[中文排版]] 的那些修正）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── site.css         布局与组件&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;两种内容两种组织方式&quot;&gt;两种内容，两种组织方式&lt;a class=&quot;heading-anchor&quot; href=&quot;#两种内容两种组织方式&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;文章&lt;/strong&gt;放在 &lt;code&gt;src/content/posts/&lt;/code&gt;，按时间排列，是「流」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识库条目&lt;/strong&gt;放在 &lt;code&gt;src/content/wiki/&lt;/code&gt;，按主题互链，是「网」。&lt;/p&gt;
&lt;p&gt;它们的区别不是格式，是&lt;strong&gt;读者找东西的方式&lt;/strong&gt;：想看你最近写了什么就翻文章，
想搞清某个概念就查知识层。两边的条目地位相同，可以互相引用。&lt;/p&gt;
&lt;h2 id=&quot;用-方括号-连起来&quot;&gt;用 &lt;code&gt;[[方括号]]&lt;/code&gt; 连起来&lt;a class=&quot;heading-anchor&quot; href=&quot;#用-方括号-连起来&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在任何地方写 &lt;code&gt;[[目标]]&lt;/code&gt;，就会生成一条链接：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;见 [[&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#96D0FF;--shiki-dark-text-decoration:inherit&quot;&gt;内容协商&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;]] 一节。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;支持三种写法：&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;可横向滚动的表格&quot; data-table-wrap=&quot;&quot;&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;[[内容协商]]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;链接，显示文本即目标名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;[[内容协商|那篇]]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自定义显示文本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;[[内容协商#为什么]]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指向页内某小节&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;目标可以写 slug，也可以写标题——你大概不会记得每篇的 slug 是什么。
解析时&lt;strong&gt;大小写和空格都不敏感&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;写错了不会静默失败：构建时会报一条 &lt;code&gt;broken-wikilink&lt;/code&gt; 错误，
并告诉你&lt;strong&gt;哪个页面引用了什么&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&quot;构建时会做体检&quot;&gt;构建时会做体检&lt;a class=&quot;heading-anchor&quot; href=&quot;#构建时会做体检&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;每次构建会跑一遍知识库体检，输出在控制台。分三级：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;错误&lt;/strong&gt;：断链、两个页面抢同一个 URL、文章占用 &lt;code&gt;/about/&lt;/code&gt; 等系统路由、
引用了没登记的来源、复核状态与正文对不上。
&lt;strong&gt;会让构建失败&lt;/strong&gt;（可在配置里关掉）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;警告&lt;/strong&gt;：孤儿页（没有任何页面指向它）、缺摘要、空正文、
同一关系在正文与 &lt;code&gt;related&lt;/code&gt; 里各写了一次&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示&lt;/strong&gt;：摘要过长之类的建议&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这不是可选的装饰。&lt;/strong&gt; 一个由人（或 agent）持续维护的知识库，
最容易的结局是慢慢烂掉——改了标题没改引用、删了页面留下断链。
机械的检查必须能进 CI，否则「知识库」会退化成「一堆文件」。&lt;/p&gt;
&lt;p&gt;完整的规则表在 &lt;code&gt;AGENTS.md&lt;/code&gt;——那份是&lt;strong&gt;写给 agent 看的&lt;/strong&gt;，改规则时两边要一起改。&lt;/p&gt;
&lt;h2 id=&quot;给-ai-读者那一份&quot;&gt;给 AI 读者那一份&lt;a class=&quot;heading-anchor&quot; href=&quot;#给-ai-读者那一份&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一站有两个出口，服务两类读者：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Markdown 孪生文件。&lt;/strong&gt; 每篇文章和知识页都有可直接访问的 &lt;code&gt;.md&lt;/code&gt; URL。
在支持内容协商的部署平台上，请求页面 URL 时带上 &lt;code&gt;Accept: text/markdown&lt;/code&gt;
也会得到 markdown；本站使用 GitHub Pages，因此应直接访问 &lt;code&gt;.md&lt;/code&gt; 链接。
原理和托管限制见 &lt;a href=&quot;/letterpress/wiki/content-negotiation/&quot;&gt;内容协商&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目录与全文。&lt;/strong&gt; &lt;code&gt;/llms.txt&lt;/code&gt; 是给 agent 看的目录（标题 + 一句话说明），
&lt;code&gt;/llms-full.txt&lt;/code&gt; 是全文内联版。每个页面还有 &lt;code&gt;.md&lt;/code&gt; 孪生文件，
比如 &lt;code&gt;/how-this-works.md&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;需要说明的是：&lt;strong&gt;&lt;code&gt;llms.txt&lt;/code&gt; 的实际效果被高估了&lt;/strong&gt;——
Ahrefs 实测 13.7 万个域名里 97% 的 llms.txt 从未被请求过。
本站生成它是因为零成本，但主要依靠显式 &lt;code&gt;.md&lt;/code&gt; 链接、内容清单和干净的 HTML。&lt;/p&gt;
&lt;h2 id=&quot;部署&quot;&gt;部署&lt;a class=&quot;heading-anchor&quot; href=&quot;#部署&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;静态产物，任何静态托管都能跑。但&lt;strong&gt;内容协商需要一层边缘函数&lt;/strong&gt;——
因为静态托管不解析请求头，它只会把文件原样吐出来。&lt;/p&gt;
&lt;p&gt;项目里带了三个平台的现成实现，&lt;strong&gt;选你用的那个&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;可横向滚动的表格&quot; data-table-wrap=&quot;&quot;&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;平台&lt;/th&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;Cloudflare Pages&lt;/td&gt;&lt;td&gt;&lt;code&gt;functions/[[path]].ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;public/_headers&lt;/code&gt;（会被拷进产物）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netlify&lt;/td&gt;&lt;td&gt;&lt;code&gt;netlify/edge-functions/negotiate.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;无额外配置&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vercel&lt;/td&gt;&lt;td&gt;&lt;code&gt;middleware.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;vercel.json&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;不想要这一层也没关系，站点照常工作，只是 agent 拿到的是 HTML 而不是 markdown。&lt;/p&gt;
&lt;h2 id=&quot;详细说明&quot;&gt;详细说明&lt;a class=&quot;heading-anchor&quot; href=&quot;#详细说明&quot; aria-label=&quot;此小节的永久链接&quot; data-pagefind-ignore=&quot;&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;排版与设计决策：&lt;a href=&quot;/letterpress/wiki/cjk-typography/&quot;&gt;中文排版&lt;/a&gt;、&lt;a href=&quot;/letterpress/wiki/design-tokens/&quot;&gt;设计令牌&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;知识层的设计取舍：&lt;a href=&quot;/letterpress/wiki/llm-wiki/&quot;&gt;LLM 知识库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>使用说明</category><author>XIAOXUsop</author></item></channel></rss>