Markdown 语法指南
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档。本文将系统地总结 Markdown 的各种语法用法,帮助你更好地掌握这个强大的文档编写工具。
基础语法
标题和目录(TOC)
1. Markdown 标题
Markdown 支持使用 #
符号创建不同级别的标题:
## 二级标题
### 三级标题
#### 四级标题
扩展语法
标题 ID
每个标题都会自动生成一个 ID,用于链接跳转。你可以:
自动生成的 ID
### 你好世界
<!-- 自动生成 ID: "你好世界" -->
使用方法:
[链接到基础语法标题](#基础语法)
自定义 ID
## 扩展语法 \{#extension-syntax}
<!-- 使用自定义 ID: "extension-syntax" -->
使用方法:
[链接到扩展语法标题](#extension-syntax)
代码块增强
Docusaurus 为代码块提供了强大的增强功能。
1. 代码标题
可以为代码块添加标题:
```jsx title="/src/components/HelloWorld.js"
function HelloWorld(props) {
return <h1>Hello, {props.name}</h1>;
}
```
function HelloWorld(props) {
return <h1>Hello, {props.name}</h1>;
}
2. 语法高亮
** 基本用法 ** 代码块会自动根据语言进行语法高亮:
```js
console.log('自动语法高亮');
```
console.log('自动语法高亮');
3. 行高亮
可以使用特殊注释来高亮代码行:
```js
function highlightDemo() {
// highlight-next-line
const highlighted = 'This line is highlighted';
// highlight-start
const multipleLines = [
'These',
'lines',
'are',
'highlighted',
];
// highlight-end
}
```
function highlightDemo() {
const highlighted = 'This line is highlighted';
const multipleLines = [
'These',
'lines',
'are',
'highlighted',
];
}
4. 多语言代码块
以下是一个简单的多语言代码示例:
<Tabs>
<TabItem value="js" label="JavaScript">
```js
function greet() {
console.log('Hello!');
}
```
</TabItem>
<TabItem value="py" label="Python">
```python
def greet():
print("Hello!")
```
</TabItem>
</Tabs>
- JavaScript
- Python
function greet() {
console.log('Hello!');
}
def greet():
print("Hello!")
5. 实时代码编辑演示
这个页面展示了 Docusaurus 的实时代码编辑功能。
简单的 React 组件
你可以编辑下面的代码,更改会实时显示:
```jsx live
function Clock(props) {
const [date, setDate] = React.useState(new Date());
React.useEffect(() => {
const timerID = setInterval(() => tick(), 1000);
return () => clearInterval(timerID);
}, []);
function tick() {
setDate(new Date());
}
return (
<div>
<h2>现在时间是:{date.toLocaleTimeString()}</h2>
</div>
);
}
```
function Clock(props) { const [date, setDate] = React.useState(new Date()); React.useEffect(() => { const timerID = setInterval(() => tick(), 1000); return () => clearInterval(timerID); }, []); function tick() { setDate(new Date()); } return ( <div> <h2>现在时间是:{date.toLocaleTimeString()}</h2> </div> ); }
按钮示例
这是一个简单的按钮组件示例:
```jsx live
function ButtonExample() {
const [count, setCount] = React.useState(0);
return (
<div>
<button
onClick={() => setCount(count + 1)}
style={{
padding: '10px 20px',
fontSize: '16px',
backgroundColor: '#25c2a0',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer'
}}
>
点击次数:{count}
</button>
</div>
);
}
```
function ButtonExample() { const [count, setCount] = React.useState(0); return ( <div> <button onClick={() => setCount(count + 1)} style={{ padding: '10px 20px', fontSize: '16px', backgroundColor: '#25c2a0', color: 'white', border: 'none', borderRadius: '4px', cursor: 'pointer' }} > 点击次数:{count} </button> </div> ); }
使用说明
- 上面的代码块都是可以编辑的
- 更改代码后,右侧的预览会立即更新
- 你可以尝试修改文本、样式或添加新的功能
- 如果代码有错误,预览区域会显示错误信息
注意事项
-
代码高亮:
- 默认支持常用语言
- 可以通过配置添加更多语言支持
- 可以自定义高亮主题
-
行高亮:
- 可以使用注释或行号进行标记
- 可以自定义高亮颜色
-
JSX 使用:
- 在 JSX 中需要使用
<CodeBlock>
组件 - 支持所有 Markdown 代码块的功能
- 在 JSX 中需要使用
提示框(Admonitions)
Docusaurus 提供了一种特殊的提示框语法,通过使用三个冒号和标签类型来创建不同样式的提示框。
1. 基本用法
:::note
这是一个**普通**提示框,支持 _Markdown_ 语法。
:::
:::tip
这是一个**提示**框,用于展示提示信息。
:::
:::info
这是一个**信息**框,用于展示一般信息。
:::
:::warning
这是一个**警告**框,用于展示警告信息。
:::
:::danger
这是一个**危险**框,用于展示危险警告。
:::
这是一个普通提示框,支持 Markdown 语法。
这是一个提示框,用于展示提示信息。
这是一个信息框,用于展示一般信息。
这是一个警告框,用于展示警告信息。
这是一个危险框,用于展示危险警告。
2. 自定义标题
可以为提示框添加自定义标题:
:::note[自定义标题]
这里是提示框的内容。标题支持 **Markdown** 语法。
:::
这里是提示框的内容。标题支持 Markdown 语法。
3. 嵌套提示框
提示框可以嵌套使用,每一层增加一个冒号:
:::::info[父级提示框]
这是父级内容
::::warning[子级提示框]
这是子级内容
:::tip[深层提示框]
这是深层内容
:::
::::
:::::
这是父级内容
这是子级内容
这是深层内容
4. 在 MDX 中使用
提示框中可以使用 MDX 组件:
:::tip[使用标签页]
<Tabs>
<TabItem value="apple" label="苹果">这是一个苹果 🍎</TabItem>
<TabItem value="orange" label="橙子">这是一个橙子 🍊</TabItem>
</Tabs>
:::
- 苹果
- 橙子
注意事项
-
Prettier 格式化:
- 在提示框指令周围添加空行以避免格式化问题
- 错误示例:
:::note
内容
::: - 正确示例:
:::note
内容
:::
-
提示框类型:
note
: 普通提示tip
: 小技巧info
: 信息warning
: 警告danger
: 危险
-
自定义功能:
- 可以通过配置自定义提示框样式
- 支持自定义图标
- 可以创建自定义类型的提示框
响应式图片
在 .mdx文件中,可以使用 <ZoomImage />
组件来支持响应式图片。
import ZoomImage from '@site/src/components/ZoomImage';
你只需要在正文中使用 <ZoomImage />
组件,并传入图片的 src 和 alt 属性。
<ZoomImage src="https://s2.loli.net/2025/01/10/Xj47aLr5SGEM3ln.jpg" alt="图 保时捷911E,1973年产" />

引用跳转
在正文需要引用的地方,使用 ^[数字]
来创建一个引用链接。
> 创业点子中你需要的,也是你所需要的,是你朋友真正想要的。一旦你擅长技术,这些想法就不难看到。到处都是粘门。^[1]
创业点子中你需要的,也是你所需要的,是你朋友真正想要的。一旦你擅长技术,这些想法就不难看到。到处都是粘门。[1]
在引文的位置,插入:
^1: 这句话的修辞技巧是"谷歌"指的是不同的东西。我的意思是:一家有很大机会像谷歌一样发展壮大的公司,最终会像拉里和谢尔盖一样,在他们开始创业的时候,可以合理地预期谷歌本身会这样做。但我认为最初的版本更敏捷。
[1] 这句话的修辞技巧是"谷歌"指的是不同的东西。我的意思是:一家有很大机会像谷歌一样发展壮大的公司,最终会像拉里和谢尔盖一样,在他们开始创业的时候,可以合理地预期谷歌本身会这样做。但我认为最初的版本更敏捷。 ↩
评论