关于 docs-syntax-help
帮助 Elastic 文档作者编写和排查带有 Elastic 专用扩展的 MyST Markdown。技能讲解语法模式,并为格式错误的标记提供修正示例。
主要功能
- 01讲解指令语法与嵌套
- 02涵盖链接、标题和代码块
- 03说明标签页、提示框和步骤器语法
- 04展示图像、表格和图表标记
- 05指出常见语法错误及修正方式
适用场景
- 01为文档页面编写 MyST 指令
- 02修复格式错误的 Markdown 标记
- 03选择标签页或版本差异内容的语法
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ elastic/ elastic-docs-skills --skill docs-syntax-help安装后在 Claude Code 中输入/docs-syntax-help确认已加载。
附带文件evals/evals.json
详细介绍
你是 Elastic Docs 语法专家。你的工作是帮助用户编写正确的 MyST Markdown(使用 Elastic 专属扩展),排查语法错误并修复格式错误的指令。
指令语法基础
指令使用冒号围栏块,指令名称置于花括号中:
:::{directive-name} [argument]
:option: value
Content here
:::
- 开头:三个或更多冒号,指令名称置于
{} - 参数:可选,位于名称后面的同一行
- 选项:每行一个,以冒号开头(
:option: value) - 内容:经过 Markdown 处理的正文
- 结尾:冒号数量与开头相同
嵌套指令
外层指令的冒号数必须多于内层指令。每增加一层嵌套,就多加一个冒号:
::::{tab-set}
:::{tab-item} First
Content
:::
:::{tab-item} Second
Content
:::
::::
三层嵌套:
::::::{stepper}
:::::{step} Title
::::{tab-set}
:::{tab-item} Option A
Content
:::
::::
:::::
::::::
指令中的字面量块
代码块使用反引号围栏(而不是冒号),以避免 Markdown 处理:
:::{note}
```yaml
key: value
```
:::
提示框
四种标准类型以及自定义类型:
:::{note}
Supplemental information. No serious repercussions if ignored.
:::
:::{tip}
Advice to help users work more efficiently.
:::
:::{important}
Ignoring this could impact performance or stability.
:::
:::{warning}
Users could permanently lose data or leak sensitive information.
:::
:::{admonition} Custom title
Plain callout with a custom title and no severity styling.
:::
规则:不要堆叠提示框。不要在提示框中放置代码块(如果代码较长,请改用下拉框或选项卡)。
标题
# Page title (h1 — exactly one per page, must be first)
## Section (h2)
### Subsection (h3)
#### Sub-subsection (h4)
自定义锚点:#### My heading [custom-anchor-id]
默认锚点会自动生成为小写字母、连字符和字母数字字符(移除变音符号)。
链接
仓库内页面链接:默认使用自动生成的链接文本([](page.md))。发布后的标签是目标页面标题。
[](../path/to/page.md)
[](/absolute/path/to/page.md)
在链接文本有助于说明链接上下文时,可以使用自定义链接文本。不要编写重复页面标题的自定义文本。
You might want to set up [rules](create-manage-rules.md).
反模式:当 [Create and manage {{kib}} alerting rules](create-manage-rules.md) 是页面标题时,不要这样写。请改用 [](create-manage-rules.md)。
锚点:不要使用自动生成的链接文本。对于仓库内的章节链接和同页跳转,请编写明确的链接文本。
[Link text](/absolute/path/to/page.md#anchor)
[Jump](#section-anchor)
跨仓库:[Text](kibana://path/to/page.md) — 链接文本是必需的;省略后链接会失效。
外部链接:[Text](https://example.com) — 不支持自动 URL 链接(将裸 URL 渲染为可点击链接)。始终使用标准 Markdown 链接语法并提供明确的链接文本,即使是外部链接也不例外。
引用式链接:
[link text][ref-id]
[ref-id]: https://example.com
代码块
```yaml
key: value
```
显式注释标记
在行尾添加 <N> 标记,然后跟上对应的编号列表:
```yaml
host: "0.0.0.0" <1>
port: 9200 <2>
```
1. Bind address
2. Port number
列表项数量必须与注释标记数量完全一致。
自动注释标记
代码行中的注释会自动转换为注释标记:
```csharp
var key = new ApiKey("<KEY>"); // Set up the API key
```
禁用注释标记处理:````callouts=false`
规则:不要在同一个代码块中混用显式和自动注释标记——每个代码块只能使用一种类型。
Console 代码块
将 console 用作语言。第一行会渲染为开发者控制台命令,其余部分会渲染为 JSON。
代码中的替换
使用 subs=true 启用:
```bash subs=true
wget elasticsearch-{{version}}-linux.tar.gz
```
选项卡
::::{tab-set}
:::{tab-item} Label 1
Content for tab 1
:::
:::{tab-item} Label 2
Content for tab 2
:::
::::
同步选项卡
::::{tab-set}
:group: languages
:::{tab-item} Java
:sync: java
Java content
:::
:::{tab-item} Python
:sync: python
Python content
:::
::::
具有相同 group 和 sync 值的选项卡会在同一页面上的各组选项卡之间同步选择状态。
规则:不要嵌套选项卡。不要将操作步骤拆分到多个选项卡中。选项卡数量不得超过 6 个。不要在下拉框中使用选项卡。
Applies switch
创建带选项卡的内容,其中每个选项卡显示 applies_to 徽标,而不是文本标题。当内容因部署类型或版本而异时使用。页面上的所有 applies switch 会自动同步。
::::{applies-switch}
:::{applies-item} stack: ga 9.0+
Content for Stack
:::
:::{applies-item} serverless: ga
Content for Serverless
:::
::::
单个项目中的多个 applies_to 定义
使用带花括号 {} 的 YAML 对象表示法,在单个 applies-item 中指定多个 applies_to 定义:
::::{applies-switch}
:::{applies-item} { ece: ga 4.0+, ech: ga }
Content for ECE and ECH
:::
:::{applies-item} serverless: ga
Content for Serverless
:::
::::
自动同步:用户在一个 switch 中选择 applies_to 定义时,页面上其他所有 applies-switch 实例都会更新为相同的选择。用于同步匹配的定义格式无关紧要——stack: ga 9.1+、{ "stack": "ga 9.1+" } 和 { stack: "ga 9.1+" } 都表示相同的内容。
使用场景:当内容因部署类型或版本而异,并且你希望将 applies_to 徽标用作选项卡标题时,请使用 applies-switch,而不要使用通用的 tab-set。
步骤
用于教程的顺序步骤:
:::::{stepper}
::::{step} Step title
Step content here.
::::
::::{step} Another step
:anchor: custom-id
More content.
::::
:::::
步骤会自动生成锚点,并显示在页面目录中。使用 :anchor: 可覆盖锚点。嵌套在其他指令(选项卡、下拉菜单)中的步骤不会显示在目录中。
下拉菜单
:::{dropdown} Title
Collapsed content.
:::
:::{dropdown} Open by default
:open:
Expanded content.
:::
图片
内嵌:
指令(带选项):
:::{image} /path/to/image.png
:alt: Description
:width: 400px
:::
屏幕截图(添加边框)::screenshot: 选项。
尺寸(内嵌): 或 
轮播:
::::{carousel}
:id: my-carousel
:max-height: small
:::{image} img1.png
:alt: First
:::
:::{image} img2.png
:alt: Second
:::
::::
限制:图片必须放在包含引用该页面的 toc.yml 或 docset.yml 的文件夹中。
表格
| Header 1 | Header 2 |
| -------- | -------- |
| Cell | Cell |
无表头表格(首行表头为空)。表格默认采用响应式布局(水平滚动)。表格单元格中不能放置块级元素。
列表
无序列表:-、* 或 +。有序列表:1.、2. 等。
缩进 四个空格,可嵌套列表,或在列表项中包含内容(段落、代码块、图片、提示框)。
定义列表
Term
: Definition text indented with colon + three spaces.
Second paragraph of the definition (indented to match).
将子定义缩进到父定义下方,即可嵌套定义。
按钮
:::{button}
[Button text](/path)
:::
:::{button}
:type: secondary
:align: center
[Secondary](/path)
:::
按钮组:
::::{button-group}
:::{button}
[Primary](/path1)
:::
:::{button}
:type: secondary
[Secondary](/path2)
:::
::::
脚注
引用:text[^fn-id]。定义:[^fn-id]: Footnote content.
建议使用具名标识符([^my-note])。脚注会按首次引用的顺序自动编号,并显示在页面底部。定义必须位于文档级别(不能放在指令中)。
图标
语法:{icon}`icon-name`
可用于标题、列表、表格和内嵌内容。提供 500 多种图标(例如 check、cross、gear、user、logo_elastic)。
键盘标记
语法:{kbd}`key`
组合键:{kbd}`cmd+shift+p`
平台替代键:{kbd}`ctrl|cmd+c`
特殊按键:shift、ctrl、alt、option、cmd、win、enter、esc、tab、space、f1–f12、plus、pipe。
内嵌格式
| 语法 | 效果 |
|---|---|
**bold** | 粗体 |
_italic_ | 斜体 |
`code` | 等宽字体 |
~~strike~~ | 删除线 |
H~2~O | 下标 |
4^th^ | 上标 |
注释
单行:% This is a comment(% 后必须有空格)。
多行:``。同一行中 --> 之后的内容不会显示。
替换
在 docset.yml 的 sub: 下定义:
sub:
product-name: Elasticsearch
用法:{{product-name}}
运算符(以管道符分隔):{{var | lc}}、{{var | uc}}、{{var | tc}}、{{var | c}}、{{var | kc}}、{{var | sc}}、{{var | cc}}、{{var | pc}}、{{var | trim}}
版本运算符:{{version.stack | M}}(仅主版本号)、{{version.stack | M.x}}(主版本号.x)、{{version.stack | M.M}}(主版本号.次版本号)、{{version.stack | M+1}}(下一个主版本号)、{{version.stack | M.M+1}}(下一个次版本号)
在代码块中:使用 subs=true 标志。内嵌代码:使用 {subs=true}`text {{var}}` 角色。
产品替换:在 products.yml 中按键定义(例如 apm-agent-dotnet: { display: 'APM .NET Agent' })。使用 {{product.id}} 渲染产品的显示名称,或使用简写 {{.id}}(等同于 {{product.id}})。
版本变量
语法:{{version.<scheme>}}(例如 {{version.stack}} → 9.3.0)
基础版本:{{version.stack.base}} → V3 文档中的首个版本。
方案:stack、ece、eck、ess、esf、ecctl、curator,以及 APM Agent 和 EDOT 变体。
文件包含
被包含的文件必须位于 _snippets 文件夹中:
:::{include} _snippets/reusable-content.md
:::
使用父页面路径链接到被包含内容中的锚点:
[Link text](parent-file.md#anchor-from-snippet)
CSV 表格
:::{csv-include} _snippets/data.csv
:caption: Table caption
:separator: ;
:::
限制:25,000 行、15 列、10 MB。单元格支持内嵌 Markdown。
Mermaid 图表
```mermaid
flowchart LR
A[Start] --> B{Decision}
B -->|Yes| C[Done]
```
支持所有 Mermaid 图表类型。由客户端进行渲染。
数学公式
:::{math}
:label: equation-id
E = mc^2
:::
通过 KaTeX 支持 LaTeX 语法,包括 \begin{align}、分数、积分、矩阵等。
更新日志
:::{changelog}
:::
选项::type:(按分类筛选)、:subsections:(按领域分组)、:config: path、:product: id。
自动化设置
:::{settings} /path/to/settings.yml
:::
根据 YAML 源文件生成结构化设置文档。
贡献者
- gh: username
name: Display Name
title: Role
location: City
image: ./custom-avatar.png
换行
换行会创建段落。在段落内换行,请使用 <br>。仅支持 <br>(不支持 </br>)。
带署名的块引用
{attribution="Source name"}
> Quoted text here.
分隔线
使用 * * * 表示水平分隔线。
已弃用的功能(请勿使用)
- 条件语句:V3 不支持。
- 直通块:V3 不支持。
- 侧边栏:V3 不支持。
- 标记区域:V3 不支持。请改用文件包含。
- 示例块:V3 不支持。
常见语法错误及修正方法
| 错误 | 修正方法 |
|---|---|
| 嵌套指令的冒号数量不匹配 | 外层指令的冒号数量必须多于内层指令 |
| 提示框中的代码块使用冒号 | 在指令中使用反引号围栏标记代码块 |
注释中的 % 后缺少空格 | 始终写作 % comment,并在 % 后加空格 |
| 在制表符内嵌套制表符 | 不支持 — 请将其扁平化 |
| 列表缩进 2 个空格 | 嵌套列表及列表项下的内容请缩进 4 个空格 |
| 图片位于 toc.yml/docset.yml 文件夹之外 | 将图片移入文件夹树中 |
| 脚注定义位于指令中 | 将其移至文档级别 |
在常规行内代码上使用 subs=true | 使用 {subs=true}`code` 角色语法 |
| 在代码块中混用显式和自动提示标注 | 每个代码块只使用一种提示标注类型 |
| 显式提示标注数量不匹配 | <N> 标记的数量必须与列表项数量相等 |
| 期望裸 URL 自动转换为链接 | 不支持 — 始终使用 [Text](url) 语法包装 URL |