再思·再议·再构

Why DDaaS?

Docs Driven as a Service

Back

FumaMDX·All in One

所有需要的语法和工具, 都在这儿

Overview

使用方式

  1. 基于效率的考量, 对于高频使用语法, 一并提供对应的触发关键词, 模板配置
  2. 语法示例会使用3个Tab标签
    • 示例, tab标题为 example
    • 源码, tab标题为 source, 方便直接copy
    • 触发关键词, tab标题为 @keywords
基础高级
文档头部步骤组
提示框Mermaid绘图
文字处理数学公式
卡片组文件层级
Tab标签组内部文件引用
FAQ问答组接口参数定义

文档头部

标题

描述

提示框

这是无标题的info提示框

info提示框

这是info提示框, 用于提示信息

warn提示框

这是warn提示框, 用于警告信息

success提示框

这是success提示框, 用于成功信息

error提示框

这是error提示框, 用于错误信息

文字处理

这是3级标题, 使用###

这是加粗文字, 高频使用快捷键 ⌃ + ⌥ + B

这是斜体文字, 高频使用快捷键 ⌃ + ⌥ + I

这是删除线文字, 高频使用快捷键 ⌃ + ⌥ + X

这是高亮文字, 高频使用快捷键 ⌃ + ⌥ + `

  • 这是列表项文字, 标记
    • 这是子项行文字, 缩进4个空格(推荐)|或者一个Tab
    • 这是子项行文字, 缩进4个空格(推荐)|或者一个Tab

这是下划线文字

这是黄色背景标记文字

这是超链接

卡片组

卡片参数

PropTypeDefault
href?
string
-
icon?
ReactNode
-
description
string
-
title
string
-

Tab标签组

简单模式

这是Tab1

安装包模式

npm install clerk@clerk-next

FAQ问答组

标题式步骤组

  • 上文FAQ问答示例就是一个简单的步骤组演示, 只不过它在目录中隐藏了步骤标题

弃用FumaDocs的Step组件

FumaDocs提供的remarkSteps插件, 支持标题式步骤组, 这更符合人类习惯

所以, 本项目从代码层面弃用Step组件, 强力支持标题式步骤组的写法

标题式步骤组规则

  • 不支持步骤组嵌套, 因为FumaDocs底层暂不支持, 重写代价大, 并且从DDaaS角度, 如果需要步骤组嵌套, 说明文档不够简练、不容易懂
  • 命名规则规则: ###(强烈推荐固定写法) + 空格 + 步骤编号数字≤19 + 英文. + 至少1个空格 + 标题名称, 例如: ### 1. 三级标题的步骤1
  • 不满足规则的, 会自动降级为普通标题; 步骤编号也由文档指定, TOC底层解析不会自动递增编号, 正文渲染会自动递增, 便于发现更改错误
  • 多个步骤组之间用不同层级的普通标题分隔开来, 例如: h2、h4的标题

使用快捷命令

@mdxstep, 生成标准格式

输入步骤编号

注意编号需要你自己维护递增

Mermaid绘图

Mermaid人生路径图·By 李笑来

数学公式

f(x)=12πσe(xμ)22σ2 f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}}

文件层级

这是普通文件.tsx
这是锁定文件.txt
继承父目录的置灰文件1.tsx
继承父目录的置灰文件2.txt

内部文件引用

i18n.ts
import { getRequestConfig } from 'next-intl/server';
import { appConfig } from "@/lib/appConfig";
import type { I18nConfig } from 'fumadocs-core/i18n';
 
export const i18n: I18nConfig = {
  defaultLanguage: appConfig.i18n.defaultLocale,
  languages: appConfig.i18n.locales as unknown as string[],
}

// Can be imported from a shared config
const locales = appConfig.i18n.locales;

export default getRequestConfig(async ({ requestLocale }) => {
  let locale = await requestLocale;
  // Ensure that the incoming locale is valid
  if ( !locale || !locales.includes(locale as (typeof locales)[number])) {
    locale = appConfig.i18n.defaultLocale;
  }

  return {
    locale,
    messages: (await import(`../messages/${locale}.json`)).default
  };
});

Written by

Fuma Nama

At

Fri May 23 2025