<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>二甲基</title><description>一个神奇的博客</description><link>https://www.ariels.xyz/</link><language>zh_CN</language><item><title>音频朗读条</title><link>https://www.ariels.xyz/posts/media-audio/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/media-audio/</guid><description>用 :audio-reader 在行内插入发音按钮，点击播放音频片段并伴有声波跳动反馈。</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;音频朗读条（Audio Reader）允许在正文中为特定词句或短语插入行内发音、有声朗读或音频试听按钮。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;:audio-reader&lt;/code&gt; 文本指令并传入音频文件地址 &lt;code&gt;src&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;日语中「ありがとう」的读音为 :audio-reader[发音示范]{src=&quot;/assets/audio/arigatou.mp3&quot;}。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;（本站示例音频位于 &lt;code&gt;public/assets/music/url/&lt;/code&gt;）：&lt;/p&gt;
&lt;p&gt;日语中「ありがとう」的读音为 :audio-reader[发音示范]{src=&quot;/assets/music/url/cl.mp3&quot;}。&lt;/p&gt;
&lt;p&gt;点击徽章即可播放对应片段。&lt;/p&gt;
&lt;h2&gt;放在句子中间&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;audio-reader&lt;/code&gt; 是纯行内语法，可以与文字、高亮、行内代码自由混排：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这个词在英式英语中读作 :audio-reader[英音]{src=&quot;/assets/audio/en-uk.mp3&quot;}，
在美式英语中读作 :audio-reader[美音]{src=&quot;/assets/audio/en-us.mp3&quot;}。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;行内朗读条&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:audio-reader[文字]{src=&quot;...&quot;}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单词发音、短句示范&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML5 音频&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;audio controls src=&quot;...&quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;独立成段的完整音频&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ArtPlayer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::artplayer{...}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;需要播放控制的音频流&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;短发音&lt;/strong&gt;用 &lt;code&gt;:audio-reader&lt;/code&gt;，读者不需要离开阅读动线。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;整段音频&lt;/strong&gt;（播客、音乐）建议用&lt;a href=&quot;/posts/media-artplayer/&quot;&gt;艺术播放器&lt;/a&gt;或原生 &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; 标签单独成段。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;交互效果&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;正文中呈现为精巧的发音波形微徽章。&lt;/li&gt;
&lt;li&gt;点击后播放对应音频片段，并带有声波跳动视觉反馈。&lt;/li&gt;
&lt;li&gt;采用原生 Web Audio API 与 HTML5 Audio，轻量流畅。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 音频资源建议
朗读类音频通常只有几十到几百 KB，适合与文章一起放在 &lt;code&gt;public/&lt;/code&gt; 目录中。若音频文件较大，请确认 &lt;code&gt;preload&lt;/code&gt; 行为不会在页面加载时抢占带宽——&lt;code&gt;audio-reader&lt;/code&gt; 只在点击后才请求音频。
:::&lt;/p&gt;
</content:encoded></item><item><title>ArtPlayer 播放器</title><link>https://www.ariels.xyz/posts/media-artplayer/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/media-artplayer/</guid><description>播放自托管视频或第三方直链，支持 MP4 / WebM / HLS，带倍速、画中画与全屏控制。</description><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ArtPlayer 播放器组件用于播放自托管的本地视频文件或第三方直链媒体资源（支持 MP4、WebM 与 HLS 流媒体）。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::artplayer&lt;/code&gt; 指令并配置参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::artplayer{src=&quot;/videos/demo.mp4&quot; title=&quot;本地示例视频&quot; poster=&quot;/assets/poster.webp&quot; preload=&quot;auto&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;（下例使用公开的 CC0 测试视频）：&lt;/p&gt;
&lt;p&gt;::artplayer{src=&quot;https://mdn.github.io/shared-assets/videos/flower.mp4&quot; title=&quot;ArtPlayer 演示视频&quot; poster=&quot;/assets/projects/shirone.webp&quot; preload=&quot;auto&quot;}&lt;/p&gt;
&lt;h2&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;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;&lt;code&gt;src&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;视频直链地址或相对 &lt;code&gt;/public&lt;/code&gt; 的本地路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;视频标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;poster&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;未播放时的封面海报图片路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&quot;none&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;预加载策略：&lt;code&gt;&quot;none&quot;&lt;/code&gt;（默认）或 &lt;code&gt;&quot;auto&quot;&lt;/code&gt;（视口临近预加载）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;播放自托管视频&lt;/h2&gt;
&lt;p&gt;把视频文件放进内容仓库的 &lt;code&gt;public/videos/&lt;/code&gt; 目录，再用绝对路径引用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::artplayer{src=&quot;/videos/demo.mp4&quot; title=&quot;本地示例视频&quot; poster=&quot;/assets/poster.webp&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::: file-tree{title=&quot;推荐的目录结构&quot;}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;public/
&lt;ul&gt;
&lt;li&gt;videos/
&lt;ul&gt;
&lt;li&gt;demo.mp4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;assets/
&lt;ul&gt;
&lt;li&gt;poster.webp
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;/videos/demo.mp4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;内容仓库 &lt;code&gt;public/videos/demo.mp4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;https://example.com/stream.m3u8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;外部 HLS 流&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: warning 大文件与构建
&lt;code&gt;public/&lt;/code&gt; 下的文件会原样拷贝进构建产物，建议只放体积可控的短片，并在发布前确认仓库不会因此膨胀。长视频更适合放在对象存储或 CDN 上，用直链嵌入。
:::&lt;/p&gt;
&lt;h2&gt;核心能力&lt;/h2&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;：只有在文章中使用了 ArtPlayer 时才会异步引入播放器依赖包。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HLS 支持&lt;/strong&gt;：直接传入 &lt;code&gt;.m3u8&lt;/code&gt; 地址即可播放流媒体，无需额外配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;自托管 MP4 / WebM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::artplayer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HLS 直播或点播流&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::artplayer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B 站 / YouTube / A 站稿件&lt;/td&gt;
&lt;td&gt;对应的平台指令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;平台指令负责 Facade 占位与第三方脚本的延迟加载；当你手上有视频文件本身时，ArtPlayer 是更直接的选择。&lt;/p&gt;
</content:encoded></item><item><title>AcFun 视频</title><link>https://www.ariels.xyz/posts/media-acfun/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/media-acfun/</guid><description>用 ::acfun 指令嵌入 AcFun 稿件，16:9 响应式容器，支持视口临近预加载。</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 支持嵌入 AcFun 弹幕视频网的视频内容，支持预加载与响应式排版。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::acfun&lt;/code&gt; 指令并配置参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::acfun{acid=&quot;ac48649632&quot; title=&quot;AcFun 视频内容&quot; preload=&quot;auto&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::acfun{acid=&quot;ac48649632&quot; title=&quot;AcFun 视频内容&quot; preload=&quot;auto&quot;}&lt;/p&gt;
&lt;h2&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;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;&lt;code&gt;acid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;AcFun 视频稿件的 AC 号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;视频标题说明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&quot;none&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;预加载策略：&lt;code&gt;&quot;none&quot;&lt;/code&gt;（默认）或 &lt;code&gt;&quot;auto&quot;&lt;/code&gt;（视口临近预加载）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;AC 号取自稿件链接 &lt;code&gt;https://www.acfun.cn/v/ac48649632&lt;/code&gt;，写法上需要保留 &lt;code&gt;ac&lt;/code&gt; 前缀。&lt;/p&gt;
&lt;h2&gt;默认占位模式&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;::acfun{acid=&quot;ac48649632&quot; title=&quot;默认占位模式&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::acfun{acid=&quot;ac48649632&quot; title=&quot;默认占位模式&quot;}&lt;/p&gt;
&lt;h2&gt;渲染特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;采用 16:9 响应式比例，自适应缩放。&lt;/li&gt;
&lt;li&gt;支持通过 &lt;code&gt;preload=&quot;auto&quot;&lt;/code&gt; 在读者视口滚动临近时提前初始化播放器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;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;Bilibili&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::bilibili&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bvid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BV&lt;/code&gt; 开头的 BV 号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::youtube&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;11 位视频 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AcFun&lt;/td&gt;
&lt;td&gt;&lt;code&gt;::acfun&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;acid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ac&lt;/code&gt; 开头的 AC 号&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: tip 统一写法
三条指令的参数名不同，但都遵循「一个必填标识 + 一个标题 + 可选 preload」的结构。写文章时把平台标识和 &lt;code&gt;title&lt;/code&gt; 一起写完，剩下的交给默认值即可。
:::&lt;/p&gt;
</content:encoded></item><item><title>YouTube 视频</title><link>https://www.ariels.xyz/posts/media-youtube/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/media-youtube/</guid><description>YouTube 视频嵌入同样遵循 Facade 占位规范，未点击前不下载播放器脚本，也不写入第三方 Cookie。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 支持嵌入 YouTube 视频，遵循严格的 Facade 占位与预加载控制规范。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::youtube&lt;/code&gt; 指令并配置参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::youtube{id=&quot;5gIf0_xpFPI&quot; title=&quot;YouTube 演示视频&quot; preload=&quot;auto&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::youtube{id=&quot;5gIf0_xpFPI&quot; title=&quot;YouTube 演示视频&quot; preload=&quot;auto&quot;}&lt;/p&gt;
&lt;h2&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;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;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;YouTube 视频链接中的 11 位唯一 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;视频标题描述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&quot;none&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;预加载策略：&lt;code&gt;&quot;none&quot;&lt;/code&gt;（默认）或 &lt;code&gt;&quot;auto&quot;&lt;/code&gt;（视口临近预热）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;视频 ID 就是观看链接 &lt;code&gt;https://www.youtube.com/watch?v=xxxxxxxxxxx&lt;/code&gt; 中 &lt;code&gt;v=&lt;/code&gt; 后面的部分，也等同于短链 &lt;code&gt;https://youtu.be/xxxxxxxxxxx&lt;/code&gt; 的路径段。&lt;/p&gt;
&lt;h2&gt;预加载与隐私策略&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;preload=&quot;none&quot;&lt;/code&gt;：未点击前不下载 YouTube 播放器脚本与第三方 Cookie。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preload=&quot;auto&quot;&lt;/code&gt;：临近视口时提前加载容器占位，提高点击后的响应速度。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;::youtube{id=&quot;5gIf0_xpFPI&quot; title=&quot;默认占位模式&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果（默认 &lt;code&gt;none&lt;/code&gt;）&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::youtube{id=&quot;5gIf0_xpFPI&quot; title=&quot;默认占位模式&quot;}&lt;/p&gt;
&lt;h2&gt;与 Bilibili 嵌入的差异&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对比项&lt;/th&gt;
&lt;th&gt;&lt;code&gt;::bilibili&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;::youtube&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;必填标识&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bvid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分 P 支持&lt;/td&gt;
&lt;td&gt;有（&lt;code&gt;p&lt;/code&gt; 参数）&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;默认预加载&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;点击前的外部请求&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: warning 可访问性
指令中的 &lt;code&gt;title&lt;/code&gt; 不只是海报上的文字，它会成为嵌入区域的辅助描述。请填写真实、具体的视频标题，而不要写「点击播放」这类没有信息量的文案。
:::&lt;/p&gt;
&lt;p&gt;两个平台共用同一套 16:9 响应式容器，因此混排时卡片高度完全一致，不会破坏文章节奏。&lt;/p&gt;
</content:encoded></item><item><title>Bilibili 视频</title><link>https://www.ariels.xyz/posts/media-bilibili/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/media-bilibili/</guid><description>零额外负担的 B 站视频嵌入指令，Facade 占位搭配视口临近预加载，首屏不产生第三方请求。</description><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 提供了零额外负担的 Bilibili 视频嵌入指令，支持 Facade 占位模式与视口临近预加载机制。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::bilibili&lt;/code&gt; 行级指令并配置参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::bilibili{bvid=&quot;BV1fK4y1s7Qf&quot; title=&quot;演示视频&quot; p=1 preload=&quot;auto&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::bilibili{bvid=&quot;BV1fK4y1s7Qf&quot; title=&quot;演示视频&quot; p=1 preload=&quot;auto&quot;}&lt;/p&gt;
&lt;p&gt;点击封面才会真正加载 B 站播放器，在此之前页面上只存在一张海报图与播放按钮。&lt;/p&gt;
&lt;h2&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;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;&lt;code&gt;bvid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;Bilibili 视频的 BV 号（如 &lt;code&gt;BV1fK4y1s7Qf&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;td&gt;视频标题，用于可访问性描述与海报标注&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分 P 编号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&quot;none&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;预加载策略：&lt;code&gt;&quot;none&quot;&lt;/code&gt;（默认纯占位）或 &lt;code&gt;&quot;auto&quot;&lt;/code&gt;（视口临近预加载）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;预加载策略（preload）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;preload=&quot;none&quot;&lt;/code&gt;（默认）&lt;/strong&gt;：
首屏严格保持 0 请求。只渲染封面海报与播放按钮，读者手动点击后才加载播放器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;preload=&quot;auto&quot;&lt;/code&gt;（视口预加载）&lt;/strong&gt;：
当视频卡片滚动进入读者视口前夕，利用交叉观察器提前初始化播放器容器与元数据，使点击播放更加即时流畅。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;::bilibili{bvid=&quot;BV1fK4y1s7Qf&quot; title=&quot;默认占位模式&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果（默认 &lt;code&gt;none&lt;/code&gt;）&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::bilibili{bvid=&quot;BV1fK4y1s7Qf&quot; title=&quot;默认占位模式&quot;}&lt;/p&gt;
&lt;h2&gt;指定分 P&lt;/h2&gt;
&lt;p&gt;一个多 P 视频可以只嵌入其中一集：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::bilibili{bvid=&quot;BV1fK4y1s7Qf&quot; title=&quot;第二集&quot; p=2}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;响应式排版&lt;/h2&gt;
&lt;p&gt;外层容器统一锁定 16:9 标准比例，在桌面端与移动端均自适应缩放，绝不撑破文章排版。&lt;/p&gt;
&lt;p&gt;::: tip 该用哪种 preload
教程类文章的读者点击播放的概率高，用 &lt;code&gt;preload=&quot;auto&quot;&lt;/code&gt; 能明显减少等待；只是「参考资料」性质的视频，保持默认 &lt;code&gt;none&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;/td&gt;
&lt;td&gt;&lt;code&gt;preload=&quot;auto&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文末延伸观看&lt;/td&gt;
&lt;td&gt;省略 &lt;code&gt;preload&lt;/code&gt;（默认 &lt;code&gt;none&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多 P 系列&lt;/td&gt;
&lt;td&gt;按需指定 &lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>Mermaid 图表</title><link>https://www.ariels.xyz/posts/charts-mermaid/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/charts-mermaid/</guid><description>在 Markdown 中直接绘制流程图、时序图、状态图与甘特图，按需加载且配色跟随主题。</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 原生集成了 Mermaid 图表渲染引擎，支持在 Markdown 中直接绘制流程图、时序图、甘特图、类图与状态图。&lt;/p&gt;
&lt;h2&gt;流程图（Flowchart）&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
flowchart TD
    A[用户请求] --&amp;gt; B{路由匹配}
    B --&amp;gt;|命中静态文件| C[返回预渲染 HTML]
    B --&amp;gt;|动态路由| D[Swup 客户端平滑切页]
    C --&amp;gt; E[结束]
    D --&amp;gt; E
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flowchart TD
    A[用户请求] --&amp;gt; B{路由匹配}
    B --&amp;gt;|命中静态文件| C[返回预渲染 HTML]
    B --&amp;gt;|动态路由| D[Swup 客户端平滑切页]
    C --&amp;gt; E[结束]
    D --&amp;gt; E
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;flowchart TD&lt;/code&gt; 表示自上而下布局，改写成 &lt;code&gt;LR&lt;/code&gt; 即为从左到右。&lt;/p&gt;
&lt;h2&gt;时序图（Sequence Diagram）&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
sequenceDiagram
    autonumber
    actor User as 访客
    participant Browser as 浏览器
    participant Server as 边缘服务器

    User-&amp;gt;&amp;gt;Browser: 点击文章链接
    Browser-&amp;gt;&amp;gt;Server: 发起页面资源请求
    Server--&amp;gt;&amp;gt;Browser: 返回纯静态 HTML 与资源包
    Browser--&amp;gt;&amp;gt;User: 渲染文章与动态配色
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    autonumber
    actor User as 访客
    participant Browser as 浏览器
    participant Server as 边缘服务器

    User-&amp;gt;&amp;gt;Browser: 点击文章链接
    Browser-&amp;gt;&amp;gt;Server: 发起页面资源请求
    Server--&amp;gt;&amp;gt;Browser: 返回纯静态 HTML 与资源包
    Browser--&amp;gt;&amp;gt;User: 渲染文章与动态配色
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;autonumber&lt;/code&gt; 会自动为每条消息编号，实线箭头 &lt;code&gt;-&amp;gt;&amp;gt;&lt;/code&gt; 表示请求，虚线箭头 &lt;code&gt;--&amp;gt;&amp;gt;&lt;/code&gt; 表示响应。&lt;/p&gt;
&lt;h2&gt;状态图与架构图（State Diagram）&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
stateDiagram-v2
    [*] --&amp;gt; 默认浅色
    默认浅色 --&amp;gt; 暗色模式: 切换主题
    暗色模式 --&amp;gt; 默认浅色: 切换主题
    暗色模式 --&amp;gt; [*]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stateDiagram-v2
    [*] --&amp;gt; 默认浅色
    默认浅色 --&amp;gt; 暗色模式: 切换主题
    暗色模式 --&amp;gt; 默认浅色: 切换主题
    暗色模式 --&amp;gt; [*]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;甘特图（Gantt）&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
gantt
    title 内容上线节奏
    dateFormat  YYYY-MM-DD
    section 写作
    初稿            :a1, 2026-10-01, 3d
    配图与排版       :a2, after a1, 2d
    section 发布
    本地预览校对      :b1, after a2, 1d
    推送并构建        :b2, after b1, 1d
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gantt
    title 内容上线节奏
    dateFormat  YYYY-MM-DD
    section 写作
    初稿            :a1, 2026-10-01, 3d
    配图与排版       :a2, after a1, 2d
    section 发布
    本地预览校对      :b1, after a2, 1d
    推送并构建        :b2, after b1, 1d
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;核心特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;按需加载&lt;/strong&gt;：Mermaid 引擎仅在文章包含图表代码块时才会动态异步加载，不增加其他页面的初始打包体积。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;色彩与主题同步&lt;/strong&gt;：图表线条、节点与文字颜色自动与当前站点的 Material 3 Expressive 主题色与明暗模式实时同步。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 图表代码也是代码
&lt;code&gt;mermaid&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;th&gt;典型用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;流程图&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flowchart TD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;业务流程、渲染管线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;时序图&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sequenceDiagram&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;请求响应、协作过程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;状态图&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stateDiagram-v2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;状态机、主题切换&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;甘特图&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gantt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;排期与时间线&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>代码选项组</title><link>https://www.ariels.xyz/posts/codeblock-tabs/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/codeblock-tabs/</guid><description>把 pnpm、npm、yarn、bun 的命令并排放进同一张卡片，读者点一下就能切到自己惯用的工具。</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;代码选项组（Tabs）用于在同一区域并排切换展示不同包管理器命令（pnpm / npm / yarn / bun）、多种编程语言实现或不同操作系统的配置步骤。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::: tabs&lt;/code&gt; 容器与 &lt;code&gt;@tab&lt;/code&gt; 分割子标签页：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#codeblock-package-managers

@tab pnpm#pnpm

```bash
pnpm install
pnpm build
```

@tab npm#npm

```bash
npm install
npm run build
```

@tab Bun#bun

```bash
bun install
bun run build
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#codeblock-package-managers&lt;/p&gt;
&lt;p&gt;@tab pnpm#pnpm&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install
pnpm build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab npm#npm&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install
npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab Bun#bun&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bun install
bun run build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;多语言实现对比&lt;/h2&gt;
&lt;p&gt;同一段逻辑用不同语言书写时，选项组比「贴三段代码 + 小标题」更省版面：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#fetch-json

@tab TypeScript#ts

```ts
const res = await fetch(&apos;/api/posts.json&apos;);
const posts = await res.json();
```

@tab Python#python

```python
import json, urllib.request
res = urllib.request.urlopen(&apos;/api/posts.json&apos;)
posts = json.load(res)
```

@tab Rust#rust

```rust
let res = reqwest::get(&quot;/api/posts.json&quot;).await?;
let posts: Vec&amp;lt;Post&amp;gt; = res.json().await?;
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#fetch-json&lt;/p&gt;
&lt;p&gt;@tab TypeScript#ts&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const res = await fetch(&apos;/api/posts.json&apos;);
const posts = await res.json();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab Python#python&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import json, urllib.request
res = urllib.request.urlopen(&apos;/api/posts.json&apos;)
posts = json.load(res)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab Rust#rust&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let res = reqwest::get(&quot;/api/posts.json&quot;).await?;
let posts: Vec&amp;lt;Post&amp;gt; = res.json().await?;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;指定默认激活项&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#shell-choice

@tab Bash#bash

```bash
pnpm content:sync
pnpm dev
```

@tab:active PowerShell#powershell

```powershell
$env:CONTENT_DIR = &quot;&amp;lt;内容仓库的本地路径&amp;gt;&quot;
pnpm content:sync
pnpm dev
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#shell-choice&lt;/p&gt;
&lt;p&gt;@tab Bash#bash&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm content:sync
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab:active PowerShell#powershell&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$env:CONTENT_DIR = &quot;&amp;lt;内容仓库的本地路径&amp;gt;&quot;
pnpm content:sync
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;默认激活与跨块联动&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;指定激活项&lt;/strong&gt;：使用 &lt;code&gt;@tab:active&lt;/code&gt; 显式设置默认选中的标签页。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全局同步联动&lt;/strong&gt;：在同一页面中，拥有相同 &lt;code&gt;#id&lt;/code&gt; 的选项卡（例如全站的 &lt;code&gt;#pnpm&lt;/code&gt; 与 &lt;code&gt;#npm&lt;/code&gt;）在用户点击一次后会自动全局联动切换。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无障碍支持&lt;/strong&gt;：完全支持左右方向键键盘导航切换标签页。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 与 Markdown 选项卡的分工
选项组容器既可用于代码，也可用于普通文本与表格，写法与&lt;a href=&quot;/posts/markdown-tabs/&quot;&gt;代码选项组（Markdown 篇）&lt;/a&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;/td&gt;
&lt;td&gt;&lt;code&gt;#pnpm&lt;/code&gt; / &lt;code&gt;#npm&lt;/code&gt; / &lt;code&gt;#yarn&lt;/code&gt; / &lt;code&gt;#bun&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;语言实现&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#ts&lt;/code&gt; / &lt;code&gt;#python&lt;/code&gt; / &lt;code&gt;#rust&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;部署平台&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#vercel&lt;/code&gt; / &lt;code&gt;#cloudflare&lt;/code&gt; / &lt;code&gt;#netlify&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作系统&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#windows&lt;/code&gt; / &lt;code&gt;#macos&lt;/code&gt; / &lt;code&gt;#linux&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>Shirone 双语文章指南</title><link>https://www.ariels.xyz/posts/bilingual-posts/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/bilingual-posts/</guid><description>index.en.md 与 index.zh-CN.md 如何变成两条 URL、如何互相链接，以及界面文案如何跟随页面语言。</description><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 的文章可以有多种&lt;strong&gt;内容语言&lt;/strong&gt;版本。各语言版本并排放在同一个目录、
共用一个 slug 并自动互相链接；顶栏与页面文案跟随当前 URL 的语言，聚合列表
（归档、分类、标签）则始终只渲染默认语言。你正在阅读的这一页（以及它的
英文孪生页）就是可运行的演示。&lt;/p&gt;
&lt;h2&gt;1. 文件布局&lt;/h2&gt;
&lt;p&gt;把每个语言版本放进&lt;strong&gt;同一个&lt;/strong&gt;文章目录，每种语言一个文件，命名为
&lt;code&gt;index.&amp;lt;locale&amp;gt;.md&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/bilingual-posts/
├── index.en.md        ← 默认语言（英语）
└── index.zh-CN.md     ← 简体中文
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;语言由&lt;strong&gt;文件名后缀&lt;/strong&gt;派生，不需要额外的 frontmatter 字段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.en.md&lt;/code&gt; → 集合 id &lt;code&gt;bilingual-posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;index.zh-CN.md&lt;/code&gt; → 集合 id &lt;code&gt;zh-CN/bilingual-posts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认语言文件也可以沿用不带后缀的 &lt;code&gt;index.md&lt;/code&gt;——没有后缀即默认语言。
两个文件之间的 &lt;code&gt;published&lt;/code&gt;、&lt;code&gt;tags&lt;/code&gt;、&lt;code&gt;category&lt;/code&gt; 等结构性字段应保持一致，
而 &lt;code&gt;title&lt;/code&gt; / &lt;code&gt;description&lt;/code&gt; 各自使用本语言撰写。&lt;/p&gt;
&lt;h2&gt;2. URL 映射&lt;/h2&gt;
&lt;p&gt;每种语言版本有独立路由。非默认语言的前缀&lt;strong&gt;取代&lt;/strong&gt; &lt;code&gt;posts/&lt;/code&gt; 段，而不是叠加：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;默认语言（en）&lt;/th&gt;
&lt;th&gt;zh-CN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;集合 id&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bilingual-posts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zh-CN/bilingual-posts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;路由&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/posts/bilingual-posts/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/zh/bilingual-posts/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自定义 &lt;code&gt;permalink&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/my-slug/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/zh/my-slug/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;:::tip
前缀由主题唯一的 &lt;code&gt;[locale]&lt;/code&gt; 路由拥有，它按 &lt;code&gt;contentI18n.locales&lt;/code&gt;
（&lt;code&gt;src/config/contentI18nConfig.ts&lt;/code&gt;）逐语言产出页面——增删语言只需改这张表。
请求规范化（大小写变体、多余的默认语言前缀）由主题中间件处理——上面每一条
映射的唯一真源都是 &lt;code&gt;src/utils/i18n-routing.ts&lt;/code&gt;。
:::&lt;/p&gt;
&lt;h2&gt;3. 版本之间的互链&lt;/h2&gt;
&lt;p&gt;只要文章存在至少一个其它语言版本，正文前就会渲染**「本文还提供」**区块
（位于封面与元信息之后）。它把每种其它语言列成一个带 &lt;code&gt;hreflang&lt;/code&gt; 标注的
链接胶囊——当前语言永远不会列出自己；单语文章则完全不渲染该区块，页面与
未启用 i18n 的站点逐字节一致。&lt;/p&gt;
&lt;h2&gt;4. 顶栏语言菜单&lt;/h2&gt;
&lt;p&gt;搜索与调色板之间的翻译按钮，下拉展示同一套语言集合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在文章页上，菜单列出&lt;strong&gt;本篇&lt;/strong&gt;文章的所有语言版本，点击即切换；&lt;/li&gt;
&lt;li&gt;首页在每种配置语言下都有对版（&lt;code&gt;/&lt;/code&gt; ↔ &lt;code&gt;/zh/&lt;/code&gt;，点击即整页切换）；归档、
订阅源等尚无对应语言版本的页面，缺失语言的条目呈禁用态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;菜单标签使用语言自称（endonym）——“English”、“简体中文”——不随站点
界面语言翻译。&lt;/p&gt;
&lt;h2&gt;5. 跟随页面语言与保持默认语言的部分&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;界面文案跟随当前页面语言&lt;/strong&gt;：&lt;code&gt;/zh/*&lt;/code&gt; 下的顶栏、侧栏、分页与搜索面板都
输出中文——本页即演示。跨语言的站内跳转走整页加载（Swup 的 &lt;code&gt;ignoreVisit&lt;/code&gt;
守卫），持久外壳不会停留在旧语言上。&lt;/p&gt;
&lt;p&gt;聚合内容则被刻意限定在&lt;strong&gt;默认语言&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;归档、分类、标签、RSS/Atom 订阅源、&lt;code&gt;llms.txt&lt;/code&gt; 与统计页始终只列出
默认语言文章；中文首页（&lt;code&gt;/zh/&lt;/code&gt;）只列出中文文章；&lt;/li&gt;
&lt;li&gt;页面级元数据跟随文章语言：&lt;code&gt;&amp;lt;html lang&amp;gt;&lt;/code&gt;、JSON-LD &lt;code&gt;inLanguage&lt;/code&gt;、
&lt;code&gt;og:url&lt;/code&gt; 与 &lt;code&gt;Content-Language&lt;/code&gt; 都与你正在阅读的语言一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在就试试顶栏的翻译按钮，或打开上方的互链区块——本文的英文版只有一次
点击之遥。&lt;/p&gt;
</content:encoded></item><item><title>代码折叠与复制</title><link>https://www.ariels.xyz/posts/codeblock-collapse/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/codeblock-collapse/</guid><description>用 collapse 元数据折叠冗长配置，配合开箱即用的一键复制按钮，兼顾版面整洁与取用效率。</description><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;为了避免冗长的样板代码或超长配置文件占据过多版面，Shirone 提供了代码折叠行指令与一键复制功能。&lt;/p&gt;
&lt;h2&gt;代码折叠（collapse）&lt;/h2&gt;
&lt;p&gt;在元数据中使用 &lt;code&gt;collapse={起始行-结束行}&lt;/code&gt; 指定默认折叠的代码范围：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript collapse={4-8} title=&quot;长配置文件示例&quot;
import { defineUserConfig } from &apos;astro/config&apos;;

export default defineUserConfig({
  // 折叠部分开始
  site: &apos;https://shirone.mysqil.com&apos;,
  base: &apos;/&apos;,
  trailingSlash: &apos;always&apos;,
  output: &apos;static&apos;,
  // 折叠部分结束
  integrations: [],
});
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { defineUserConfig } from &apos;astro/config&apos;;

export default defineUserConfig({
  // 折叠部分开始
  site: &apos;https://shirone.mysqil.com&apos;,
  base: &apos;/&apos;,
  trailingSlash: &apos;always&apos;,
  output: &apos;static&apos;,
  // 折叠部分结束
  integrations: [],
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;被折叠的行在初次加载时显示为「展开 N 行」的交互按钮，读者点击后平滑展开完整内容。&lt;/p&gt;
&lt;h2&gt;多个折叠区间&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;collapse&lt;/code&gt; 支持同时传入多段范围，把不重要的区块分别收起：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```yaml collapse={1-3,9-11} title=&quot;config/site.yaml&quot;
# 折叠区间一：顶部注释
# 只写想改的键，其余保持主题默认值
# 升级主题后新默认值会自动生效

site: https://www.example.com/
title: 我的博客
subtitle: 一个神奇的博客
lang: zh_CN

# 折叠区间二：页脚
# 这里放备案信息与统计代码
# 可以保持折叠状态
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 折叠区间一：顶部注释
# 只写想改的键，其余保持主题默认值
# 升级主题后新默认值会自动生效

site: https://www.example.com/
title: 我的博客
subtitle: 一个神奇的博客
lang: zh_CN

# 折叠区间二：页脚
# 这里放备案信息与统计代码
# 可以保持折叠状态
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;一键复制代码&lt;/h2&gt;
&lt;p&gt;所有渲染的代码块在右上角均内置了优雅的一键复制按钮：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击后自动将代码原始内容写入系统剪贴板。&lt;/li&gt;
&lt;li&gt;复制成功后呈现微动效提示。&lt;/li&gt;
&lt;li&gt;保证复制出的文本是纯净代码，绝不包含行号或标记字符。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;即使在折叠状态下，复制按钮给出的仍然是&lt;strong&gt;完整的原始代码&lt;/strong&gt;，而不是屏幕上可见的部分。&lt;/p&gt;
&lt;h2&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;/td&gt;
&lt;td&gt;&lt;code&gt;collapse={4-8}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;折叠多段&lt;/td&gt;
&lt;td&gt;&lt;code&gt;collapse={1-3,9-11}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;折叠 + 行号&lt;/td&gt;
&lt;td&gt;&lt;code&gt;collapse={4-8} showLineNumbers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;折叠 + 文件名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;collapse={4-8} title=&quot;config/site.yaml&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: tip 折叠的边界
折叠不是「隐藏信息」的手段。把全部关键代码都折起来会让读者跳过内容；建议只折叠样板引用、自动生成的默认值与重复的注释区块。
:::&lt;/p&gt;
</content:encoded></item><item><title>高亮与差异标记</title><link>https://www.ariels.xyz/posts/codeblock-diff/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/codeblock-diff/</guid><description>行高亮、新增行与删除行的视觉标记，让读者一眼看到代码改动落在哪几行。</description><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 支持对代码块中的特定行进行行高亮、新增行（insert）与删除行（delete）的视觉差异标记。&lt;/p&gt;
&lt;h2&gt;行高亮（行号范围）&lt;/h2&gt;
&lt;p&gt;在代码围栏首行通过 &lt;code&gt;{1,3-5}&lt;/code&gt; 指定需要高亮的行号：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript {2,4-5} title=&quot;src/index.ts&quot;
function setup() {
  const isEnabled = true; // 第 2 行高亮
  const count = 0;
  console.log(&quot;初始化完成&quot;); // 第 4-5 行高亮
  return count;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function setup() {
  const isEnabled = true; // 第 2 行高亮
  const count = 0;
  console.log(&quot;初始化完成&quot;); // 第 4-5 行高亮
  return count;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;行号表达式支持逗号分隔的离散行（&lt;code&gt;{2,7}&lt;/code&gt;）与连字符区间（&lt;code&gt;{4-8}&lt;/code&gt;），两者可以混写。&lt;/p&gt;
&lt;h2&gt;差异标记（ins / del）&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;ins={...}&lt;/code&gt; 标记新增行（绿色背景），&lt;code&gt;del={...}&lt;/code&gt; 标记删除行（红色背景）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript ins={3} del={2} title=&quot;更新配置&quot;
export const siteConfig = {
  themeColor: 210, // 旧配置
  themeColor: 315, // 新配置
};
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig = {
  themeColor: 210, // 旧配置
  themeColor: 315, // 新配置
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;两个属性也可以同时传入多行，并与行高亮叠加使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```ts ins={4-5} del={1} {4} title=&quot;src/site.ts&quot;
const themeColor = 210;
export const siteConfig = {
  base: &apos;/&apos;,
  themeColor: 315,
  trailingSlash: &apos;always&apos;,
};
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const themeColor = 210;
export const siteConfig = {
  base: &apos;/&apos;,
  themeColor: 315,
  trailingSlash: &apos;always&apos;,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;原生 Diff 代码块&lt;/h2&gt;
&lt;p&gt;也可以直接使用 &lt;code&gt;diff&lt;/code&gt; 语言标识并以 &lt;code&gt;+&lt;/code&gt; 和 &lt;code&gt;-&lt;/code&gt; 作为行首字符：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```diff title=&quot;git diff&quot;
- const oldVersion = &quot;1.0.0&quot;;
+ const newVersion = &quot;2.0.0&quot;;
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- const oldVersion = &quot;1.0.0&quot;;
+ const newVersion = &quot;2.0.0&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Diff 代码块完整保留标准 diff 语义，&lt;code&gt;@@&lt;/code&gt; 段落头、上下文行与 &lt;code&gt;+&lt;/code&gt;/&lt;code&gt;-&lt;/code&gt; 行都会被正确着色。&lt;/p&gt;
&lt;h2&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{2,4-5}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;中性行高亮背景&lt;/td&gt;
&lt;td&gt;强调阅读重点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ins={3}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;新增行配色&lt;/td&gt;
&lt;td&gt;展示新增代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;del={2}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除行配色&lt;/td&gt;
&lt;td&gt;展示被移除的代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;```diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;完整 diff 着色&lt;/td&gt;
&lt;td&gt;展示 &lt;code&gt;git diff&lt;/code&gt; 原始输出&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: tip 什么时候用行高亮
行高亮最适合「这份代码只改了一行」的场景。如果改动的行数超过整块代码的一半，高亮反而失去了指向性，此时直接贴出改动后的完整代码更清晰。
:::&lt;/p&gt;
</content:encoded></item><item><title>标题与文件名</title><link>https://www.ariels.xyz/posts/codeblock-titles/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/codeblock-titles/</guid><description>为代码块添加 title 元数据，生成带文件类型图标的窗口顶栏，让读者一眼看清代码来源。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;通过在代码块元数据中添加 &lt;code&gt;title=&quot;...&quot;&lt;/code&gt; 属性，可以为代码块生成带有文件类型图标的窗口顶栏与文件名标识。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;在代码围栏首行指定 &lt;code&gt;title&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```json title=&quot;package.json&quot;
{
  &quot;name&quot;: &quot;shirone&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;shirone&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顶栏左端会根据扩展名渲染对应的文件类型图标，&lt;code&gt;.json&lt;/code&gt;、&lt;code&gt;.ts&lt;/code&gt;、&lt;code&gt;.md&lt;/code&gt;、&lt;code&gt;.astro&lt;/code&gt; 各有不同标识。&lt;/p&gt;
&lt;h2&gt;用标题描述操作步骤&lt;/h2&gt;
&lt;p&gt;标题不必是文件名，也可以是一句操作说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```bash title=&quot;终端操作命令&quot;
pnpm install
pnpm dev
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;在文章中的实际用法&lt;/h2&gt;
&lt;p&gt;一次完整的配置说明通常会连续出现多个带文件名的代码块，读者据此就能判断每个片段应该写到哪个文件里：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;先在站点配置中填写域名：

```yaml title=&quot;config/site.yaml&quot;
site: https://www.example.com/
title: 我的博客
```

再在导航栏配置中加入菜单项：

```yaml title=&quot;config/nav-bar.yaml&quot;
items:
  - name: 首页
    url: /
    icon: material-symbols:home-rounded
```

最后执行构建：

```bash title=&quot;本地预览&quot;
pnpm content:sync
pnpm dev
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;site: https://www.example.com/
title: 我的博客
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;items:
  - name: 首页
    url: /
    icon: material-symbols:home-rounded
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pnpm content:sync
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;视觉与特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;顶栏左侧自动渲染操作系统风格的窗口控制按钮与文件扩展名专用图标。&lt;/li&gt;
&lt;li&gt;顶栏右侧自动放置快速复制代码按钮与折叠控制入口。&lt;/li&gt;
&lt;li&gt;文件名标签清晰明确，避免读者混淆代码存放路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 命名规范
文件路径建议与仓库中的真实路径保持一致（如 &lt;code&gt;content/posts/hello/index.md&lt;/code&gt; 而不是 &lt;code&gt;文章.md&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title=&quot;package.json&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文件图标 + 文件名&lt;/td&gt;
&lt;td&gt;真实存在的文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title=&quot;终端操作命令&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;纯文本标题&lt;/td&gt;
&lt;td&gt;命令与临时片段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不写 &lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;仅显示复制按钮&lt;/td&gt;
&lt;td&gt;无需标注来源的短片段&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>语法高亮与行号</title><link>https://www.ariels.xyz/posts/codeblock-highlight/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/codeblock-highlight/</guid><description>基于 Expressive Code 的服务端语法高亮，支持按需显示行号，明暗配色自动适配主题。</description><pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 深度集成了 Expressive Code 引擎，提供基于 Shiki 的专业级静态语法着色与行号管理。&lt;/p&gt;
&lt;h2&gt;基础语法高亮&lt;/h2&gt;
&lt;p&gt;在代码块三个反引号后指定编程语言标识符：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript
interface UserProfile {
  name: string;
  avatar: string;
  themeColor: number;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;interface UserProfile {
  name: string;
  avatar: string;
  themeColor: number;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;语言标识符决定着色规则，常见取值包括 &lt;code&gt;ts&lt;/code&gt;、&lt;code&gt;js&lt;/code&gt;、&lt;code&gt;astro&lt;/code&gt;、&lt;code&gt;svelte&lt;/code&gt;、&lt;code&gt;bash&lt;/code&gt;、&lt;code&gt;yaml&lt;/code&gt;、&lt;code&gt;json&lt;/code&gt;、&lt;code&gt;markdown&lt;/code&gt;、&lt;code&gt;diff&lt;/code&gt;。不写标识符时按纯文本渲染。&lt;/p&gt;
&lt;h2&gt;显示行号（showLineNumbers）&lt;/h2&gt;
&lt;p&gt;通过在元数据中添加 &lt;code&gt;showLineNumbers&lt;/code&gt; 属性强制开启行号显示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```rust showLineNumbers
fn main() {
    println!(&quot;Hello, Shirone!&quot;);
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fn main() {
    println!(&quot;Hello, Shirone!&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;行号标记在服务端生成，复制代码时不会把行号带进剪贴板。&lt;/p&gt;
&lt;h2&gt;与其它元数据组合&lt;/h2&gt;
&lt;p&gt;代码围栏首行的元数据可以叠加书写，顺序不影响结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript title=&quot;src/config.ts&quot; showLineNumbers {2,5} collapse={7-9}
export const config = {
  themeColor: 315,
  analytics: false,
  comments: true,
  trailingSlash: &apos;always&apos;,

  // 以下是自动生成的默认区块
  base: &apos;/&apos;,
  output: &apos;static&apos;,
  prefetch: true,
};
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const config = {
  themeColor: 315,
  analytics: false,
  comments: true,
  trailingSlash: &apos;always&apos;,

  // 以下是自动生成的默认区块
  base: &apos;/&apos;,
  output: &apos;static&apos;,
  prefetch: true,
};
&lt;/code&gt;&lt;/pre&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;&lt;code&gt;title=&quot;...&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;代码块顶栏文件名&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/codeblock-titles/&quot;&gt;标题与文件名&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;showLineNumbers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示行号&lt;/td&gt;
&lt;td&gt;本文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{2,5}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高亮指定行&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/codeblock-diff/&quot;&gt;高亮与差异标记&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;collapse={7-9}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;折叠行范围&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/codeblock-collapse/&quot;&gt;代码折叠与复制&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;特性与优势&lt;/h2&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;：代码块根据当前站点的 M3E 配色调色板与暗色模式自动调整语法前景色与背景对比度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 语言标识符写错会怎样
未知的语言标识符不会导致构建失败，只是退化为无着色的纯文本。若发现代码块颜色异常，先检查标识符拼写。
:::&lt;/p&gt;
</content:encoded></item><item><title>文件片段导入</title><link>https://www.ariels.xyz/posts/markdown-include/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-include/</guid><description>把其它文件的完整内容、行号切片或命名区块引入当前文章，让公共说明与配置片段只维护一份。</description><pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;文件片段导入语法允许在当前 Markdown 文章中引入其他文件的完整内容、行号切片或命名区块，极大提升长篇教程与公共配置文档的复用效率。&lt;/p&gt;
&lt;h2&gt;引入完整文件&lt;/h2&gt;
&lt;p&gt;在文章中使用注释指令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- @include: ../../snippets/include-example.md --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;路径相对于当前文章的 &lt;code&gt;index.md&lt;/code&gt; 所在目录书写。本站的示例片段位于 &lt;code&gt;content/snippets/include-example.md&lt;/code&gt;，因此从 &lt;code&gt;posts/markdown-include/&lt;/code&gt; 出发需要向上两级。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- @include: ../../snippets/include-example.md --&amp;gt;&lt;/p&gt;
&lt;h2&gt;按行号切片引入&lt;/h2&gt;
&lt;p&gt;只引入目标文件中指定范围的行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- @include: ../../snippets/include-example.md{5-9} --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- @include: ../../snippets/include-example.md{5-9} --&amp;gt;&lt;/p&gt;
&lt;p&gt;行号从文件第一行开始计数（含首尾）。需要注意的是：&lt;strong&gt;行号会随片段文件被编辑而漂移&lt;/strong&gt;，共享片段更推荐使用下面的命名区块方式。&lt;/p&gt;
&lt;h2&gt;按命名区块（Region）引入&lt;/h2&gt;
&lt;p&gt;在源码中使用 &lt;code&gt;#region&lt;/code&gt; 和 &lt;code&gt;#endregion&lt;/code&gt; 标记公共区块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// #region auth-config
export const authConfig = {
  enabled: true,
  provider: &apos;github&apos;,
};
// #endregion
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 Markdown 中精准导入该区块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- @include: ../../snippets/include-example.md#public-api --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- @include: ../../snippets/include-example.md#public-api --&amp;gt;&lt;/p&gt;
&lt;p&gt;目标片段中的 &lt;code&gt;#region public-api&lt;/code&gt; 与 &lt;code&gt;#endregion public-api&lt;/code&gt; 之间的内容被精确提取，区块外的一行说明文字不会出现。&lt;/p&gt;
&lt;h2&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;th&gt;稳定性&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;完整文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@include: path.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高，内容整体同步&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;行号切片&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@include: path.md{10-25}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;低，插入或删除行会导致偏移&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;命名区块&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@include: path.md#region-name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高，按标记提取，位置自由&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;典型用法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;公共前置条件&lt;/strong&gt;：把「环境依赖」段落放进 &lt;code&gt;snippets/prerequisites.md&lt;/code&gt;，所有教程文章统一导入。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置片段&lt;/strong&gt;：真实源码文件里标记 &lt;code&gt;#region&lt;/code&gt;，文档直接引用，保证文档与代码永不脱节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多语言文章&lt;/strong&gt;：中英文文章共享同一段代码示例，避免两处维护。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;构建特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;所有的片段嵌入均在构建编译期完成，输出标准的静态 AST 节点。&lt;/li&gt;
&lt;li&gt;零运行时开销，代码高亮与行号完全同步生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: warning 路径必须真实存在
&lt;code&gt;@include&lt;/code&gt; 指向的文件在构建期被读取，路径写错会导致构建失败。片段文件建议统一放在 &lt;code&gt;content/snippets/&lt;/code&gt; 目录中，并用相对路径引用。
:::&lt;/p&gt;
</content:encoded></item><item><title>图片画廊与排版</title><link>https://www.ariels.xyz/posts/markdown-image-grid/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-image-grid/</guid><description>多列图片网格、Lightbox 放大预览与单图宽度控制，让配图排版不再是难题。</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 提供了强大的多列图片画廊网格与单图尺寸排版控制能力，支持 Lightbox 放大预览与 WebP 自动压缩。&lt;/p&gt;
&lt;h2&gt;图片网格画廊（grid）&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::: grid&lt;/code&gt; 容器将多张图片自动编排为响应式多列画廊：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: grid{columns=&quot;3&quot; aspect=&quot;16/9&quot; fit=&quot;cover&quot;}
![春日摄影](./spring.webp &quot;樱花盛开&quot;)
![夏日海滩](./summer.webp &quot;晴空与浪花&quot;)
![秋日落叶](./autumn.webp &quot;枫叶大道&quot;)
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: grid{columns=&quot;3&quot; aspect=&quot;16/9&quot; fit=&quot;cover&quot;}
&lt;img src=&quot;./spring.webp&quot; alt=&quot;春日摄影&quot; title=&quot;樱花盛开&quot; /&gt;
&lt;img src=&quot;./summer.webp&quot; alt=&quot;夏日海滩&quot; title=&quot;晴空与浪花&quot; /&gt;
&lt;img src=&quot;./autumn.webp&quot; alt=&quot;秋日落叶&quot; title=&quot;枫叶大道&quot; /&gt;
:::&lt;/p&gt;
&lt;p&gt;点击任意一张图片即可进入 Lightbox 放大预览。&lt;/p&gt;
&lt;h3&gt;属性参数&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;columns&lt;/code&gt;：列数，支持 &lt;code&gt;2&lt;/code&gt;、&lt;code&gt;3&lt;/code&gt;、&lt;code&gt;4&lt;/code&gt;（移动端自动响应退化为单列或双列）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aspect&lt;/code&gt;：固定比例，如 &lt;code&gt;16/9&lt;/code&gt;、&lt;code&gt;4/3&lt;/code&gt;、&lt;code&gt;1/1&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fit&lt;/code&gt;：图片适应方式，&lt;code&gt;cover&lt;/code&gt;（填充裁剪）或 &lt;code&gt;contain&lt;/code&gt;（完整包含）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;两列 + 完整包含的效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: grid{columns=&quot;2&quot; aspect=&quot;4/3&quot; fit=&quot;contain&quot;}
![春日摄影](./spring.webp &quot;樱花盛开&quot;)
![夏日海滩](./summer.webp &quot;晴空与浪花&quot;)
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::: grid{columns=&quot;2&quot; aspect=&quot;4/3&quot; fit=&quot;contain&quot;}
&lt;img src=&quot;./spring.webp&quot; alt=&quot;春日摄影&quot; title=&quot;樱花盛开&quot; /&gt;
&lt;img src=&quot;./summer.webp&quot; alt=&quot;夏日海滩&quot; title=&quot;晴空与浪花&quot; /&gt;
:::&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cover&lt;/code&gt; 会裁掉超出比例的部分以保持整齐，&lt;code&gt;contain&lt;/code&gt; 则完整保留画面但可能在容器内留白。风景照适合 &lt;code&gt;cover&lt;/code&gt;，截图与图表适合 &lt;code&gt;contain&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;单图尺寸与标题控制&lt;/h2&gt;
&lt;p&gt;在普通 Markdown 图片语法的 alt 文本中直接标注宽度：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![架构图 w-60%](./spring.webp &quot;系统数据流转架构图&quot;)

![图标 w-120px](./summer.webp &quot;高清徽标&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./spring.webp&quot; alt=&quot;风景 w-60%&quot; title=&quot;缩放到父容器宽度的 60% 并居中&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;w-60%&lt;/code&gt;：将图片宽度限制为父容器的 60% 并水平居中。&lt;/li&gt;
&lt;li&gt;引号中的内容自动渲染为图片下方的图题说明。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;像素宽度效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./autumn.webp&quot; alt=&quot;风景 w-240px&quot; title=&quot;固定 240px 宽度的缩略图&quot; /&gt;&lt;/p&gt;
&lt;h2&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;w-60%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按父容器百分比缩放&lt;/td&gt;
&lt;td&gt;正文中的大图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;w-240px&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;固定像素宽度&lt;/td&gt;
&lt;td&gt;图标、徽标、小截图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;::: grid{columns=&quot;3&quot;}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;三列网格&lt;/td&gt;
&lt;td&gt;同主题组图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;::: grid{aspect=&quot;1/1&quot; fit=&quot;cover&quot;}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;方形裁切&lt;/td&gt;
&lt;td&gt;头像墙、封面墙&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: tip 图片存放建议
把配图与 &lt;code&gt;index.md&lt;/code&gt; 放在同一个文章文件夹中，用 &lt;code&gt;./file.webp&lt;/code&gt; 这类相对路径引用。这样文章迁移或归档时资源会一起被带走，也不会因为图床失效而产生死图。
:::&lt;/p&gt;
</content:encoded></item><item><title>代码选项组</title><link>https://www.ariels.xyz/posts/markdown-tabs/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-tabs/</guid><description>用 tabs 容器把多语言实现、多包管理器命令并排切换展示，支持默认激活项与全局同步联动。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;代码选项组（Tabs / Code Group）用于在同一卡片中并排切换展示多种编程语言、包管理器命令或不同环境的操作指南。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::: tabs&lt;/code&gt; 容器与 &lt;code&gt;@tab&lt;/code&gt; 分割子选项卡：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#markdown-tabs-demo

@tab pnpm#pnpm

```bash
pnpm install
pnpm dev
```

@tab npm#npm

```bash
npm install
npm run dev
```

@tab Bun#bun

```bash
bun install
bun dev
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#markdown-tabs-demo&lt;/p&gt;
&lt;p&gt;@tab pnpm#pnpm&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab npm#npm&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install
npm run dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@tab Bun#bun&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bun install
bun dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@tab 标签文字#同步标识&lt;/code&gt; 是完整写法：井号前是显示文案，井号后是全站同步用的标识。&lt;/p&gt;
&lt;h2&gt;标签内容不限于代码&lt;/h2&gt;
&lt;p&gt;每个 &lt;code&gt;@tab&lt;/code&gt; 内部都是完整的 Markdown 上下文，表格、列表、提示容器都可以放入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#deploy-target

@tab Vercel#vercel

在 Vercel 中导入内容仓库，构建命令填写 `pnpm build`。

| 配置项 | 值 |
| --- | --- |
| 输出目录 | `dist` |
| Node 版本 | 22 |

@tab Cloudflare Pages#cloudflare

在 Cloudflare Pages 中连接同一仓库。

| 配置项 | 值 |
| --- | --- |
| 构建命令 | `pnpm build` |
| 输出目录 | `dist` |

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#deploy-target&lt;/p&gt;
&lt;p&gt;@tab Vercel#vercel&lt;/p&gt;
&lt;p&gt;在 Vercel 中导入内容仓库，构建命令填写 &lt;code&gt;pnpm build&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;/td&gt;
&lt;td&gt;&lt;code&gt;dist&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node 版本&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;@tab Cloudflare Pages#cloudflare&lt;/p&gt;
&lt;p&gt;在 Cloudflare Pages 中连接同一仓库。&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;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;输出目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dist&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;指定默认激活项&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;@tab:active&lt;/code&gt; 显式标记初次加载时选中的选项卡：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tabs#runtime-choice

@tab Node.js#node

Node.js 运行时。

@tab:active Bun#bun

Bun 运行时（默认选中）。

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tabs#runtime-choice&lt;/p&gt;
&lt;p&gt;@tab Node.js#node&lt;/p&gt;
&lt;p&gt;Node.js 运行时。&lt;/p&gt;
&lt;p&gt;@tab:active Bun#bun&lt;/p&gt;
&lt;p&gt;Bun 运行时（默认选中）。&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;核心特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认激活&lt;/strong&gt;：使用 &lt;code&gt;@tab:active&lt;/code&gt; 显式标记初次加载默认选中的选项卡。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全局同步&lt;/strong&gt;：全站相同 &lt;code&gt;#id&lt;/code&gt; 的选项卡（如 &lt;code&gt;#pnpm&lt;/code&gt;）点击切换时会自动保持联动同步。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;键盘导航&lt;/strong&gt;：完全支持左右方向键切换焦点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 全局同步的用法
同一篇文章里放两组 &lt;code&gt;#package-managers&lt;/code&gt; 选项卡，读者只要在其中一组里选择了 &lt;code&gt;pnpm&lt;/code&gt;，另一组也会同步切到 &lt;code&gt;pnpm&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;/td&gt;
&lt;td&gt;&lt;code&gt;::: tabs&lt;/code&gt; + &lt;code&gt;@tab&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;折叠而不切换&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/codeblock-collapse/&quot;&gt;代码折叠&lt;/a&gt; &lt;code&gt;collapse={4-8}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;强调差异&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/codeblock-diff/&quot;&gt;差异标记&lt;/a&gt; &lt;code&gt;ins&lt;/code&gt; / &lt;code&gt;del&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>代码树</title><link>https://www.ariels.xyz/posts/markdown-code-tree/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-code-tree/</guid><description>把左侧文件树导航与右侧代码高亮展示合二为一，适合演示多文件工程与组件封装结构。</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;代码树是一个将「左侧文件树导航」与「右侧代码高亮展示」无缝结合的高级复合组件，非常适合展示多文件工程示例与组件封装结构。&lt;/p&gt;
&lt;h2&gt;容器语法&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;code-tree&lt;/code&gt; 容器内包裹多个带有 &lt;code&gt;title&lt;/code&gt; 属性的代码块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: code-tree{title=&quot;按钮组件封装&quot; entry=&quot;Button.svelte&quot; height=&quot;380px&quot;}

```svelte title=&quot;Button.svelte&quot;
&amp;lt;script lang=&quot;ts&quot;&amp;gt;
  export let variant: &apos;primary&apos; | &apos;secondary&apos; = &apos;primary&apos;;
&amp;lt;/script&amp;gt;

&amp;lt;button class=&quot;btn btn-{variant}&quot;&amp;gt;
  &amp;lt;slot /&amp;gt;
&amp;lt;/button&amp;gt;
```

```ts title=&quot;types.ts&quot;
export type ButtonVariant = &apos;primary&apos; | &apos;secondary&apos;;
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: code-tree{title=&quot;按钮组件封装&quot; entry=&quot;Button.svelte&quot; height=&quot;380px&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script lang=&quot;ts&quot;&amp;gt;
  export let variant: &apos;primary&apos; | &apos;secondary&apos; = &apos;primary&apos;;
&amp;lt;/script&amp;gt;

&amp;lt;button class=&quot;btn btn-{variant}&quot;&amp;gt;
  &amp;lt;slot /&amp;gt;
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;export type ButtonVariant = &apos;primary&apos; | &apos;secondary&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;每个代码块的 &lt;code&gt;title&lt;/code&gt; 就是它在左侧树中的文件名，&lt;code&gt;entry&lt;/code&gt; 指定首次加载时默认激活的文件，&lt;code&gt;height&lt;/code&gt; 控制整体高度。&lt;/p&gt;
&lt;h2&gt;用嵌套路径表达多层目录&lt;/h2&gt;
&lt;p&gt;代码块的 &lt;code&gt;title&lt;/code&gt; 支持用 &lt;code&gt;/&lt;/code&gt; 书写层级，左侧会自动生成对应的目录树：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: code-tree{title=&quot;配置叠加示例&quot; entry=&quot;user-config.ts&quot; height=&quot;420px&quot;}

```ts title=&quot;src/user/user-config.ts&quot;
import site from &apos;../../config/site.yaml&apos;;
export default { site };
```

```yaml title=&quot;config/site.yaml&quot;
site: https://example.com/
title: 我的博客
```

```ts title=&quot;src/config/siteConfig.ts&quot;
export const siteConfig = {
  base: &apos;/&apos;,
  trailingSlash: &apos;always&apos;,
};
```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: code-tree{title=&quot;配置叠加示例&quot; entry=&quot;src/user/user-config.ts&quot; height=&quot;420px&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import site from &apos;../../config/site.yaml&apos;;
export default { site };
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;site: https://example.com/
title: 我的博客
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig = {
  base: &apos;/&apos;,
  trailingSlash: &apos;always&apos;,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;本地目录直接导入语法&lt;/h2&gt;
&lt;p&gt;Shirone 支持直接通过文件路径导入本地工程目录生成代码树：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@[code-tree title=&quot;站点基础配置&quot; entry=&quot;siteConfig.ts&quot;](/src/config)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;@&lt;a href=&quot;/src/config&quot;&gt;code-tree title=&quot;站点基础配置&quot; entry=&quot;siteConfig.ts&quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;::: warning 路径基准
&lt;code&gt;@[code-tree]&lt;/code&gt; 的路径以仓库根目录为基准，构建期会读取该目录下的真实文件。若目录不存在或为空，会回退为空的导航面板。发布到博客时，路径必须指向站点仓库中确实存在的目录。
:::&lt;/p&gt;
&lt;h2&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;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;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;代码树顶栏标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;entry&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;默认激活的文件名（或相对路径）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;height&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;容器高度，如 &lt;code&gt;380px&lt;/code&gt;、&lt;code&gt;60vh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;交互特性&lt;/h2&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;code&gt;entry=&quot;filename&quot;&lt;/code&gt; 指定页面首次加载时默认激活展示的文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自适应滚动&lt;/strong&gt;：高度与滚动条经过无障碍与移动端优化，保持阅读舒适。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>文件树</title><link>https://www.ariels.xyz/posts/markdown-file-tree/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-file-tree/</guid><description>用容器或围栏代码块展示项目目录结构，自动匹配文件图标、支持折叠与新增/删除/修改状态标记。</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;文件树组件用于展示项目的目录与文件结构，支持自动识别文件扩展名图标、目录层级折叠以及变更状态标注。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;支持容器语法与代码围栏双语法。&lt;/p&gt;
&lt;h3&gt;容器语法&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;::: file-tree{title=&quot;Shirone 目录结构&quot;}
- src/
  - config/
    - siteConfig.ts
    - sidebarConfig.ts
  - content/
    - posts/
      - hello-world.md
  - astro.config.mjs
- package.json
- pnpm-lock.yaml
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: file-tree{title=&quot;Shirone 目录结构&quot;}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;src/
&lt;ul&gt;
&lt;li&gt;config/
&lt;ul&gt;
&lt;li&gt;siteConfig.ts&lt;/li&gt;
&lt;li&gt;sidebarConfig.ts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;content/
&lt;ul&gt;
&lt;li&gt;posts/
&lt;ul&gt;
&lt;li&gt;hello-world.md&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;astro.config.mjs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;package.json&lt;/li&gt;
&lt;li&gt;pnpm-lock.yaml
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;围栏代码块语法&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;```file-tree title=&quot;构建输出&quot;
dist/
├── assets/
│   ├── app.js
│   └── style.css
├── index.html
└── pagefind/
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;
**渲染效果**：

```file-tree title=&quot;构建输出&quot;
dist/
├── assets/
│   ├── app.js
│   └── style.css
├── index.html
└── pagefind/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::: tip 两种语法怎么选
容器语法用嵌套列表书写，随手增删层级不必手动对齐制表符连线；围栏语法更适合直接从 &lt;code&gt;tree&lt;/code&gt; 命令粘贴输出。
:::&lt;/p&gt;
&lt;h2&gt;变更状态与图标智能匹配&lt;/h2&gt;
&lt;p&gt;在条目前添加符号即可标注差异状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: file-tree{title=&quot;本次提交的改动&quot;}
- src/
  - content/
    ~ posts/
      + markdown-file-tree/
      - legacy-notes.md
  ~ astro.config.mjs
  + src/utils/markdown-diff.ts
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: file-tree{title=&quot;本次提交的改动&quot;}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;src/
&lt;ul&gt;
&lt;li&gt;content/
~ posts/
&lt;ul&gt;
&lt;li&gt;markdown-file-tree/&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;legacy-notes.md
~ astro.config.mjs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;src/utils/markdown-diff.ts
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
&lt;td&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;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;td&gt;修改状态指示色&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;渲染特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;扩展名识别&lt;/strong&gt;：自动根据文件后缀（如 &lt;code&gt;.ts&lt;/code&gt;、&lt;code&gt;.json&lt;/code&gt;、&lt;code&gt;.astro&lt;/code&gt;、&lt;code&gt;.md&lt;/code&gt;、&lt;code&gt;.css&lt;/code&gt;、&lt;code&gt;.png&lt;/code&gt;）匹配对应的 Material / Devicon 图标。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;差异标记&lt;/strong&gt;：支持在条目前添加 &lt;code&gt;+&lt;/code&gt;（新增）、&lt;code&gt;-&lt;/code&gt;（删除）、&lt;code&gt;~&lt;/code&gt;（修改）等符号，自动生成带颜色的差异状态指示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;原生折叠&lt;/strong&gt;：包含子目录的节点默认支持可折叠展开交互。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;/td&gt;
&lt;td&gt;&lt;code&gt;file-tree&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;目录 + 多文件源码并排查看&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/markdown-code-tree/&quot;&gt;代码树&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>步骤引导</title><link>https://www.ariels.xyz/posts/markdown-steps/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-steps/</guid><description>把扁平的有序列表渲染为带连线与序号徽章的视觉流程图，支持在每一步内嵌套代码与提示。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;步骤引导容器 &lt;code&gt;steps&lt;/code&gt; 用于编写安装指南、配置教程或操作流程，将原本扁平的有序数字列表渲染为带有连线与徽章的视觉流程图。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::: steps&lt;/code&gt; 容器包裹标准 Markdown 有序列表：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: steps{title=&quot;快速上手三步曲&quot;}

1. **安装环境依赖**

   确保本地 Node.js 版本满足 `&amp;gt;= 22.12`，并安装 pnpm 包管理器。

2. **克隆并初始化仓库**

   ```bash
   git clone https://github.com/LyraVoid/Shirone.git
   cd Shirone
   pnpm install
   ```

3. **启动本地开发服务器**

   运行 `pnpm dev` 并在浏览器中访问 `http://localhost:4321`。

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: steps{title=&quot;快速上手三步曲&quot;}&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装环境依赖&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;确保本地 Node.js 版本满足 &lt;code&gt;&amp;gt;= 22.12&lt;/code&gt;，并安装 pnpm 包管理器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;克隆并初始化仓库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/LyraVoid/Shirone.git
cd Shirone
pnpm install
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动本地开发服务器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;运行 &lt;code&gt;pnpm dev&lt;/code&gt; 并在浏览器中访问 &lt;code&gt;http://localhost:4321&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;方括号标题形式&lt;/h2&gt;
&lt;p&gt;标题也支持方括号写法，适合标题中包含标点的情况：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: steps[发布前检查清单]
1. 运行 `pnpm.cmd astro check`，确认 0 错误
2. 运行 `pnpm.cmd build`，确认无警告
3. 推送内容仓库，等待跨仓构建
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: steps[发布前检查清单]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行 &lt;code&gt;pnpm.cmd astro check&lt;/code&gt;，确认 0 错误&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;pnpm.cmd build&lt;/code&gt;，确认无警告&lt;/li&gt;
&lt;li&gt;推送内容仓库，等待跨仓构建
:::&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;步骤内部可以放什么&lt;/h2&gt;
&lt;p&gt;每一步都是一个完整的 Markdown 上下文，可以自由嵌套段落、代码块、提示容器与图片：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: steps{title=&quot;配置评论系统&quot;}

1. **填写环境变量**

   ::: warning 注意
   变量名区分大小写。
   :::

2. **在配置文件中启用**

   ```yaml title=&quot;config/comment.yaml&quot;
   enable: true
   provider: twikoo
   ```

:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: steps{title=&quot;配置评论系统&quot;}&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;填写环境变量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;::: warning 注意
变量名区分大小写。
:::&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在配置文件中启用&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;enable: true
provider: twikoo
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&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;/td&gt;
&lt;td&gt;&lt;code&gt;::: steps&lt;/code&gt; 容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;并列的要点罗列&lt;/td&gt;
&lt;td&gt;普通有序列表 &lt;code&gt;1. 2. 3.&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无需顺序的清单&lt;/td&gt;
&lt;td&gt;无序列表 &lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;渲染特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;序号圆圈与竖向引导连线完全由 CSS 伪元素与 Material 3 令牌驱动，语义结构保持为标准的 &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; 列表。&lt;/li&gt;
&lt;li&gt;支持在每个步骤内部自由嵌套段落、代码块、提示容器或图片。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>卡片与字段组</title><link>https://www.ariels.xyz/posts/markdown-cards/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-cards/</guid><description>GitHub 仓库卡片、API 字段参数卡片组与折叠卡片组，让结构化信息拥有对应的视觉结构。</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 提供了丰富的卡片系统，包括 GitHub 仓库卡片、API 字段参数卡片组以及折叠卡片组。&lt;/p&gt;
&lt;h2&gt;GitHub 仓库卡片&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;::github&lt;/code&gt; 指令自动拉取并展示 GitHub 仓库信息（含名称、简介、Star 数与主语言）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;LyraVoid/Shirone&quot;}

::github{repo=&quot;LyraVoid/Shirone-Docs&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;LyraVoid/Shirone&quot;}&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;LyraVoid/Shirone-Docs&quot;}&lt;/p&gt;
&lt;p&gt;仓库信息在构建期获取并缓存，页面本身不会在浏览器里请求 GitHub API。&lt;/p&gt;
&lt;h2&gt;API 字段参数卡片组&lt;/h2&gt;
&lt;p&gt;在编写技术文档、API 说明或配置项手册时，使用 &lt;code&gt;field-group&lt;/code&gt; 与 &lt;code&gt;field&lt;/code&gt; 容器生成结构化的参数卡片：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::: field-group

::: field title
@type string
@required

网站正式标题，显示在顶栏和浏览器标签页。
:::

::: field subtitle
@type string
@optional

网站副标题，用于元数据与首页辅助展示。
:::

::: field themeColor
@type number
@optional
@default 315

主题色相值，决定全站的动态配色基准。
:::

::::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;:::: field-group&lt;/p&gt;
&lt;p&gt;::: field title
@type string
@required&lt;/p&gt;
&lt;p&gt;网站正式标题，显示在顶栏和浏览器标签页。
:::&lt;/p&gt;
&lt;p&gt;::: field subtitle
@type string
@optional&lt;/p&gt;
&lt;p&gt;网站副标题，用于元数据与首页辅助展示。
:::&lt;/p&gt;
&lt;p&gt;::: field themeColor
@type number
@optional
@default 315&lt;/p&gt;
&lt;p&gt;主题色相值，决定全站的动态配色基准。
:::&lt;/p&gt;
&lt;p&gt;::::&lt;/p&gt;
&lt;p&gt;字段名写在 &lt;code&gt;::: field&lt;/code&gt; 之后，首段以 &lt;code&gt;@&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;@type &amp;lt;类型&amp;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;@required&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@optional&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@default &amp;lt;值&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;默认值&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;折叠面板卡片&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;::: collapse accordion
- :+ 默认展开的项目

  这里是第一个卡片的内容正文。

- 默认折叠的项目

  这里是第二个卡片的内容正文。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: collapse accordion&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;:+ 默认展开的项目&lt;/p&gt;
&lt;p&gt;这里是第一个卡片的内容正文。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认折叠的项目&lt;/p&gt;
&lt;p&gt;这里是第二个卡片的内容正文。
:::&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;:+&lt;/code&gt; 前缀标记该项默认展开，未标注的项默认折叠。&lt;/p&gt;
&lt;p&gt;::: tip 自包含的单卡
不写 &lt;code&gt;accordion&lt;/code&gt; 时，&lt;code&gt;collapse&lt;/code&gt; 容器渲染为独立的折叠卡片：
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: collapse
- 独立的折叠标题

  折叠正文内容。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: collapse&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;独立的折叠标题&lt;/p&gt;
&lt;p&gt;折叠正文内容。
:::&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;/td&gt;
&lt;td&gt;&lt;code&gt;::github&lt;/code&gt; 卡片&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一组配置项的逐条说明&lt;/td&gt;
&lt;td&gt;&lt;code&gt;field-group&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要读者主动展开的长内容&lt;/td&gt;
&lt;td&gt;&lt;code&gt;collapse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>Github 警报</title><link>https://www.ariels.xyz/posts/markdown-github-alerts/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-github-alerts/</guid><description>原生支持 GitHub 官方的警报块语法，仓库 README 与博客正文共用同一套渲染结果。</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 原生支持 GitHub 官方的警报块语法，无需任何指令转换即可将 GitHub Markdown 样式的引用块渲染为现代化的警报容器。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用标准引用语法 &lt;code&gt;&amp;gt;&lt;/code&gt; 开头，首行书写大写的警报类型标记：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; 这是普通笔记说明，适合记录背景信息。

&amp;gt; [!TIP]
&amp;gt; 这是操作小技巧，帮助提升工作流效率。

&amp;gt; [!IMPORTANT]
&amp;gt; 核心关键配置，部署生产前请务必确认。

&amp;gt; [!WARNING]
&amp;gt; 潜在风险预警，请注意参数兼容性。

&amp;gt; [!CAUTION]
&amp;gt; 危险操作提醒，执行前请先做好数据备份。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
这是普通笔记说明，适合记录背景信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
这是操作小技巧，帮助提升工作流效率。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
核心关键配置，部署生产前请务必确认。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
潜在风险预警，请注意参数兼容性。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!CAUTION]
危险操作提醒，执行前请先做好数据备份。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;多行内容与嵌套语法&lt;/h2&gt;
&lt;p&gt;警报块内部依旧是普通引用上下文，可以承载多段文字、列表与代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!TIP]
&amp;gt; 提交前建议依次执行：
&amp;gt;
&amp;gt; 1. `pnpm.cmd astro check`
&amp;gt; 2. `pnpm.cmd build`
&amp;gt;
&amp;gt; 两条命令都通过后，再推送内容仓库。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
提交前建议依次执行：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pnpm.cmd astro check&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm.cmd build&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;两条命令都通过后，再推送内容仓库。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&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;th&gt;建议用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[!NOTE]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;中性&lt;/td&gt;
&lt;td&gt;背景信息、补充说明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[!TIP]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;中性偏轻&lt;/td&gt;
&lt;td&gt;提效技巧、可选的优化手段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[!IMPORTANT]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;必须知晓的前提条件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[!WARNING]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;可能出错但可恢复的操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[!CAUTION]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;最高&lt;/td&gt;
&lt;td&gt;不可逆或高成本的操作&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;与通用提示容器的互通性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;内部统一转译为与提示容器相同的语义 AST 节点。&lt;/li&gt;
&lt;li&gt;保证在 GitHub 仓库原生 README 预览与博客正文发布时拥有一致的排版呈现。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 该选哪一种写法
在需要同时出现在 GitHub README 与博客里的文档中，使用 &lt;code&gt;&amp;gt; [!NOTE]&lt;/code&gt; 形式；只在博客中发布的文章，用&lt;a href=&quot;/posts/markdown-admonitions/&quot;&gt;提示容器&lt;/a&gt;的 &lt;code&gt;::: tip&lt;/code&gt; 形式书写更自由，标题也支持自定义。
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!WARNING]
&amp;gt; GitHub 端只识别这五种固定标记，写成 `&amp;gt; [!DANGER]` 会被当作普通引用渲染。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>提示容器</title><link>https://www.ariels.xyz/posts/markdown-admonitions/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-admonitions/</guid><description>tip、info、warning、caution、important、note 与 details 七种容器，为文章中的提示与警告分层。</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;提示容器用于在文章中高亮特定级别的提示、警告、注意或可折叠区域，严格遵循 Material 3 Expressive 的容器表面分层设计。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;支持方括号标题与空格标题两种书写形式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: tip[操作提示]
建议在修改核心配置前先运行类型检查。
:::

::: warning 部署前检查
若未配置正式域名，社交分享卡片可能无法正确生成。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;两种写法完全等价，方括号形式更适合标题中包含空格或标点的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: tip[操作提示]
建议在修改核心配置前先运行类型检查。
:::&lt;/p&gt;
&lt;p&gt;::: warning 部署前检查
若未配置正式域名，社交分享卡片可能无法正确生成。
:::&lt;/p&gt;
&lt;h2&gt;全部容器类型&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;::: info 相关参考
关于双仓架构的更多细节，请参阅内容分离指南。
:::

::: caution 破坏性操作
执行此命令将清除本地未提交的改动。
:::

::: important 关键结论
构建产物的体积直接决定首屏耗时。
:::

::: note 普通笔记
这一条只是补充记录，不构成操作建议。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: info 相关参考
关于双仓架构的更多细节，请参阅内容分离指南。
:::&lt;/p&gt;
&lt;p&gt;::: caution 破坏性操作
执行此命令将清除本地未提交的改动。
:::&lt;/p&gt;
&lt;p&gt;::: important 关键结论
构建产物的体积直接决定首屏耗时。
:::&lt;/p&gt;
&lt;p&gt;::: note 普通笔记
这一条只是补充记录，不构成操作建议。
:::&lt;/p&gt;
&lt;h2&gt;折叠面板 details&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;details&lt;/code&gt; 容器渲染为原生的 &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; 折叠组件，适合放置日志、长清单与可选的补充说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: details 点击展开详细日志
构建过程的详细输出如下：

- 同步完成
- 生成静态 HTML 成功
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: details 点击展开详细日志
构建过程的详细输出如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同步完成&lt;/li&gt;
&lt;li&gt;生成静态 HTML 成功
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;th&gt;视觉风格&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;技巧与建议&lt;/td&gt;
&lt;td&gt;强调色彩容器与灯泡图标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;补充信息&lt;/td&gt;
&lt;td&gt;主色调表面与信息图标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;warning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;注意与预警&lt;/td&gt;
&lt;td&gt;警示色调与三角感叹号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;caution&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;危险操作&lt;/td&gt;
&lt;td&gt;错误色调与高对比警示框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;important&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;关键重点&lt;/td&gt;
&lt;td&gt;鲜亮强调容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;note&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;普通笔记&lt;/td&gt;
&lt;td&gt;中性表面容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;details&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;折叠面板&lt;/td&gt;
&lt;td&gt;带箭头的原生 details 折叠组件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;容器内部可以放什么&lt;/h2&gt;
&lt;p&gt;容器内部是完整的 Markdown 上下文，可以嵌套列表、代码块、表格乃至其它容器：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: warning 依赖版本要求
本地 Node.js 版本必须满足 `&amp;gt;= 22.12`：

```bash
node -v
```
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: warning 依赖版本要求
本地 Node.js 版本必须满足 &lt;code&gt;&amp;gt;= 22.12&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;node -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;::: tip 与 GitHub 警报的关系
&lt;code&gt;&amp;gt; [!NOTE]&lt;/code&gt; 这类 GitHub 警报会被统一转译为同一套容器节点，两种写法混用时视觉完全一致，详见&lt;a href=&quot;/posts/markdown-github-alerts/&quot;&gt;Github 警报&lt;/a&gt;。
:::&lt;/p&gt;
</content:encoded></item><item><title>内容注释</title><link>https://www.ariels.xyz/posts/markdown-annotations/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-annotations/</guid><description>比脚注更生动的旁注系统，正文标记与右侧边缘卡片联动，移动端自动切换为弹出浮层。</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;内容注释提供了比传统脚注更为生动、交互式的旁注说明系统，支持行内标记与右侧边缘卡片联动。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;在正文中使用 &lt;code&gt;[+tag]&lt;/code&gt; 插入引用标记，并在下方或文末定义注释块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Astro 采用孤岛架构 [+islands] 来保持页面的极速加载。

[+islands]:
  孤岛架构指由静态 HTML 所包裹的独立交互组件区域，只有交互区域才加载 JavaScript。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：Astro 采用孤岛架构 [+islands] 来保持页面的极速加载。&lt;/p&gt;
&lt;p&gt;[+islands]:
孤岛架构指由静态 HTML 所包裹的独立交互组件区域，只有交互区域才加载 JavaScript。&lt;/p&gt;
&lt;p&gt;标记名 &lt;code&gt;islands&lt;/code&gt; 只是一个标识符，正文中的 &lt;code&gt;[+islands]&lt;/code&gt; 与定义块 &lt;code&gt;[+islands]:&lt;/code&gt; 通过它配对，两者出现的先后顺序不作要求。&lt;/p&gt;
&lt;h2&gt;一篇多处注释&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;站点在构建期完成 SSR [+ssr]，产物是纯静态文件，因此首屏没有水合等待 [+hydration]。

[+ssr]:
  服务端渲染。页面 HTML 在构建阶段就已生成。

[+hydration]:
  水合。浏览器接管静态 HTML 并挂载交互逻辑的过程。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：站点在构建期完成 SSR [+ssr]，产物是纯静态文件，因此首屏没有水合等待 [+hydration]。&lt;/p&gt;
&lt;p&gt;[+ssr]:
服务端渲染。页面 HTML 在构建阶段就已生成。&lt;/p&gt;
&lt;p&gt;[+hydration]:
水合。浏览器接管静态 HTML 并挂载交互逻辑的过程。&lt;/p&gt;
&lt;h2&gt;与脚注的取舍&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对比项&lt;/th&gt;
&lt;th&gt;内容注释 &lt;code&gt;[+tag]&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;传统脚注 &lt;code&gt;[^1]&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;展示位置&lt;/td&gt;
&lt;td&gt;桌面端固定在右侧旁注区&lt;/td&gt;
&lt;td&gt;文末统一罗列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;阅读动线&lt;/td&gt;
&lt;td&gt;无需跳转，视线水平移动即可&lt;/td&gt;
&lt;td&gt;需要上下跳跃&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;移动端表现&lt;/td&gt;
&lt;td&gt;轻触唤出居中浮层&lt;/td&gt;
&lt;td&gt;跳转到文末锚点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适合内容&lt;/td&gt;
&lt;td&gt;术语解释、补充说明、延伸阅读&lt;/td&gt;
&lt;td&gt;引用出处、法律声明&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;渲染效果与交互&lt;/h2&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;：在触屏或窄屏设备上，轻触标记即可唤出居中浮层卡片查看详细注释。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纯静态输出&lt;/strong&gt;：注释内容直接由服务端输出，兼顾无障碍访问与爬虫抓取。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 内容长度
单条注释建议控制在两到三行以内。更长的补充材料更适合写成 &lt;code&gt;::: details&lt;/code&gt; 折叠块，或直接并入正文。上方的 [+islands] 与 [+hydration] 就是合理长度的示例。
:::&lt;/p&gt;
</content:encoded></item><item><title>缩写词悬浮</title><link>https://www.ariels.xyz/posts/markdown-abbreviations/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-abbreviations/</guid><description>声明一次缩写词字典，正文中所有匹配词条自动渲染为带原生气泡提示的 abbr 元素。</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;缩写词语法用于在文章中对专业术语进行统一定义，并在正文中自动渲染为带有原生气泡提示的 &lt;code&gt;&amp;lt;abbr&amp;gt;&lt;/code&gt; 元素。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;在文章任意位置（通常在文末或章节开头）声明缩写词字典：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*[SSR]: 服务端渲染技术
*[LCP]: 最大内容绘制时间指标
*[AST]: 抽象语法树
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后在正文直接书写该缩写词：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;采用 SSR 可以大幅优化站点的 LCP 表现，并在 AST 解析阶段完成静态转换。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：采用 SSR 可以大幅优化站点的 LCP 表现，并在 AST 解析阶段完成静态转换。&lt;/p&gt;
&lt;p&gt;把鼠标悬停在 SSR、LCP 或 AST 上即可看到对应的中文解释。&lt;/p&gt;
&lt;p&gt;*[SSR]: 服务端渲染技术
*[LCP]: 最大内容绘制时间指标
*[AST]: 抽象语法树&lt;/p&gt;
&lt;h2&gt;自动匹配规则&lt;/h2&gt;
&lt;p&gt;字典声明之后，同一篇文章中&lt;strong&gt;所有&lt;/strong&gt;匹配到的词条都会被转换为缩写词，无需逐处手动标注：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SSR 的输出是纯 HTML，因此 SSR 页面在网络条件较差时依然可以快速呈现首屏。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：SSR 的输出是纯 HTML，因此 SSR 页面在网络条件较差时依然可以快速呈现首屏。&lt;/p&gt;
&lt;p&gt;匹配以词为单位进行，&lt;code&gt;SSR&lt;/code&gt; 不会影响 &lt;code&gt;SSRConfig&lt;/code&gt; 这样的长词。大小写敏感，&lt;code&gt;ssr&lt;/code&gt; 不会被替换。&lt;/p&gt;
&lt;h2&gt;渲染机制&lt;/h2&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;：采用原生 Popover 顶层与 CSS Anchor 定位技术，悬浮窗不会被侧栏或父容器边界遮挡裁剪，无需等待浏览器默认的 title 延迟。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按需加载&lt;/strong&gt;：只有在检测到缩写词语法的文章中才会激活轻量交互模块。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 写作建议
缩写词字典适合定义&lt;strong&gt;首次出现&lt;/strong&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;*[SSR]: 服务端渲染&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;通用术语，全文自动生效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;**SSR**（服务端渲染）&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只解释一次，不希望后续都被标记&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;abbr title=&quot;...&quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;需要精确控制单处标记&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>隐秘文本</title><link>https://www.ariels.xyz/posts/markdown-spoiler/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-spoiler/</guid><description>用 :spoiler 指令遮盖剧情、谜题答案或敏感信息，读者悬停或轻触后才显现内容。</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;隐秘文本（黑幕防剧透）用于遮盖关键剧情、谜题答案或敏感信息，读者在鼠标悬停或触屏轻触后方可显现内容。&lt;/p&gt;
&lt;h2&gt;语法格式&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;:spoiler&lt;/code&gt; 指令包裹隐藏内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这个故事最后的结局是 :spoiler[真相其实是两个人早已相识]。

最终通关的正确密码为 :spoiler[42-7890]。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：这个故事最后的结局是 :spoiler[真相其实是两个人早已相识]。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：最终通关的正确密码为 :spoiler[42-7890]。&lt;/p&gt;
&lt;h2&gt;在段落与列表中使用&lt;/h2&gt;
&lt;p&gt;指令属于行内语法，可以嵌在任意文本流里：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- 第一位登场的角色是 :spoiler[戴着红围巾的少年]
- 关键道具藏在 :spoiler[钟楼顶层的暗格里]
- 隐藏结局的触发条件是 :spoiler[在第三章前收集齐三枚徽章]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一位登场的角色是 :spoiler[戴着红围巾的少年]&lt;/li&gt;
&lt;li&gt;关键道具藏在 :spoiler[钟楼顶层的暗格里]&lt;/li&gt;
&lt;li&gt;隐藏结局的触发条件是 :spoiler[在第三章前收集齐三枚徽章]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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;/td&gt;
&lt;td&gt;:spoiler[带星号的那串数字]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;谁是真正的委托人？&lt;/td&gt;
&lt;td&gt;:spoiler[一直沉默的那位管家]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;交互与特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;默认状态下呈现不透明的防剧透遮罩背景。&lt;/li&gt;
&lt;li&gt;鼠标悬停（桌面端）或点击（移动触屏端）时柔和淡入真实文字。&lt;/li&gt;
&lt;li&gt;使用纯 CSS 与轻量交互实现，兼顾移动设备兼容性与阅读隐私。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: warning 它不是安全机制
遮罩只防止「无意间扫到」，被遮盖的文字依然存在于页面源码中。密码、密钥、Token 之类的真正敏感信息请使用文章加密功能（&lt;code&gt;encrypted: true&lt;/code&gt; + &lt;code&gt;password&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;/td&gt;
&lt;td&gt;&lt;code&gt;:spoiler[...]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;放置趣味谜底、答案&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:spoiler[...]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保护口令、密钥、隐私数据&lt;/td&gt;
&lt;td&gt;文章加密&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>马克笔高亮</title><link>https://www.ariels.xyz/posts/markdown-marker/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-marker/</guid><description>使用成对的双等号为正文短语添加荧光高亮，并可通过语义后缀切换强调色彩角色。</description><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;马克笔语法为正文中的短语提供醒目的荧光高亮视觉效果，基于原生语义化 &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; 标签渲染。&lt;/p&gt;
&lt;h2&gt;基础语法&lt;/h2&gt;
&lt;p&gt;使用成对的双等号 &lt;code&gt;==&lt;/code&gt; 包裹需要高亮的文字：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;在撰写文章时，使用 ==主题主色高亮== 标记核心要点与结论。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：在撰写文章时，使用 ==主题主色高亮== 标记核心要点与结论。&lt;/p&gt;
&lt;h2&gt;语义状态后缀&lt;/h2&gt;
&lt;p&gt;可以通过大括号后缀指定特定的语义色彩角色：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;==次级强调状态=={.secondary}

==警告与需要修正的条件=={.error}

==建议与辅助提示=={.tip}

==三级调色板强调=={.tertiary}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;次级强调：==次级强调状态=={.secondary}&lt;/li&gt;
&lt;li&gt;警告色彩：==警告与需要修正的条件=={.error}&lt;/li&gt;
&lt;li&gt;辅助提示：==建议与辅助提示=={.tip}&lt;/li&gt;
&lt;li&gt;三级强调：==三级调色板强调=={.tertiary}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后缀语法与&lt;a href=&quot;/posts/markdown-attributes/&quot;&gt;扩展与属性&lt;/a&gt;共用同一套属性字典，因此多个 class 可以叠加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;==多重角色高亮=={.secondary .tip}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：==多重角色高亮=={.secondary .tip}&lt;/p&gt;
&lt;h2&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;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;code&gt;&amp;lt;strong&amp;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;code&gt;&amp;lt;em&amp;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;code&gt;&amp;lt;code&amp;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;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;视觉上的荧光标注&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;strong&gt;语义重要&lt;/strong&gt;、&lt;em&gt;语气强调&lt;/em&gt;、&lt;code&gt;inline-code&lt;/code&gt;、==荧光标注==&lt;/p&gt;
&lt;p&gt;::: tip 使用尺度
马克笔是&lt;strong&gt;视觉&lt;/strong&gt;工具而不是&lt;strong&gt;语义&lt;/strong&gt;工具。同一屏内出现三处以上的高亮，读者就会失去视觉锚点；建议只在结论、易错点与关键参数上使用。
:::&lt;/p&gt;
&lt;h2&gt;渲染特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;生成标准的 &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; HTML 标签，保障屏幕阅读器与辅助工具的可访问性。&lt;/li&gt;
&lt;li&gt;高亮背景色完全由 Material 3 Expressive 的语义调色板驱动，与站点的主题色动态同步。&lt;/li&gt;
&lt;li&gt;纯服务端渲染，无任何客户端脚本开销。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>响应式表格</title><link>https://www.ariels.xyz/posts/markdown-table/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-table/</guid><description>在 GFM 标准表格基础上增强排版与交互，构建期为表格注入响应式滚动容器，窄屏也不会撑破版面。</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 增强了 GitHub Flavored Markdown 标准表格的排版与交互体验，在构建期通过专门的渲染插件自动生成响应式滚动包裹层。&lt;/p&gt;
&lt;h2&gt;标准表格语法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;| 功能模块 | 对应状态 | 默认值 | 说明 |
| :--- | :---: | :---: | --- |
| 动态配色 | 稳定 | 315 | 默认粉紫色色相 |
| 无刷新切页 | 启用 | true | 基于 Swup 4 框架 |
| 零额外负担 | 严格遵循 | true | 页面关闭功能时零请求零体积 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&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;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;/td&gt;
&lt;td&gt;稳定&lt;/td&gt;
&lt;td&gt;315&lt;/td&gt;
&lt;td&gt;默认粉紫色色相&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无刷新切页&lt;/td&gt;
&lt;td&gt;启用&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;基于 Swup 4 框架&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;零额外负担&lt;/td&gt;
&lt;td&gt;严格遵循&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;页面关闭功能时零请求零体积&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;单元格内同样支持行内语法，例如 &lt;code&gt;代码&lt;/code&gt;、&lt;strong&gt;加粗&lt;/strong&gt;、&lt;a href=&quot;https://shirone.mysqil.com/&quot;&gt;链接&lt;/a&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;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;bvid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;必填&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&quot;none&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;对齐方式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:---&lt;/code&gt;：左对齐&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:---:&lt;/code&gt;：居中对齐&lt;/li&gt;
&lt;li&gt;&lt;code&gt;---:&lt;/code&gt;：右对齐&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;| 左对齐 | 居中 | 右对齐 |
| :--- | :---: | ---: |
| 文本 | 文本 | 文本 |
| 较长的左对齐内容 | 状态徽标 | 1,024 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&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;th&gt;右对齐&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;文本&lt;/td&gt;
&lt;td&gt;文本&lt;/td&gt;
&lt;td&gt;文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;较长的左对齐内容&lt;/td&gt;
&lt;td&gt;状态徽标&lt;/td&gt;
&lt;td&gt;1,024&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;左侧冒号决定整列的对齐规则，不书写冒号时默认沿用左对齐。&lt;/p&gt;
&lt;h2&gt;移动端响应式支持&lt;/h2&gt;
&lt;p&gt;在窄屏或移动端设备上，当表格列数较多或内容超出屏幕宽度时：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;构建期插件自动为表格注入外层响应式容器与平滑滚动样式。&lt;/li&gt;
&lt;li&gt;绝不会发生撑破页面视口或导致水平全局溢出的情况。&lt;/li&gt;
&lt;li&gt;表头固定与交替斑马纹背景完全遵循 Material 3 Expressive 的表面容器设计规范。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 写作建议
表格最适合承载「参数、对照、状态」这类结构化信息。如果每个单元格都要写上一段说明，说明它更适合改成字段卡片组（见&lt;a href=&quot;/posts/markdown-cards/&quot;&gt;卡片与字段组&lt;/a&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;/td&gt;
&lt;td&gt;表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单个配置项的详细解释&lt;/td&gt;
&lt;td&gt;字段卡片组&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作顺序说明&lt;/td&gt;
&lt;td&gt;步骤引导&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要折叠的长清单&lt;/td&gt;
&lt;td&gt;折叠面板&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>数学公式</title><link>https://www.ariels.xyz/posts/markdown-math/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-math/</guid><description>基于 KaTeX 的行内公式与块级公式，构建期渲染为静态 HTML 与 MathML，配色自动跟随主题。</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 集成了 KaTeX 数学排版引擎，支持行内公式与独立块级公式的高性能服务端静态渲染。&lt;/p&gt;
&lt;h2&gt;行内公式&lt;/h2&gt;
&lt;p&gt;使用单个美元符号 &lt;code&gt;$&lt;/code&gt; 包裹 TeX 公式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;质能守恒方程为 $E = mc^2$。

欧拉恒等式为 $e^{i\pi} + 1 = 0$。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;质能守恒方程为 $E = mc^2$。&lt;/p&gt;
&lt;p&gt;欧拉恒等式为 $e^{i\pi} + 1 = 0$。&lt;/p&gt;
&lt;p&gt;行内公式可以和普通文字、&lt;code&gt;行内代码&lt;/code&gt; 与&lt;strong&gt;加粗文本&lt;/strong&gt;自由混排，基线对齐由 KaTeX 自动处理。&lt;/p&gt;
&lt;h2&gt;块级公式&lt;/h2&gt;
&lt;p&gt;使用双美元符号 &lt;code&gt;$$&lt;/code&gt; 包裹独立公式块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$&lt;/p&gt;
&lt;p&gt;矩阵与联立方程同样支持：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$$
\begin{pmatrix}
a &amp;amp; b \\
c &amp;amp; d
\end{pmatrix}
\begin{pmatrix}
x \\
y
\end{pmatrix}
=
\begin{pmatrix}
ax + by \\
cx + dy
\end{pmatrix}
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;h1&gt;$$
\begin{pmatrix}
a &amp;amp; b \
c &amp;amp; d
\end{pmatrix}
\begin{pmatrix}
x \
y
\end{pmatrix}&lt;/h1&gt;
&lt;p&gt;\begin{pmatrix}
ax + by \
cx + dy
\end{pmatrix}
$$&lt;/p&gt;
&lt;p&gt;分式、求和与极限等常见结构也可以一并书写：&lt;/p&gt;
&lt;p&gt;$$
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}, \qquad
\lim_{x \to 0} \frac{\sin x}{x} = 1
$$&lt;/p&gt;
&lt;h2&gt;优势与特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSR 静态生成&lt;/strong&gt;：公式在构建阶段直接渲染为轻量 HTML 与 MathML 标记，无需在客户端动态加载庞大的 JavaScript 渲染引擎。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态配色跟随&lt;/strong&gt;：公式符号与背景色自动适配当前主题的 HCT 调色板与暗色模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可访问性与可复制性&lt;/strong&gt;：输出包含 MathML 语义结构，屏幕阅读器可以朗读公式，复制出的文本也是原始 TeX。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;::: tip 书写提示
块级公式的 &lt;code&gt;$$&lt;/code&gt; 建议独占一行，并与上下段落之间保留空行；矩阵中换行使用 &lt;code&gt;\\&lt;/code&gt;，列分隔使用 &lt;code&gt;&amp;amp;&lt;/code&gt;。若公式中包含 &lt;code&gt;$&lt;/code&gt; 字面量，请用反斜线转义为 &lt;code&gt;\$&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;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;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;td&gt;独立成行居中展示，适合推导过程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\begin{pmatrix}...\end{pmatrix}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;矩阵&lt;/td&gt;
&lt;td&gt;需要 &lt;code&gt;amsmath&lt;/code&gt; 风格的 TeX 结构&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>原生表情与图标</title><link>https://www.ariels.xyz/posts/markdown-emoji-icons/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-emoji-icons/</guid><description>原生 Unicode Emoji 直接渲染，配合 Iconify 与 Material Symbols 矢量图标系统，清晰度与体积两不误。</description><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 全面支持原生 Unicode Emoji 与现代化矢量图标库，兼具极高清晰度与零体积损耗。&lt;/p&gt;
&lt;h2&gt;原生 Unicode Emoji&lt;/h2&gt;
&lt;p&gt;Shirone 直接基于标准 UTF-8 编码渲染原生 Emoji，无需额外的转译插件或客户端字典。你可以把它们写进段落、标题、列表，甚至 frontmatter：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 支持的平台 🎯

- 🚀 构建阶段完成静态提取
- 🎨 配色跟随主题动态变化
- 🧩 组件按需加载
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🚀 构建阶段完成静态提取&lt;/li&gt;
&lt;li&gt;🎨 配色跟随主题动态变化&lt;/li&gt;
&lt;li&gt;🧩 组件按需加载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标题中同样可以直接书写，例如「支持的平台 🎯」，它会被原样纳入右侧目录。&lt;/p&gt;
&lt;p&gt;::: tip 使用建议
Emoji 属于系统字体渲染，不同操作系统与浏览器呈现的字形会有细微差别（Windows 与 macOS 的彩色字形风格并不相同）。装饰性使用完全没有问题，但不要用 Emoji 承载关键语义。
:::&lt;/p&gt;
&lt;h2&gt;矢量图标系统&lt;/h2&gt;
&lt;p&gt;Shirone 深度集成了 Iconify 与 Material Symbols 图标集：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在站点配置、导航栏、侧边栏卡片与自定义组件中，可直接使用标准图标标识符（如 &lt;code&gt;ri:book-open-line&lt;/code&gt;、&lt;code&gt;material-symbols:apps-rounded&lt;/code&gt;、&lt;code&gt;fa6-brands:github&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;图标在构建期进行静态提取与 SVG 矢量内嵌，无需引入整套图标字体包。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以导航栏配置为例，图标标识符直接写在 YAML 中：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;items:
  - name: 首页
    url: /
    icon: material-symbols:home-rounded
  - name: 归档
    url: /archive/
    icon: material-symbols:inventory-2-rounded
  - name: GitHub
    url: https://github.com/LyraVoid/Shirone
    icon: fa6-brands:github
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;侧边栏卡片同理，&lt;code&gt;icon&lt;/code&gt; 字段接受任意 Iconify 标识符：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;widgets:
  - type: profile
    icon: material-symbols:account-circle-rounded
  - type: announcement
    icon: ri:notification-3-line
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::: warning 正文不解析图标标识符
图标语法只在配置项与组件属性中生效。在 Markdown 正文里直接书写 &lt;code&gt;material-symbols:home-rounded&lt;/code&gt; 不会渲染为图标——若需要在正文中插入矢量图形，请使用内嵌 SVG 或 &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; 标签。
:::&lt;/p&gt;
&lt;h2&gt;图标集合查找&lt;/h2&gt;
&lt;p&gt;你可以访问 &lt;a href=&quot;https://icones.js.org/&quot;&gt;icones.js.org&lt;/a&gt; 浏览和检索数万款可用图标的编码标识符，复制「Iconify 名称」即可直接填入配置。&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;material-symbols:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Material 3 官方符号&lt;/td&gt;
&lt;td&gt;与主题视觉最统一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ri:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remix Icon 线性&lt;/td&gt;
&lt;td&gt;轻量线性图标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fa6-brands:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Font Awesome 品牌&lt;/td&gt;
&lt;td&gt;社交平台与品牌标识&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;图标在服务端完成 SVG 内联，页面加载后不会产生额外的图标请求，也不存在图标字体常见的首屏闪烁问题。&lt;/p&gt;
</content:encoded></item><item><title>扩展与属性</title><link>https://www.ariels.xyz/posts/markdown-attributes/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-attributes/</guid><description>在行内元素与块级容器后追加属性字典，为生成的 HTML 标签赋予自定义 class、id 或数据属性。</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shirone 支持在 Markdown 元素后附加属性字典，为生成的 HTML 标签赋予自定义 class、id 或数据属性。它让「标准语法」与「自定义样式钩子」之间不再需要手写 HTML。&lt;/p&gt;
&lt;h2&gt;行内元素属性&lt;/h2&gt;
&lt;p&gt;在行内文本、链接或高亮语法后紧跟 &lt;code&gt;{}&lt;/code&gt; 声明属性：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[外部链接](https://example.com){target=&quot;_blank&quot; rel=&quot;noopener&quot;}

==高亮文本=={.secondary}

`code phrase`{.custom-badge}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新标签页打开：&lt;a href=&quot;https://example.com&quot;&gt;外部链接&lt;/a&gt;{target=&quot;_blank&quot; rel=&quot;noopener&quot;}&lt;/li&gt;
&lt;li&gt;次级语义高亮：==高亮文本=={.secondary}&lt;/li&gt;
&lt;li&gt;带自定义 class 的行内代码：&lt;code&gt;code phrase&lt;/code&gt;{.custom-badge}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三项属性最终都会落到生成的 HTML 标签上：链接多出 &lt;code&gt;target&lt;/code&gt; 与 &lt;code&gt;rel&lt;/code&gt;，&lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; 多出 &lt;code&gt;secondary&lt;/code&gt; class，&lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; 多出 &lt;code&gt;custom-badge&lt;/code&gt; class。前者立即可见（点击不会跳出站内浏览），后两者只有在你为这些 class 写了样式时才产生视觉差异。&lt;/p&gt;
&lt;h2&gt;块级元素属性&lt;/h2&gt;
&lt;p&gt;在块级容器、标题或段落后声明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 自定义锚点标题 {#custom-section-id}

::: tip[自定义样式容器]{class=&quot;custom-highlight-box&quot;}
容器内部内容
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;h3&gt;自定义锚点标题 {#custom-section-id}&lt;/h3&gt;
&lt;p&gt;::: tip[自定义样式容器]{class=&quot;custom-highlight-box&quot;}
容器内部内容
:::&lt;/p&gt;
&lt;p&gt;上例中的标题被注入了 &lt;code&gt;id=&quot;custom-section-id&quot;&lt;/code&gt;，因此可以直接被 &lt;code&gt;#custom-section-id&lt;/code&gt; 锚点定位；容器则同时保留 &lt;code&gt;tip&lt;/code&gt; 的默认外观并额外挂上 &lt;code&gt;custom-highlight-box&lt;/code&gt; class。&lt;/p&gt;
&lt;p&gt;::: tip 关于自定义 class
Shirone 只负责把属性写入标签，不会自动生成对应样式。想真正看到 &lt;code&gt;custom-highlight-box&lt;/code&gt; 的效果，需要在配置的注入样式或自定义 CSS 中自行声明规则。
:::&lt;/p&gt;
&lt;h2&gt;常用属性简写&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.class-name&lt;/code&gt;：等价于 &lt;code&gt;class=&quot;class-name&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#id-name&lt;/code&gt;：等价于 &lt;code&gt;id=&quot;id-name&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key=&quot;value&quot;&lt;/code&gt;：直接设定 HTML 属性&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;这是一段强调说明。{.lead-text}

### 章节标题 {#section-anchor}

![配图](./cover.webp){loading=&quot;lazy&quot; width=&quot;720&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同一元素需要多个属性时可以连续书写，简写与键值对可混用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;==混合写法=={.secondary #highlight-1 title=&quot;鼠标悬停提示&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：==混合写法=={.secondary #highlight-1 title=&quot;鼠标悬停提示&quot;}&lt;/p&gt;
&lt;h2&gt;与容器语法的配合&lt;/h2&gt;
&lt;p&gt;所有 &lt;code&gt;:::&lt;/code&gt; 容器都支持在标题后追加属性字典，这让同一类容器可以承载不同的样式角色：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::: warning[构建前请检查]{class=&quot;build-warning&quot;}
未通过 `astro check` 的提交不会进入部署流水线。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;::: warning[构建前请检查]{class=&quot;build-warning&quot;}
未通过 &lt;code&gt;astro check&lt;/code&gt; 的提交不会进入部署流水线。
:::&lt;/p&gt;
&lt;h2&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;th&gt;典型用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;行内元素之后&lt;/td&gt;
&lt;td&gt;链接、&lt;code&gt;==高亮==&lt;/code&gt;、行内代码&lt;/td&gt;
&lt;td&gt;注入 &lt;code&gt;target&lt;/code&gt;、语义 class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;标题之后&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#&lt;/code&gt; ~ &lt;code&gt;######&lt;/code&gt; 标题&lt;/td&gt;
&lt;td&gt;固定锚点 id，方便站外引用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;容器标题之后&lt;/td&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;p&gt;属性字典是纯构建期语法，不会带来任何客户端运行时开销。&lt;/p&gt;
</content:encoded></item><item><title>基础语法</title><link>https://www.ariels.xyz/posts/markdown-basic/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/markdown-basic/</guid><description>从块级元素到行内元素，系统梳理 Shirone 支持的 CommonMark 与 GFM 标准语法，每一节都附带可直接对照的渲染效果。</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Markdown 是一种轻量级标记语言，通过简洁直观的标记语法让纯文本具备格式化排版能力。Shirone 原生支持完整的 CommonMark 与 GFM 规范，你在 GitHub、Typora 或 VS Code 中写下的标记几乎都能原样生效。&lt;/p&gt;
&lt;p&gt;本文把标准语法拆成&lt;strong&gt;块级元素&lt;/strong&gt;、&lt;strong&gt;行内元素&lt;/strong&gt;与&lt;strong&gt;辅助转义&lt;/strong&gt;三部分，每段示例下方都给出真实渲染结果，方便对照查阅。&lt;/p&gt;
&lt;h2&gt;一、块级元素&lt;/h2&gt;
&lt;h3&gt;1. 段落与换行&lt;/h3&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;code&gt;\&lt;/code&gt; 后回车。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;这是第一行文本，行尾加两个空格  
这是同一段落内的强制换行。

这是新段落，与上一段之间保留了空行。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;这是第一行文本，行尾加两个空格&lt;br /&gt;
这是同一段落内的强制换行。&lt;/p&gt;
&lt;p&gt;这是新段落，与上一段之间保留了空行。&lt;/p&gt;
&lt;h3&gt;2. 标题&lt;/h3&gt;
&lt;p&gt;推荐使用标准的 Atx 井号语法，支持 1 到 6 级标题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;构建阶段会自动为各级标题生成语义锚点，并自动提取到文章右侧的目录导航中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;（文章顶部的一级标题由主题接管，正文中从二级开始使用）：&lt;/p&gt;
&lt;h4&gt;四级标题示例&lt;/h4&gt;
&lt;h5&gt;五级标题示例&lt;/h5&gt;
&lt;h6&gt;六级标题示例&lt;/h6&gt;
&lt;h3&gt;3. 引用块&lt;/h3&gt;
&lt;p&gt;在行首使用 &lt;code&gt;&amp;gt;&lt;/code&gt; 符号声明引用，支持多层嵌套以及在引用内部嵌入列表、代码和标题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 这是第一层引用内容。
&amp;gt;
&amp;gt; &amp;gt; 这是嵌套的第二层引用。
&amp;gt;
&amp;gt; 引用内部支持列表与格式化：
&amp;gt; 1. 第一项说明
&amp;gt; 2. 第二项说明
&amp;gt;
&amp;gt; `引用内的行内代码`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是第一层引用内容。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是嵌套的第二层引用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引用内部支持列表与格式化：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一项说明&lt;/li&gt;
&lt;li&gt;第二项说明&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;引用内的行内代码&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;4. 列表与任务清单&lt;/h3&gt;
&lt;h4&gt;无序列表&lt;/h4&gt;
&lt;p&gt;使用 &lt;code&gt;-&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt; 或 &lt;code&gt;+&lt;/code&gt; 开头（推荐统一使用 &lt;code&gt;-&lt;/code&gt;），标记符号与文本之间必须保留空格：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- 无序列表项一
- 无序列表项二
  - 缩进两个空格形成子列表
  - 第二个子列表项
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无序列表项一&lt;/li&gt;
&lt;li&gt;无序列表项二
&lt;ul&gt;
&lt;li&gt;缩进两个空格形成子列表&lt;/li&gt;
&lt;li&gt;第二个子列表项&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;有序列表&lt;/h4&gt;
&lt;p&gt;使用数字加英文句点 &lt;code&gt;1.&lt;/code&gt; 开头：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. 第一步操作
2. 第二步操作
3. 第三步操作
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一步操作&lt;/li&gt;
&lt;li&gt;第二步操作&lt;/li&gt;
&lt;li&gt;第三步操作&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;任务清单&lt;/h4&gt;
&lt;p&gt;使用方括号标注任务状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- [x] 已完成的核心配置项
- [ ] 待编写的技术文档章节
- [ ] 待确认的排版细节
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] 已完成的核心配置项&lt;/li&gt;
&lt;li&gt;[ ] 待编写的技术文档章节&lt;/li&gt;
&lt;li&gt;[ ] 待确认的排版细节&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. 代码块&lt;/h3&gt;
&lt;p&gt;使用三个反引号包裹多行代码，并在首行声明编程语言：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```typescript
interface SiteConfig {
  title: string;
  themeColor: number;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;interface SiteConfig {
  title: string;
  themeColor: number;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6. 水平分割线&lt;/h3&gt;
&lt;p&gt;单独成行使用三个或以上的 &lt;code&gt;-&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt; 或 &lt;code&gt;_&lt;/code&gt; 创建分割线：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;段落上部内容

---

段落下部内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;段落上部内容&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;段落下部内容&lt;/p&gt;
&lt;h2&gt;二、行内元素&lt;/h2&gt;
&lt;h3&gt;1. 文本强调&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;*斜体文本*
**粗体文本**
***粗斜体文本***
~~删除线文本~~
`行内代码`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;em&gt;斜体文本&lt;/em&gt;、&lt;strong&gt;粗体文本&lt;/strong&gt;、&lt;em&gt;&lt;strong&gt;粗斜体文本&lt;/strong&gt;&lt;/em&gt;、&lt;s&gt;删除线文本&lt;/s&gt;、&lt;code&gt;行内代码&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2. 超链接&lt;/h3&gt;
&lt;h4&gt;行内式链接&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;[链接文字](https://shirone.mysqil.com/ &quot;可选的悬停提示标题&quot;)
[站内相对路径](/guide/intro/)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;a href=&quot;https://shirone.mysqil.com/&quot;&gt;链接文字&lt;/a&gt;、&lt;a href=&quot;/posts/markdown-basic/&quot;&gt;站内相对路径&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;参考式链接&lt;/h4&gt;
&lt;p&gt;适合在长文中多次引用同一地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;详细规范请参考 [官方文档][docs] 和 [仓库地址][repo]。

[docs]: https://shirone.mysqil.com/ &quot;文档站&quot;
[repo]: https://github.com/LyraVoid/Shirone &quot;GitHub&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：详细规范请参考 &lt;a href=&quot;https://shirone.mysqil.com/&quot;&gt;官方文档&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/LyraVoid/Shirone&quot;&gt;仓库地址&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;3. 图片插入&lt;/h3&gt;
&lt;p&gt;语法与超链接类似，只需在最前方添加感叹号 &lt;code&gt;!&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![图片替代文本](./scene-2.webp &quot;可选图题&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;图片与 &lt;code&gt;index.md&lt;/code&gt; 放在同一个文章文件夹中，使用相对路径引用即可，构建期会自动压缩为 WebP 并生成响应式 &lt;code&gt;srcset&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./scene-2.webp&quot; alt=&quot;示例风景图&quot; title=&quot;文件夹方案下的相对路径引用&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4. 自动链接&lt;/h3&gt;
&lt;p&gt;使用尖括号包裹网址或邮箱，系统会自动转换为可点击链接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;https://shirone.mysqil.com&amp;gt;
&amp;lt;contact@example.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：&lt;a href=&quot;https://shirone.mysqil.com&quot;&gt;https://shirone.mysqil.com&lt;/a&gt;、&lt;a href=&quot;mailto:contact@example.com&quot;&gt;contact@example.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;三、常用辅助与转义&lt;/h2&gt;
&lt;h3&gt;1. 转义字符&lt;/h3&gt;
&lt;p&gt;当需要直接输出 Markdown 保留符号时，在符号前添加反斜线 &lt;code&gt;\&lt;/code&gt; 进行转义：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\*这不是斜体文本\*
\[这不是链接\]
\# 这不是标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：*这不是斜体文本*、[这不是链接]、# 这不是标题&lt;/p&gt;
&lt;p&gt;可转义的字符包括：&lt;code&gt;\&lt;/code&gt;、&lt;code&gt;`&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt;、&lt;code&gt;_&lt;/code&gt;、&lt;code&gt;{}&lt;/code&gt;、&lt;code&gt;[]&lt;/code&gt;、&lt;code&gt;()&lt;/code&gt;、&lt;code&gt;#&lt;/code&gt;、&lt;code&gt;+&lt;/code&gt;、&lt;code&gt;-&lt;/code&gt;、&lt;code&gt;.&lt;/code&gt;、&lt;code&gt;!&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;2. 原生 HTML 支持&lt;/h3&gt;
&lt;p&gt;Markdown 允许直接内嵌标准 HTML 标签（如 &lt;code&gt;&amp;lt;kbd&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;使用 &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;C&amp;lt;/kbd&amp;gt; 复制内容。

&amp;lt;div style=&quot;text-align: center;&quot;&amp;gt;
  居中显示的纯 HTML 说明文本
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;渲染效果&lt;/strong&gt;：使用 &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;C&amp;lt;/kbd&amp;gt; 复制内容。&lt;/p&gt;
&lt;p&gt;&amp;lt;div style=&quot;text-align: center;&quot;&amp;gt;
居中显示的纯 HTML 说明文本
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;3. 编辑器快捷键对照&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;th&gt;Windows / Linux 快捷键&lt;/th&gt;
&lt;th&gt;macOS 快捷键&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;粗体&lt;/td&gt;
&lt;td&gt;&lt;code&gt;**文本**&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ctrl + B&lt;/td&gt;
&lt;td&gt;Command + B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;斜体&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*文本*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ctrl + I&lt;/td&gt;
&lt;td&gt;Command + I&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;行内代码&lt;/td&gt;
&lt;td&gt;&lt;code&gt;`代码`&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ctrl + Shift + `&lt;/td&gt;
&lt;td&gt;Command + Shift + `&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;插入链接&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[文本](链接)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ctrl + K&lt;/td&gt;
&lt;td&gt;Command + K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;插入图片&lt;/td&gt;
&lt;td&gt;&lt;code&gt;![说明](路径)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ctrl + Shift + I&lt;/td&gt;
&lt;td&gt;Command + Shift + I&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;四、排版建议与最佳实践&lt;/h2&gt;
&lt;ol&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;：推荐优先使用 WebP 或 AVIF 格式图片，兼顾画质与加载速度。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;::: tip 下一步
标准语法之上，Shirone 还提供了一整套扩展语法与属性字典，请继续阅读 &lt;a href=&quot;/posts/markdown-attributes/&quot;&gt;扩展与属性&lt;/a&gt;。
:::&lt;/p&gt;
</content:encoded></item><item><title>C++ 代码格式化配置详解</title><link>https://www.ariels.xyz/posts/clang-format-configuration/</link><guid isPermaLink="true">https://www.ariels.xyz/posts/clang-format-configuration/</guid><description>从代码格式化的意义讲起，用一段 OI 代码演示格式化前后的差异，并完整讲解 clang-format 的安装、.clang-format 配置文件的书写与常用参数。</description><pubDate>Mon, 11 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;代码格式化的意义&lt;/h2&gt;
&lt;p&gt;很多人编写程序时不注意程序的版式结构，这样做虽然不会影响程序的功能，但是程序的可读性会大大降低。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;C++&lt;/code&gt; 语言的格式很自由，这意味着换行、空格、空行和制表符等空白在程序运行时都会被忽略，程序员可以使用空白让代码按照特定的风格缩进或分开，使程序更加清晰易懂。&lt;/p&gt;
&lt;p&gt;个人认为，在 OI 考场上，一个优秀的码风可以有些提高你的调试效率。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;假设我们写的是文章而不是程序，那么你一定觉得诸如文章应该分为若干个自然段、每段开头空两格之类的规则是理所当然的。如果段落的开头不空两格，或者干脆把整个文章写成单独的一段，仔细想来似乎也不会影响文章实质内容的表达。既然如此，我们为什么还要在形式上下功夫呢？设想一下，如果你手中的这本书既无章节也无目录，正文中的不同内容都使用同样的字体字号印刷，几百页纸从头至尾洋洋洒洒如念经般地“一气呵成”，你还有耐心看下去吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;这是一个人人都能理解的道理，可是当文章变成程序的时候，就不是每个人都能想得通的了。不仅仅是初学者，甚至一些熟练的开发人员，也会写出凌乱不堪的代码。许多人一定有过这样的经历：一年半载之后，自己原来写的程序就完全看不懂了。如果这段程序只是为了交作业，或者临时一用，那还可以不去追究，但如果这是一个商业软件，现在需要根据客户的要求进行修改的话，工作量可就大了——你不得不先花时间把你原来的思路看懂。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;肯定会有人反驳：代码是给机器运行的，又不是给人看的，写那么好看有什么用？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;他的话只对了前半句：代码确实是给机器运行的，可是机器总共才需要看它几分钟？你花一个月编写的程序，机器顶多两三分钟就编译好了——在这两三分钟之前，这代码不都是你在看吗？开发软件编写代码不是一朝一夕的事情，更多的情况下，一个软件的开发要经历很长的时间，并且常常由多人合作完成。一个庞大的软件项目，可能会动用上千名程序员工作数年！如果把代码写得连自己都看不明白，怎么与别人交流？同一个开发团队内，一定要保持良好且一致的代码风格，才能最大化地提高开发效率。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;代码格式化演示&lt;/h2&gt;
&lt;p&gt;感谢 @xlj2596 提供的&lt;a href=&quot;https://www.luogu.com.cn/problem/P3371&quot;&gt;洛谷 P3371&lt;/a&gt;代码，评测记录：&lt;a href=&quot;https://www.luogu.com.cn/record/16227912&quot;&gt;R16227912&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;格式化前代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// luogu-judger-enable-o2
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cstring&amp;gt;
#include&amp;lt;algorithm&amp;gt;
const int maxm=10005;
const int maxn=500005;
using namespace std;
bool vis[maxm];
int N,M,S,F,G,W,_start,_end,_size,Q[4000005],f[maxm],to[maxn&amp;lt;&amp;lt;1],val[maxn&amp;lt;&amp;lt;1],nxt[maxn&amp;lt;&amp;lt;1],las[maxn&amp;lt;&amp;lt;1];
inline void addedge(int x,int y,int z){_size++;to[_size]=y;val[_size]=z;nxt[_size]=las[x];las[x]=_size;}
inline void spfa(){
    _end=1;_start=1;f[S]=0;Q[1]=S;
    memset(f,63,sizeof(f));
    while(_start&amp;lt;=_end){
        int x=Q[_start++];
        vis[x]=false;//已经访问 
        for(int i=las[x];i;i=nxt[i]){
            if(f[x]+val[i]&amp;lt;f[to[i]]){
                f[to[i]]=f[x]+val[i];
                if(!vis[to[i]]){
                    vis[to[i]]=true;
                    Q[++_end]=to[i];
                }
            }
        }
    }
}
int main(){
    scanf(&quot;%d%d%d&quot;,&amp;amp;N,&amp;amp;M,&amp;amp;S);
    for(int i=1;i&amp;lt;=M;i++){scanf(&quot;%d%d%d&quot;,&amp;amp;F,&amp;amp;G,&amp;amp;W);addedge(F,G,W);}
    spfa();
    for(int i=1;i&amp;lt;=N;i++){
        printf(&quot;%d%c&quot;,f[i]&amp;gt;1e9?2147483647:f[i],i==N?&apos;\n&apos;:&apos; &apos;);
        //if(f[i]&amp;gt;1e9)printf(&quot;2147483647 &quot;);
        //else printf(&quot;%d &quot;,f[i]);
        //printf(&quot;%d &quot;,f[i]&amp;gt;1e9?2147483647:f[i]);
        
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;格式化后代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cstring&amp;gt;
const int maxm = 10005;
const int maxn = 500005;
using namespace std;
bool vis[ maxm ];
int N, M, S, F, G, W, _start, _end, _size, Q[ 4000005 ], f[ maxm ],
    to[ maxn &amp;lt;&amp;lt; 1 ], val[ maxn &amp;lt;&amp;lt; 1 ], nxt[ maxn &amp;lt;&amp;lt; 1 ], las[ maxn &amp;lt;&amp;lt; 1 ];
inline void addedge( int x, int y, int z ) {
    _size++;
    to[ _size ] = y;
    val[ _size ] = z;
    nxt[ _size ] = las[ x ];
    las[ x ] = _size;
}
inline void spfa() {
    _end = 1;
    _start = 1;
    f[ S ] = 0;
    Q[ 1 ] = S;
    memset( f, 63, sizeof( f ) );
    while ( _start &amp;lt;= _end ) {
        int x = Q[ _start++ ];
        vis[ x ] = false;  //已经访问
        for ( int i = las[ x ]; i; i = nxt[ i ] ) {
            if ( f[ x ] + val[ i ] &amp;lt; f[ to[ i ] ] ) {
                f[ to[ i ] ] = f[ x ] + val[ i ];
                if ( !vis[ to[ i ] ] ) {
                    vis[ to[ i ] ] = true;
                    Q[ ++_end ] = to[ i ];
                }
            }
        }
    }
}
int main() {
    scanf( &quot;%d%d%d&quot;, &amp;amp;N, &amp;amp;M, &amp;amp;S );
    for ( int i = 1; i &amp;lt;= M; i++ ) {
        scanf( &quot;%d%d%d&quot;, &amp;amp;F, &amp;amp;G, &amp;amp;W );
        addedge( F, G, W );
    }
    spfa();
    for ( int i = 1; i &amp;lt;= N; i++ ) {
        printf( &quot;%d%c&quot;, f[ i ] &amp;gt; 1e9 ? 2147483647 : f[ i ],
                i == N ? &apos;\n&apos; : &apos; &apos; );
        // if(f[i]&amp;gt;1e9)printf(&quot;2147483647 &quot;);
        // else printf(&quot;%d &quot;,f[i]);
        // printf(&quot;%d &quot;,f[i]&amp;gt;1e9?2147483647:f[i]);
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;C++&lt;/h2&gt;
&lt;p&gt;对于 &lt;code&gt;C++&lt;/code&gt;，普遍使用 &lt;code&gt;clang-format&lt;/code&gt; 来格式化代码，当然，你也可以选择 &lt;code&gt;Visual Studio&lt;/code&gt; 自带的格式化功能。这里不介绍 &lt;code&gt;Visual Studio&lt;/code&gt; 的安装，请自行查阅官方文档。&lt;/p&gt;
&lt;h2&gt;如何安装 &lt;code&gt;clang-format&lt;/code&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;Windows&lt;/code&gt; 玩家&lt;/h3&gt;
&lt;h4&gt;只下载 &lt;code&gt;clang-format&lt;/code&gt; 程序&lt;/h4&gt;
&lt;p&gt;建议直接下载 &lt;code&gt;clang-format&lt;/code&gt; 可执行文件。官方发布页（&lt;a href=&quot;https://releases.llvm.org/&quot;&gt;LLVM Releases&lt;/a&gt; 或 &lt;a href=&quot;https://github.com/llvm/llvm-project/releases&quot;&gt;GitHub Releases&lt;/a&gt;）提供各平台的独立压缩包，解压后即可使用。&lt;/p&gt;
&lt;p&gt;你可以使用命令行来调用程序，详见 &lt;a href=&quot;https://clang.llvm.org/docs/ClangFormat.html&quot;&gt;ClangFormat 官方文档&lt;/a&gt;。&lt;/p&gt;
&lt;h4&gt;下载 &lt;code&gt;Clang&lt;/code&gt; 提供完整体验&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;clang-format&lt;/code&gt; 程序作为 &lt;a href=&quot;https://clang.llvm.org/&quot;&gt;Clang&lt;/a&gt; 的一部分，你可以选择下载整个包以获得完整体验。&lt;/p&gt;
&lt;p&gt;:::info
Clang 是一个 C 语言、C++、Objective-C 语言的轻量级编译器，源代码发布于 BSD 协议下。截至 2026 年 10 月，LLVM/Clang 的最新稳定版为 23.1.x；本文最初写作时的版本是 11.0.1，配置项名称在后续版本中有较多调整，详见下文。
:::&lt;/p&gt;
&lt;h3&gt;VSCode 玩家&lt;/h3&gt;
&lt;p&gt;在扩展（插件）页面安装 C/C++ 扩展（&lt;code&gt;ms-vscode.cpptools&lt;/code&gt;，旧称 &lt;code&gt;cpptools&lt;/code&gt;），你就可以对选中代码块使用 &lt;code&gt;Ctrl+K Ctrl+F&lt;/code&gt; 来格式化代码，或者用 &lt;code&gt;Shift+Alt+F&lt;/code&gt; 格式化整个文件。&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;Ubuntu&lt;/code&gt; 玩家&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install clang-format
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;RHEL 系发行版玩家（CentOS / Rocky Linux / AlmaLinux）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install clang-tools-extra
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::warning
CentOS Linux 7 已于 2024 年 6 月停止维护，CentOS Linux 8 更早在 2021 年底终止，因此不建议再在新环境中使用 CentOS，可以改用 Rocky Linux、AlmaLinux 等下游发行版。另外，RHEL 系仓库中并没有名为 &lt;code&gt;clang-format&lt;/code&gt; 的包，该程序由 &lt;code&gt;clang-tools-extra&lt;/code&gt; 包提供（旧文中的 &lt;code&gt;sudo yum install clang-format&lt;/code&gt; 无法安装成功）。
:::&lt;/p&gt;
&lt;p&gt;:::tip
安装完成后，你就可以开始下一步操作了。
:::&lt;/p&gt;
&lt;h2&gt;配置你的代码风格&lt;/h2&gt;
&lt;p&gt;本实验基于 Windows 10 x64 1809 专业版 &amp;amp; VSCode 1.31.0（2019 年写作时的环境，操作方式在后来的版本中基本一致）。&lt;/p&gt;
&lt;p&gt;基于上述方法安装后，你可以打开一个文件夹，如下图所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./vscode-open-folder.jpg&quot; alt=&quot;在 VSCode 中打开一个文件夹&quot; /&gt;&lt;/p&gt;
&lt;p&gt;新建一个文件，叫做 &lt;code&gt;.clang-format&lt;/code&gt; 或者 &lt;code&gt;_clang-format&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;:::note
在 Linux 文件系统中，以一个英文句点开始的文件名的文件具有隐藏属性，所以你可能需要调整设置以显示它。
:::&lt;/p&gt;
&lt;p&gt;:::info
Windows 玩家可能发现自己使用资源管理器无法新建以这个名字命名的文件，请使用命令行或 VSCode。
:::&lt;/p&gt;
&lt;p&gt;然后打开这个文件，就像这样。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./vscode-clang-format-config.jpg&quot; alt=&quot;用 VSCode 打开 .clang-format 配置文件&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入你的配置文件，保存并关闭。&lt;/p&gt;
&lt;p&gt;这样你就可以使用代码格式化了：选中你要格式化的部分并按下 &lt;code&gt;Ctrl+K Ctrl+F&lt;/code&gt; 格式化选区，或者按下 &lt;code&gt;Shift+Alt+F&lt;/code&gt; 格式化全文。&lt;/p&gt;
&lt;p&gt;:::note
此处的 &lt;code&gt;Ctrl+K Ctrl+F&lt;/code&gt; 是指先按 &lt;code&gt;Ctrl+K&lt;/code&gt;，再按 &lt;code&gt;Ctrl+F&lt;/code&gt;。你可以在「文件 → 首选项 → 键盘快捷方式」里修改快捷键。
:::&lt;/p&gt;
&lt;h2&gt;配置文件的书写&lt;/h2&gt;
&lt;h3&gt;模板&lt;/h3&gt;
&lt;p&gt;:::warning
下面的模板来自 2019 年，部分选项在后续的 clang-format 中已被重命名、改为枚举或废弃。模板里已经就地修正了这些写法（如 &lt;code&gt;AlignEscapedNewlinesLeft&lt;/code&gt;、&lt;code&gt;AlwaysBreakAfterReturnType&lt;/code&gt;、&lt;code&gt;AlwaysBreakTemplateDeclarations&lt;/code&gt;、&lt;code&gt;ConstructorInitializerAllOnOneLineOrOnePerLine&lt;/code&gt;、&lt;code&gt;BreakConstructorInitializersBeforeComma&lt;/code&gt;、&lt;code&gt;AlignAfterOpenBracket&lt;/code&gt;、&lt;code&gt;AlignOperands&lt;/code&gt;、&lt;code&gt;SpacesInAngles&lt;/code&gt;、&lt;code&gt;AllowShortBlocksOnASingleLine&lt;/code&gt;、&lt;code&gt;AllowShortIfStatementsOnASingleLine&lt;/code&gt;、&lt;code&gt;Cpp11BracedListStyle&lt;/code&gt;、&lt;code&gt;BraceWrapping.AfterControlStatement&lt;/code&gt;），并在注释里标注了对应关系。若你使用的是较旧的 clang-format，请以&lt;a href=&quot;https://clang.llvm.org/docs/ClangFormatStyleOptions.html&quot;&gt;官方文档&lt;/a&gt;对应版本为准。
:::&lt;/p&gt;
&lt;p&gt;::: details 配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:	Cpp
# BasedOnStyle:	LLVM
# 访问说明符(public、private等)的偏移
AccessModifierOffset:	-4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐
# clang-format 22 起该选项改为布尔值：Align→true、DontAlign→false，
# AlwaysBreak 由 BreakAfterOpenBracket* 等新选项取代
AlignAfterOpenBracket:	true
# 连续赋值时，对齐所有等号
AlignConsecutiveAssignments:	true
# 连续声明时，对齐所有声明的变量名
AlignConsecutiveDeclarations:	false
# 左对齐逃脱换行(使用反斜杠换行)的反斜杠: DontAlign, Left, LeftWithLastLine, Right
# 旧版写作 AlignEscapedNewlinesLeft: true，该写法已被移除
AlignEscapedNewlines:	Left
# 水平对齐二元和三元表达式的操作数: DontAlign, Align, AlignAfterOperator
AlignOperands:	Align
# 对齐连续的尾随的注释
AlignTrailingComments:	true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine:	true
# 允许短的块放在同一行: Never, Empty, Always
AllowShortBlocksOnASingleLine:	Never
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine:	false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中，空函数), All
AllowShortFunctionsOnASingleLine:	Empty
# 允许短的if语句保持在同一行: Never, WithoutElse, OnlyFirstIf, AllIfsAndElse
AllowShortIfStatementsOnASingleLine:	Never
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine:	false
# 总是在返回类型后换行: None, All, TopLevel(顶级函数，不包括在类中的函数),
#   AllDefinitions(所有的定义，不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
# 旧版写作 AlwaysBreakAfterReturnType / AlwaysBreakAfterDefinitionReturnType，两者均已废弃
BreakAfterReturnType:	None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings:	false
# 总是在template声明后换行: Leave, No, MultiLine, Yes
# 旧版写作 AlwaysBreakTemplateDeclarations: false，已废弃
BreakTemplateDeclarations:	No
# false表示函数实参要么都在同一行，要么都各自一行
BinPackArguments:	true
# false表示所有形参要么都在同一行，要么都各自一行
BinPackParameters:	true
# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义，与Attach类似),
#   Mozilla(除枚举、函数、记录定义，与Attach类似), Stroustrup(除函数定义、catch、else，与Attach类似),
#   Allman(总是在大括号前换行), GNU(总是在大括号前换行，并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
#   注：这里认为语句块也属于函数
BreakBeforeBraces:	Custom
# 大括号换行，只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:   
    # class定义后面
    AfterClass:	false
    # 控制语句后面: Never, MultiLine, Always（旧版为布尔值 false，已废弃）
    AfterControlStatement:	Never
    # enum定义后面
    AfterEnum:	false
    # 函数定义后面
    AfterFunction:	false
    # 命名空间定义后面
    AfterNamespace:	false
    # ObjC定义后面
    AfterObjCDeclaration:	false
    # struct定义后面
    AfterStruct:	false
    # union定义后面
    AfterUnion:	false
    # catch之前
    BeforeCatch:	false
    # else之前
    BeforeElse:	true
    # 缩进大括号
    IndentBraces:	false
# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
BreakBeforeBinaryOperators:	NonAssignment
# 在三元运算符前换行
BreakBeforeTernaryOperators:	true
# 在构造函数的初始化列表的逗号前换行
# 旧版写作 BreakConstructorInitializersBeforeComma: false，已废弃，对应 BeforeColon
BreakConstructorInitializers:	BeforeColon
# 每行字符的限制，0表示没有限制
ColumnLimit:	80
# 描述具有特殊意义的注释的正则表达式，它不应该被分割为多行或以其它方式改变
CommentPragmas:	&apos;^ IWYU pragma:&apos;
# 构造函数的初始化列表的打包方式: Never, BinPack, CurrentLine, NextLine
# 旧版写作 ConstructorInitializerAllOnOneLineOrOnePerLine: false，已废弃，对应 BinPack
PackConstructorInitializers:	BinPack
# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth:	4
# 延续的行的缩进宽度
ContinuationIndentWidth:	4
# 去除C++11的列表初始化的大括号{后和}前的空格: Block, FunctionCall
Cpp11BracedListStyle:	Block
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment:	false
# 关闭格式化
DisableFormat:	false
# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking:	false
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros:	[ foreach, Q_FOREACH, BOOST_FOREACH ]
# 对#include进行排序，匹配了某正则表达式的#include拥有对应的优先级，匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前)，
#   可以定义负数优先级从而保证某些#include永远在最前面
IncludeCategories: 
  - Regex:	&apos;^&quot;(llvm|llvm-c|clang|clang-c)/&apos;
    Priority:	2
  - Regex:	&apos;^(&amp;lt;|&quot;(gtest|isl|json)/)&apos;
    Priority:	3
  - Regex:	&apos;.*&apos;
    Priority:	1
# 缩进case标签
IndentCaseLabels:	false
# 缩进宽度
IndentWidth:	4
# 函数返回类型换行时，缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames:	false
# 保留在块开始处的空行（新版改用 KeepEmptyLines.AtStartOfBlock，本项已废弃）
KeepEmptyLinesAtTheStartOfBlocks:	true
# 开始一个块的宏的正则表达式
MacroBlockBegin:	&apos;&apos;
# 结束一个块的宏的正则表达式
MacroBlockEnd:	&apos;&apos;
# 连续空行的最大数量
MaxEmptyLinesToKeep:	1
# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
NamespaceIndentation:	Inner
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth:	4
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty:	false
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList:	true
# 在call(后对函数调用换行的penalty
PenaltyBreakBeforeFirstCallParameter:	19
# 在一个注释中引入换行的penalty
PenaltyBreakComment:	300
# 第一次在&amp;lt;&amp;lt;前换行的penalty
PenaltyBreakFirstLessLess:	120
# 在一个字符串字面量中引入换行的penalty
PenaltyBreakString:	1000
# 对于每个在行字符数限制之外的字符的penalty
PenaltyExcessCharacter:	80
# 将函数的返回类型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine:	80
# 指针和引用的对齐: Left, Right, Middle
PointerAlignment:	Left
# 允许重新排版注释
ReflowComments:	true
# 允许排序#include
SortIncludes:	true
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast:	false
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators:	true
# 开圆括号之前添加一个空格: Never, ControlStatements, ControlStatementsExceptControlMacros, NonEmptyParentheses, Always
SpaceBeforeParens:	ControlStatements
# 在空的圆括号中添加空格
SpaceInEmptyParentheses:	false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments:	2
# 在尖括号的&amp;lt;后和&amp;gt;前添加空格: Never, Always, Leave
SpacesInAngles:	Always
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals:	true
# 在C风格类型转换的括号中添加空格（新版改用 SpacesInParens.InCStyleCasts，本项已废弃）
SpacesInCStyleCastParentheses:	true
# 在圆括号的(后和)前添加空格
SpacesInParentheses:	true
# 在方括号的[后和]前添加空格，lamda表达式和未指明大小的数组的声明不受影响
SpacesInSquareBrackets:	true
# 标准: Cpp03, Cpp11, Cpp14, Cpp17, Cpp20, Cpp23, Latest, Auto
Standard:	Cpp11
# tab宽度
TabWidth:	4
# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab:	Never
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h3&gt;语法&lt;/h3&gt;
&lt;p&gt;配置文件使用 &lt;code&gt;YAML&lt;/code&gt; 语法，大抵概括如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有的注释以 &lt;code&gt;#&lt;/code&gt; 开头。&lt;/li&gt;
&lt;li&gt;所有的值以 &lt;code&gt;Key: Value&lt;/code&gt; 形式出现，每行一个，冒号是英文冒号，冒号后面空一格或者一个 Tab。&lt;/li&gt;
&lt;li&gt;同一个配置文件里不能出现重复的键（后出现的会覆盖先出现的，容易埋坑）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;参数解释&lt;/h3&gt;
&lt;p&gt;这里只解释一些容易出现错误或者混淆的参数，其余参数，请参见 &lt;a href=&quot;https://clang.llvm.org/docs/ClangFormatStyleOptions.html&quot;&gt;Clang 格式样式选项&lt;/a&gt;或阅读附图上的谷歌翻译后的文档。如果阅读后还有异议，请在下方评论，博主会酌情回答和解释。&lt;/p&gt;
&lt;h4&gt;易出现错误或者混淆的参数&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Language：字符串，取值范围。该配置文件针对的语言。请填写 &lt;code&gt;Cpp&lt;/code&gt;，&lt;strong&gt;不是&lt;/strong&gt; &lt;code&gt;cpp&lt;/code&gt;、&lt;code&gt;cpp11&lt;/code&gt;、&lt;code&gt;C++&lt;/code&gt;、&lt;code&gt;kkkAKIOI&lt;/code&gt; 等。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;None：不要使用。&lt;/li&gt;
&lt;li&gt;Cpp：C，C++。&lt;/li&gt;
&lt;li&gt;Java：Java。&lt;/li&gt;
&lt;li&gt;JavaScript：JavaScript。&lt;/li&gt;
&lt;li&gt;ObjC：Objective-C，Objective-C++。&lt;/li&gt;
&lt;li&gt;Proto：&lt;a href=&quot;https://protobuf.dev/&quot;&gt;协议缓冲区&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;TableGen：TableGen。&lt;/li&gt;
&lt;li&gt;TextProto：&lt;a href=&quot;https://protobuf.dev/&quot;&gt;文本格式的协议缓冲消息&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BasedOnStyle：字符串，取值范围。基于的语言。点击链接可以查看内容和效果。当你没有配置值的时候，参考你所选择的标准。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://llvm.org/docs/CodingStandards.html&quot;&gt;LLVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://google.github.io/styleguide/cppguide.html&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.chromium.org/developers/coding-style&quot;&gt;Chromium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://firefox-source-docs.mozilla.org/code-quality/coding-style/index.html&quot;&gt;Mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.webkit.org/coding/coding-style.html&quot;&gt;WebKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/visualstudio/ide/editorconfig-code-style-settings-reference&quot;&gt;Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/prep/standards/&quot;&gt;GNU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AccessModifierOffset：整型。（public、private 等）访问说明符的偏移，如下图。一般用不到。&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 原图 AccessModifierOffset.png 对应的远程地址 https://www.oss.ariels.xyz/usr/uploads/2019/02/922982276.png 在 OSS Backup 中缺失，补图后再启用下面这行引用。 --&amp;gt;
&amp;lt;!-- &lt;img src=&quot;./access-modifier-offset.png&quot; alt=&quot;AccessModifierOffset 示意图&quot; /&gt; --&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AlignAfterOpenBracket：开括号（开圆括号、开尖括号、开方括号）后的对齐方式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;旧版取值为 &lt;code&gt;Align&lt;/code&gt;（对齐到开括号后的参数）、&lt;code&gt;DontAlign&lt;/code&gt;（不做对齐）、&lt;code&gt;AlwaysBreak&lt;/code&gt;（参数不适合单行时在开括号后换行）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;clang-format 22 起该选项改为布尔值：&lt;code&gt;Align&lt;/code&gt; 等价于 &lt;code&gt;true&lt;/code&gt;，&lt;code&gt;DontAlign&lt;/code&gt; 等价于 &lt;code&gt;false&lt;/code&gt;；&lt;code&gt;AlwaysBreak&lt;/code&gt; 的行为改由 &lt;code&gt;BreakAfterOpenBracketFunction&lt;/code&gt;、&lt;code&gt;BreakAfterOpenBracketBracedList&lt;/code&gt;、&lt;code&gt;BreakAfterOpenBracketIf&lt;/code&gt; 等新选项控制，闭合括号一侧对应 &lt;code&gt;BreakBeforeCloseBracket*&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Align（旧版，现为 &lt;code&gt;true&lt;/code&gt;）：对齐打开括号上的参数&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;someLongFunction(argument1,
                 argument2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DontAlign（旧版，现为 &lt;code&gt;false&lt;/code&gt;）：不用对齐&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;someLongFunction(argument1,
	argument2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AlwaysBreak：如果参数不适合单行，则在开括号后断开&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;someLongFunction(
	argument1, argument2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AlignConsecutiveAssignments：布尔值。对齐连续分配。如果取值为真，对齐连续行的赋值运算符。&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int kkk  = 666;
int cz   = 888;
int c    = 999;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AlignConsecutiveDeclarations：布尔值。如果取值为真，对齐连续行的声明名称。&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int         aaaa = 12;
float       b = 23;
std::string ccc = 23;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Clang 格式样式选项全文档&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./clang-format-style-options.png&quot; alt=&quot;Clang 格式样式选项全文档（长图）&quot; /&gt;&lt;/p&gt;
&lt;p&gt;图的尺寸 1903×31205，约 2.5 MB，强烈建议直接右键另存为下来慢慢看。&lt;/p&gt;
</content:encoded></item></channel></rss>