This commit is contained in:
pengzhanbo 2026-04-14 07:40:39 +00:00
commit 60932f7084
1172 changed files with 223391 additions and 0 deletions

1
404.html Normal file

File diff suppressed because one or more lines are too long

1
CNAME Normal file
View File

@ -0,0 +1 @@
plume.pengzhanbo.cn

4
_redirects Normal file
View File

@ -0,0 +1,4 @@
/llms.md /llms.txt 200!
/llms-full.md /llms-full.txt 200!
/en/llms.md /en/llms.txt 200!
/en/llms-full.md /en/llms-full.txt 200!

3407
_translations/index.html Normal file

File diff suppressed because it is too large Load Diff

10600
_translations/status.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

389
article/0lk24ty5/index.md Normal file
View File

@ -0,0 +1,389 @@
---
url: /article/0lk24ty5/index.md
---
# 标题H1
## 标题H2
### 标题H3
#### 标题H4
##### 标题H5
###### 标题H6
## 标题2 Badge 
### 标题3 Badge 
#### 标题4 Badge 
正文内容。
`@property` CSS at-rule是 [CSS Houdini API](https://developer.mozilla.org/zh-CN/docs/Web/Guide/Houdini)
的一部分,它允许开发者显式地定义他们的 [CSS 自定义属性](https://developer.mozilla.org/zh-CN/docs/Web/CSS/--*),
允许进行属性类型检查、设定默认值以及定义该自定义属性是否可以被继承。
`@property` 的出现,极大的增强了 CSS 的能力。
加粗:**加粗文字**
斜体: *斜体文字*
\~~删除文字~~
内容 ==标记==
数学表达式: $-(2^{n-1})$ ~ $2^{n-1} -1$
$\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right)
\= \left(\frac {y^{\omega}} {\omega}\right) \left{(\log y)^r + \sum\_{i=1}^r \frac {(-1)^ Ir \cdots (r-i+1) (\log y)^{ri}} {\omega^i} \right}$
19^th^
H~2~O
::: center
内容居中
:::
::: right
内容右对齐
:::
* 无序列表1
* 无序列表2
* 无序列表3
1. 有序列表1
2. 有序列表2
3. 有序列表3
* \[ ] 任务列表1
* \[ ] 任务列表2
* \[x] 任务列表3
* \[x] 任务列表4
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
> 引用内容
>
> 引用内容
[链接](/)
[外部链接](https://github.com/pengzhanbo)
![plume](/plume.png)
**Badge**
**图标:**
* home - 
* vscode - 
* twitter - 
**示例容器:**
::: window title="示例" height="200px"
:::
**代码:**
```js whitespace
const a = 1
const b = 2
const c = a + b
// [!code word:obj]
const obj = {
toLong: {
deep: {
deep: {
deep: {
value: 'this is to long text. this is to long text. this is to long text. this is to long text.', // [!code highlight]
}
}
}
}
}
```
**Code Blocks TwoSlash**
```ts twoslash
// @errors: 2339
const welcome = 'Tudo bem gente?'
const words = welcome.contains(' ')
```
```ts twoslash
import express from 'express'
const app = express()
app.get('/', (req, res) => {
res.send
})
app.listen(3000)
```
```ts twoslash
import { createHighlighter } from 'shiki'
const highlighter = await createHighlighter({ themes: ['nord'], langs: ['javascript'] })
// @log: Custom log message
const a = 1
// @error: Custom error message
const b = 1
// @warn: Custom warning message
const c = 1
// @annotate: Custom annotation message
```
```ts twoslash
// @errors: 2540
interface Todo {
title: string
}
const todo: Readonly<Todo> = {
title: 'Delete inactive users'.toUpperCase(),
// ^?
}
todo.title = 'Hello'
Number.parseInt('123', 10)
// ^|
//
//
```
```vue twoslash
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<p>{{ count }}</p>
</template>
```
**代码分组:**
::: code-tabs
@tab tab1
```js
const a = 1
const b = 2
const c = a + b
```
@tab tab2
```ts
const a: number = 1
const b: number = 2
const c: number = a + b
```
:::
**代码块高亮:**
```ts
function foo() {
const a = 1 // [!code highlight]
console.log(a)
const b = 2 // [!code ++]
const c = 3 // [!code --]
console.log(a + b + c) // [!code error]
console.log(a + b) // [!code warning]
}
```
**代码块聚焦:**
```ts
function foo() {
const a = 1 // [!code focus]
}
```
::: tip 仅标题
:::
::: note 注释
注释内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: info 信息
信息内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: tip 提示
提示内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: warning 警告
警告内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: caution 错误
错误内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: important 重要
重要内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: details 详细标题
这里是内容。
:::
**GFM alert**
> \[!note]
> note
> \[!info]
> info
> \[!tip]
> tip
> \[!warning]
> warning
> \[!caution]
> caution
> \[!important]
> important
**代码演示:**
:::: demo title="常规示例" desc="一个常规示例"
::: code-tabs
@tab HTML
```html
<div id="app">
<h3>vuepress-theme-plume</h3>
</div>
```
@tab Javascript
```js
const a = 'So Awesome!'
const app = document.querySelector('#app')
app.appendChild(window.document.createElement('small')).textContent = a
```
@tab CSS
```css
#app {
font-size: 2em;
text-align: center;
}
```
:::
::::
**选项卡:**
::: tabs
@tab 标题1
内容区块
@tab 标题2
内容区块
:::
:::: warning
::: tabs
@tab 标题1
内容区块
@tab 标题2
内容区块
:::
::::
**脚注:**
脚注 1 链接\[^first]。
脚注 2 链接[^second]。
行内的脚注^\[行内脚注文本] 定义。
重复的页脚定义[^second]。
\[^first]: 脚注 **可以包含特殊标记**
```
也可以由多个段落组成
```
[^second]: 脚注文字。

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

106
article/2z59hh8g/index.md Normal file
View File

@ -0,0 +1,106 @@
---
url: /article/2z59hh8g/index.md
---
## 概述
不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,
包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6],然而最大灵感来源其实是纯文字的电子邮件格式。
因此 Markdown 的语法全由标点符号所组成,并经过严谨慎选,是为了让它们看起来就像所要表达的意思。像是在文字两旁加上星号,看起来就像\*强调\*。Markdown 的列表看起来,嗯,就是列表。假如你有使用过电子邮件,引言写法看起来就真的像是引用一段文字。
Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等)
这些功能原初的 Markdown 尚不具备,它们能让 Markdown 转换成更多的格式,例如 LaTeXDocbook。
Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具,如 Pandoc要么基于网站如 GitHub 和 Wikipedia在语法上基本兼容但在一些语法和渲染效果上有改动。
## 用途
Markdown 的语法有个主要的目的: 用来作为一种网络内容的*写作*用语言。Markdown 的重点在于它能让文件更容易阅读、编写。因此Markdown 的格式语法只涵盖纯文字可以涵盖的范围。
Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。
用于编写说明文档,并且以 `README.md` 的文件名保存在软件的目录下面。
除此之外,我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域Markdown 已经广泛使用,极大地推进了动态可重复性研究的历史进程。
### 行内 HTML
不在 Markdown 涵盖范围之外的标签,都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown只要直接加标签就可以了。
只有块元素 ── 比如 `<div>``<table>``<pre>``<p>` 等标签,必须在前后加上空行,以利与内容区隔。
而且这些 (元素) 的开始与结尾标签,不可以用 tab 或是空白来缩进。Markdown 的解析器有智慧型判断,可以避免在块标签前后加上没有必要的 `<p>` 标签。
举例来说,在 Markdown 文件里加上一段 HTML 表格:
```md
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
```
请注意Markdown 语法在 HTML 块标签中将不会被进行处理。例如,你无法在 HTML 块内使用 Markdown 形式的 `*强调*`
### 特殊字元自动转换
在 HTML 文件中,有两个字元需要特殊处理: `<``&``<` 符号用于起始标签,`&` 符号则用于标记 HTML 实体,如果你只是想要使用这些符号,你必须要使用实体的形式,像是 `&lt;``&amp;`
`&` 符号其实很容易让写作网络文件的人感到困扰如果你要打「AT\&T」 ,你必须要写成「`AT&amp;T`」 ,还得转换网址内的 `&` 符号,如果你要链接到 `http://images.google.com/images?num=30&q=larry+bird`
你必须要把网址转成:
```html
http://images.google.com/images?num=30&amp;q=larry+bird
```
才能放到链接标签的 `href` 属性里。不用说也知道这很容易忘记,这也可能是 HTML 标准检查所检查到的错误中,数量最多的。
Markdown 允许你直接使用这些符号,但是你要小心跳脱字元的使用,如果你是在 HTML 实体中使用 `&` 符号的话,它不会被转换,而在其它情形下,它则会被转换成 `&amp;`。所以你如果要在文件中插入一个著作权的符号,你可以这样写:
```md
&copy;
```
Markdown 将不会对这段文字做修改,但是如果你这样写:
```md
AT&T
```
Markdown 就会将它转为:
```html
AT&amp;T
```
类似的状况也会发生在 `<` 符号上,因为 Markdown 支持 [行内 HTML](#行内-html) ,如果你是使用 `<` 符号作为 HTML 标签使用,那 Markdown 也不会对它做任何转换,但是如果你是写:
```md
4 < 5
```
Markdown 将会把它转换为:
```html
4 &lt; 5
```
不过需要注意的是code 范围内,不论是行内还是块, `<``&` 两个符号都*一定*会被转换成 HTML 实体,
这项特性让你可以很容易地用 Markdown 写 HTML code (和 HTML 相对而言, HTML 语法中,
你要把所有的 `<``&` 都转换为 HTML 实体,才能在 HTML 文件里面写出 HTML code。)
[1]: http://docutils.sourceforge.net/mirror/setext.html
[2]: http://www.aaronsw.com/2002/atx/
[3]: http://textism.com/tools/textile/
[4]: http://docutils.sourceforge.net/rst.html
[5]: http://www.triptico.com/software/grutatxt.html
[6]: http://ettext.taint.org/doc/

File diff suppressed because one or more lines are too long

34
article/30995vcd/index.md Normal file
View File

@ -0,0 +1,34 @@
---
url: /article/30995vcd/index.md
---
## 单列照片
```md :no-line-numbers
<ImageCard v-for="item in list" :key="item.image" v-bind="item" />
```
## 双列照片
```md :no-line-numbers
<CardGrid cols="2">
<ImageCard v-for="item in list" :key="item.image" v-bind="item" />
</CardGrid>
```
## 三列照片
```md :no-line-numbers
<CardGrid cols="3">
<ImageCard v-for="item in list" :key="item.image" v-bind="item" />
</CardGrid>
```
## 不同尺寸设备适配
调整窗口大小以观察效果
```md :no-line-numbers
<CardGrid :cols="{ sm: 2, md: 3, lg: 3 }">
<ImageCard v-for="item in list" :key="item.image" v-bind="item" />
</CardGrid>
```

File diff suppressed because one or more lines are too long

138
article/5vjshyi9/index.md Normal file
View File

@ -0,0 +1,138 @@
---
url: /article/5vjshyi9/index.md
---
近期的这几个版本主要围绕 **实现单独的主题配置文件** ,监听并支持热更新。
## Breaking Changes
以下内置插件被移除:
* 移除 `@vuepress-plume/plugin-blog-data` 插件
* 移除 `@vuepress-plume/plugin-notes-data` 插件
* 移除 `@vuepress-plume/plugin-auto-frontmatter` 插件
以上插件的功能全部移动到 `vuepress-theme-plume` 主题包内部重新实现。原因是,单独的主题配置文件,
在异步加载完配置、以及配置热更新时,需要对这些插件所实现的功能进行重载,为了使流程更加清晰可控,
在主题内重新实现了这些功能,并移除了相关插件。
**但相关的配置项并没有发生变更,因此版本更新后用户无需修改配置。**
## 主要更新
### 新增 主题配置文件
一般我们在使用 `VuePress` 构建站点时,通常会在 `.vuepress/config.js` 中引入主题并进行主题配置:
```ts :no-line-numbers
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
// 主题配置
}),
})
```
主题配置 通常会包括 如 导航栏、侧边导航栏、多语言相关等的配置。
当我们启动了 VuePress 服务后,对 `.vuepress/config.js` 的修改会引起 VuePress 服务的重启,
这对于 VuePress 相关的配置而言是合理的行为。
但对于 主题相关的配置而言,大部分的配置更新是没有必要 重启 VuePress 服务的。
特别是当我们频繁的更新主题配置时,还可能引起 VuePress 服务崩溃,
这对于我们在编写站点内容时带来的体验是非常糟糕的。
因此,主题新增了一个 `plume.config.js` 的主题配置文件,将主题配置进行单独的维护。
该配置文件主要用于管理主题配置中与 构建流无关的配置。你对他的任意修改,都将以热更新的方式,
更新主题,并同步到 客户端站点实现无刷新更新,完全避免了 VuePress 服务多次重启的问题。
你可以直接在 VuePress 配置文件的相同目录下直接创建 `plume.config.js` ,主题会自动加载该文件,
也可以使用 `plume.config.ts` 文件,以获取更好的类型提示。
::: code-tabs
@tab .vuepress/config.ts
```ts :no-line-numbers
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme()
})
```
@tab .vuepress/plume.config.ts
```ts :no-line-numbers
import { defineThemeConfig } from 'vuepress-theme-plume'
export default defineThemeConfig({
// 主题配置
})
```
:::
### 新增 编译缓存
VuePress 在每次启动时,都需要全量编译所有的 `markdown` 文件,在站点内容比较少,且内容不复杂时,
这一过程不算特别耗时,但是当 站点的内容越来越多,内容越来越复杂时,启动等待的时间就会变得越来越久。
以本主题的文档站点为例,虽然主题文档的内容并不算特别多,但是由于使用了 `shiki` 语法高亮,并支持了
`twoslash` 功能,由于 `twoslash` 需要对代码块进行类型编译,非常耗时,这导致 主题文档站点的启动时间
达到了夸张的 `15s` 以上!
为了缓解这一问题,主题对 `markdown` 文件的编译做了一层缓存,在首次启用 `VuePress` 服务时,主题会
对所有的 `markdown` 文件的编译结果进行缓存,在二次启动时,直接从缓存中读取 `markdown` 文件的编译结果。
且仅在 `markdown` 文件有发生变更时,才会重新编译。
**通过编译缓存,主题文档站点的启动耗时,从 `15s` 降低到了 `1.2s` 左右 **
另一方面, markdown 编译过程中耗时较为严重的是对 **代码块** 的编译,特别是 代码块使用了 `twoslash` 时。
主题原来的 `15s` 耗时主要就是由于 `twoslash` 的编译时间过长导致的。
主题同样对 代码块 进行了特殊的缓存处理,只有当 代码块 发生变化时,才会重新编译当前的代码块。
### 新增 autoFrontmatter 配置
在过去的版本,主题会自动为每个 `markdown` 文件添加了 `frontmatter` 配置,用户无法更改这个行为,
但部分用户可能不喜欢这一行为、或者只想给 部分 markdown 文件添加 `frontmatter` 配置、或者 只生成
部分的 `frontmatter` 配置。
为此,主题添加 `autoFrontmatter` 配置,用于控制是否自动为每个 `markdown` 文件添加 `frontmatter` 配置。
包括可以通过 `glob` 模式匹配过滤 `markdown` 文件,控制自动生成哪些 字段。
```ts :no-line-numbers
interface AutoFrontmatterOptions {
/**
* glob 匹配,被匹配的文件将会自动生成 frontmatter
*
* @default ['**\/*.md']
*/
include?: string | string[]
/**
* glob 匹配,被匹配的文件将不会自动生成 frontmatter
*/
exclude?: string | string[]
/**
* 是否自动生成 permalink
*
* @default true
*/
permalink?: boolean
/**
* 是否自动生成 createTime
*
* 默认读取 文件创建时间,`createTitme` 比 vuepress 默认的 `date` 时间更精准到秒
*/
createTime?: boolean
/**
* 是否自动生成 title
*
* 默认读取文件名作为标题
*/
title?: boolean
}
```

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

68
article/6pa64b1n/index.md Normal file
View File

@ -0,0 +1,68 @@
---
url: /article/6pa64b1n/index.md
---
这两个版本做了一些 破坏性的更新,主要围绕以下两个方面:
* 适配 [Vuepress Guidelines](https://ecosystem.vuejs.press/zh/themes/guidelines.html)
* 更新 vuepress-plugin-md-enhance 插件,并迁移其中的部分功能,改用 VuePress 官方插件
## 适配 VuePress Guidelines
VuePress 推出了 [主题开发指南](https://ecosystem.vuejs.press/zh/themes/guidelines.html)。
这一举措旨在规范化主题开发流程,并提出了主题开发过程中需要遵守的几个约定,这包括:
* 约定 CSS 变量命名规范,并约束 主要 CSS 变量的命名,如 `--vp-c-accent``--vp-c-text` 等。
* 约定 主要的 HTML 元素容器应添加指定的 属性名,如 `vp-content`, `vp-navbar` 等。
* 约定 双主题模式应使用 `[data-theme="light"]``[data-theme="dark"]` 来区分。
围绕这几个约定,可以使得 VuePress 的 开发者们,可以很方便的 开发出 更具通用性的 主题和插件。
`plume` 主题也同样适配了这些约定:
* **CSS 变量命名的变更****HTML 元素添加属性**,对于用户是无感知的,您无需关注这方面是否会有影响。
* **双主题模式**,对于有自定义主题需求的用户而言,如果您有重新定义深色模式下的样式,则需要做出一些调整:
在 CSS 中的 `.dark` 类应替换为 `[data-theme="dark"]`,请不用担心替换会带来额外的副作用,它们在 CSS 中的
优先级是相同的,您可以安全的执行替换操作。
## vuepress-plugin-md-enhance 插件迁移
[vuepress-plugin-md-enhance](https://plugin-md-enhance.vuejs.press/zh/) 提供了非常多的功能支持,但与之带来的困难是,
它变得越来越臃肿,变得难以维护了。
我在 [#4130](https://github.com/vuepress-theme-hope/vuepress-theme-hope/issues/4130) 中提出了拆分迁移的计划。
因此从 `@2.0.0-rc.53` 版本开始,逐步开始拆分迁移的计划。
截止到 `@2.0.0-rc.54` 版本,已经拆分出了以下插件:
* [@vuepress/plugin-markdown-hint](https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-hint.html)
* [@vuepress/plugin-markdown-image](https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-image.html)
* [@vuepress/plugin-markdown-math](https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-math.html)
* [@vuepress/plugin-markdown-tab](https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-tab.html)
当前主题也将 vuepress-plugin-md-enhance 更新到 `@2.0.0-rc.54` 版本,因此,也重新接入了上述的插件。
* `@vuepress/plugin-markdown-hint` 提供了 提示容器 和 `github alerts` 支持,主题已内置了该插件,对于该插件的迁移,
用户是无需做任何修改的,您可以继续使用这些功能。
* `@vuepress/plugin-markdown-image` 提供了图片支持,主题已内置了该插件,但不启用该插件的默认功能,
因此,如果您使用了如 `plugins.mdEnhance.imgSize` 配置项,您需要通过`plugins.markdownImage` 重新进行配置。
* `@vuepress/plugin-markdown-math` 提供了数学公式支持,主题已内置了该插件,并默认启用了 `katex` 支持。
* `@vuepress/plugin-markdown-tab` 提供了 Tab 容器 和 代码分组支持,主题重写了插件部分内容,对 `code-tabs` 容器
做了一些调整,支持在 代码分组标题中显示 相关联的图标。
## 其它更新
* **文件树** 现在支持 不同的图标方案,可在 `:::file-tree` 后跟随 `:simple-icon` / `:colored-icon` 切换。
默认为 colored-icon如果切换为 simple-icon则不再根据 文件夹名和文件扩展名匹配不同的图标,仅显示默认的
文件夹图标和文件图标。
* **代码块分组** 的标题现在支持显示 图标。当作为 文件名时,与 **文件树** 采用相同的图标解析规则,还额外支持
不同的技术、框架、语言的名称图标。
* 优化了 容器、任务列表、脚注、等的样式。

File diff suppressed because one or more lines are too long

106
article/97s6ha1e/index.md Normal file
View File

@ -0,0 +1,106 @@
---
url: /article/97s6ha1e/index.md
---
## 概述
不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,
包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6],然而最大灵感来源其实是纯文字的电子邮件格式。
因此 Markdown 的语法全由标点符号所组成,并经过严谨慎选,是为了让它们看起来就像所要表达的意思。像是在文字两旁加上星号,看起来就像\*强调\*。Markdown 的列表看起来,嗯,就是列表。假如你有使用过电子邮件,引言写法看起来就真的像是引用一段文字。
Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等)
这些功能原初的 Markdown 尚不具备,它们能让 Markdown 转换成更多的格式,例如 LaTeXDocbook。
Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具,如 Pandoc要么基于网站如 GitHub 和 Wikipedia在语法上基本兼容但在一些语法和渲染效果上有改动。
## 用途
Markdown 的语法有个主要的目的: 用来作为一种网络内容的*写作*用语言。Markdown 的重点在于它能让文件更容易阅读、编写。因此Markdown 的格式语法只涵盖纯文字可以涵盖的范围。
Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。
用于编写说明文档,并且以 `README.md` 的文件名保存在软件的目录下面。
除此之外,我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域Markdown 已经广泛使用,极大地推进了动态可重复性研究的历史进程。
### 行内 HTML
不在 Markdown 涵盖范围之外的标签,都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown只要直接加标签就可以了。
只有块元素 ── 比如 `<div>``<table>``<pre>``<p>` 等标签,必须在前后加上空行,以利与内容区隔。
而且这些 (元素) 的开始与结尾标签,不可以用 tab 或是空白来缩进。Markdown 的解析器有智慧型判断,可以避免在块标签前后加上没有必要的 `<p>` 标签。
举例来说,在 Markdown 文件里加上一段 HTML 表格:
```md
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
```
请注意Markdown 语法在 HTML 块标签中将不会被进行处理。例如,你无法在 HTML 块内使用 Markdown 形式的 `*强调*`
### 特殊字元自动转换
在 HTML 文件中,有两个字元需要特殊处理: `<``&``<` 符号用于起始标签,`&` 符号则用于标记 HTML 实体,如果你只是想要使用这些符号,你必须要使用实体的形式,像是 `&lt;``&amp;`
`&` 符号其实很容易让写作网络文件的人感到困扰如果你要打「AT\&T」 ,你必须要写成「`AT&amp;T`」 ,还得转换网址内的 `&` 符号,如果你要链接到 `http://images.google.com/images?num=30&q=larry+bird`
你必须要把网址转成:
```html
http://images.google.com/images?num=30&amp;q=larry+bird
```
才能放到链接标签的 `href` 属性里。不用说也知道这很容易忘记,这也可能是 HTML 标准检查所检查到的错误中,数量最多的。
Markdown 允许你直接使用这些符号,但是你要小心跳脱字元的使用,如果你是在 HTML 实体中使用 `&` 符号的话,它不会被转换,而在其它情形下,它则会被转换成 `&amp;`。所以你如果要在文件中插入一个著作权的符号,你可以这样写:
```md
&copy;
```
Markdown 将不会对这段文字做修改,但是如果你这样写:
```md
AT&T
```
Markdown 就会将它转为:
```html
AT&amp;T
```
类似的状况也会发生在 `<` 符号上,因为 Markdown 支持 [行内 HTML](#行内-html) ,如果你是使用 `<` 符号作为 HTML 标签使用,那 Markdown 也不会对它做任何转换,但是如果你是写:
```md
4 < 5
```
Markdown 将会把它转换为:
```html
4 &lt; 5
```
不过需要注意的是code 范围内,不论是行内还是块, `<``&` 两个符号都*一定*会被转换成 HTML 实体,
这项特性让你可以很容易地用 Markdown 写 HTML code (和 HTML 相对而言, HTML 语法中,
你要把所有的 `<``&` 都转换为 HTML 实体,才能在 HTML 文件里面写出 HTML code。)
[1]: http://docutils.sourceforge.net/mirror/setext.html
[2]: http://www.aaronsw.com/2002/atx/
[3]: http://textism.com/tools/textile/
[4]: http://docutils.sourceforge.net/rst.html
[5]: http://www.triptico.com/software/grutatxt.html
[6]: http://ettext.taint.org/doc/

File diff suppressed because one or more lines are too long

148
article/ecxnxxd0/index.html Normal file

File diff suppressed because one or more lines are too long

328
article/ecxnxxd0/index.md Normal file
View File

@ -0,0 +1,328 @@
---
url: /article/ecxnxxd0/index.md
---
::: info 说明
本文 翻译 [Introduction to YAML](https://dev.to/paulasantamaria/introduction-to-yaml-125f) 的部分内容。
用于简单说明如何在 markdown 文件中使用 frontmatter。
如果您具有良好的英语阅读基础,为避免翻译可能存在的内容失真,建议您阅读原文。
原文地址: <https://dev.to/paulasantamaria/introduction-to-yaml-125f>
:::
## 介绍
YAML 是一种数据序列化语言,通常用于配置文件,例如
[Open API 规范](https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/yaml/api-with-examples.yaml) 或 [CI/CD 管道](https://docs.gitlab.com/ee/ci/yaml/)。
::: note 有趣的事实!🤓
根据 [YAML 1.0 规范文档 2001-05-26](https://yaml.org/spec/history/2001-05-26.html) 首字母缩略词
“YAML” 代表 “Yet Another Markup Language”
但后来在 [2002-04-07 规范](https://yaml.org/spec/history/2002-04-07.html) 中更改为递归首字母缩略词“YAML Ain't Markup Language”。
:::
正如最新规范中所述,**YAML** 旨在 **对处理数据的人友好**,并通过 **最大限度地减少结构字符的使用来实现“独特的干净度”**
允许数据以自然和有意义的方式显示。
最新规范还指出YAML *1.2 作为官方子集符合 JSON* ,这意味着大多数 JSON 文档都可以解析为 YAML。
YAML 通过使用基于缩进的范围界定(类似于 Python轻松检查数据结构。
::: note 另一个有趣的事实!🤓
DEV.to 文章使用 YAML 来定义自定义变量,如标题、描述、标签等。
:::
## 基本语法
YAML 文档基本上是 **键值对的集合**,其中值可以像字符串一样简单,也可以像树一样复杂。
以下是有关 YAML 语法的一些说明:
* **缩进用于表示结构**。不允许使用制表符,只要子节点的缩进量比父节点大,空格的数量就无关紧要。
* 允许使用 UTF-8、UTF-16 和 UTF-32 编码。
### 字符串
```md
---
# 字符串不需要引号:
title: Introduction to YAML
# 但你仍可使用它们:
title-w-quotes: 'Introduction to YAML'
# 多行字符串以 | 开头
execute: |
npm ci
npm build
npm test
---
```
上面的代码将转换为 JSON 为:
```json
{
"title": "Introduction to YAML",
"title-w-quotes": "Introduction to YAML",
"execute": "npm ci\nnpm build\nnpm test\n"
}
```
### 数字
```md
---
# 整数:
age: 29
# 浮点数:
price: 15.99
# 科学计数法:
population: 2.89e+6
---
```
上面的代码将转换为 JSON 为:
```json
{
"age": 29,
"price": 15.99,
"population": 2890000
}
```
### 布尔值
```md
---
# 布尔值可以有不同的表示方式:
published: false
published: False
published: FALSE
---
```
以上所有内容都将转换为 JSON如下所示
```json
{
"published": false
}
```
### Null 值
```md
---
# Null 值可以通过不设置值来表示:
null-value:
# 或者更明确地说:
null-value: null
null-value: NULL
null-value: Null
---
```
以上所有内容都将转换为 JSON如下所示
```json
{
"null-value": null
}
```
### 日期和时间戳
可以使用 ISO 格式的日期,如下所示:
```md
---
date: 2002-12-14
canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
---
```
### Sequences 序列
序列允许我们在 YAML 中定义列表:
```md
---
# 使用连字符的数字列表:
numbers:
- one
- two
- three
# 内联版本:
numbers: [ one, two, three ]
---
```
上述两个序列都将解析为 JSON如下所示
```json
{
"numbers": [
"one",
"two",
"three"
]
}
```
### 嵌套值
我们可以使用上述所有类型来创建具有嵌套值的对象,如下所示:
```md
---
# 一九八四小说数据。
nineteen-eighty-four:
author: George Orwell
published-at: 1949-06-08
page-count: 328
description: |
A Novel, often published as 1984, is a dystopian novel by English novelist George Orwell.
It was published in June 1949 by Secker & Warburg as Orwell's ninth and final book.
---
```
这将转换为 JSON
```json
{
"nineteen-eighty-four": {
"author": "George Orwell",
"published-at": "1949-06-08T00:00:00.000Z",
"page-count": 328,
"description": "A Novel, often published as 1984, is a dystopian novel by English novelist George Orwell.\nIt was published in June 1949 by Secker & Warburg as Orwell's ninth and final book.\n"
}
}
```
### 对象列表
将序列和嵌套值组合在一起,我们可以创建一个对象列表。
```md
---
# Let's list books:
- nineteen-eighty-four:
author: George Orwell
published-at: 1949-06-08
page-count: 328
description: |
A Novel, often published as 1984, is a dystopian novel by English novelist George Orwell.
- the-hobbit:
author: J. R. R. Tolkien
published-at: 1937-09-21
page-count: 310
description: |
The Hobbit, or There and Back Again is a children's fantasy novel by English author J. R. R. Tolkien.
---
```
## 独特特性
以下是一些引起我注意的 **更复杂的功能** ,它们也使 YAML 与 JSON 区分开来。
### 注释
你可能已经在我前面的示例中注意到YAML 允许以 `#` 开头的注释。
```md
---
# 这是一个非常有用的注释。
---
```
### 锚点的可重用性
节点锚点用于 **标记一个节点** 以供将来引用,从而允许我们重复使用该节点。
要标记一个节点,我们使用 `&` 字符,要引用它,我们使用 `*`
在下面的示例中,我们将定义一个书籍列表并重用作者数据,因此我们只需要定义一次:
```md
---
# 作者数据:
author: &gOrwell
name: George
last-name: Orwell
# 一些书籍:
books:
- 1984:
author: *gOrwell
- animal-farm:
author:*gOrwell
---
```
解析为 JSON 后,上面的代码将如下所示:
```json
{
"author": {
"name": "George",
"last-name": "Orwell"
},
"books": [
{
"1984": {
"author": {
"name": "George",
"last-name": "Orwell"
}
}
},
{
"animal-farm": {
"author": {
"name": "George",
"last-name": "Orwell"
}
}
}
]
}
```
### 带有标签的显式数据类型
正如我们在之前的示例中所见YAML 会自动检测我们值的类型,但我们也可以 **指定所需的类型**
我们通过在值前加上 `!!` 类型来指定它。
以下是一些示例:
```md
---
# 以下值应为整数,无论何种情况:
should-be-int: !!int 3.2
# 解析任何值为字符串:
should-be-string: !!str 30.25
# 我需要下一个值为布尔类型:
should-be-boolean: !!bool yes
---
```
这将转换为 JSON
```json
{
"should-be-int": 3,
"should-be-string": "30.25",
"should-be-boolean": true
}
```

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

80
article/f1khd14n/index.md Normal file
View File

@ -0,0 +1,80 @@
---
url: /article/f1khd14n/index.md
---
::: warning 当前版本包含了破坏性的更新。
:::
## Breaking Changes
### 移除 `node18` 支持
主题从 `1.0.0-rc.144` 开始,不再支持 `node18` 。最低支持的 node 版本为 `20.6.0`
### 图标语法
在 主题 `1.0.0-rc.144` 版本之前,图标语法如下:
```md
:[collect:name]:
:[collect:name size/color]:
```
该语法支持所有的 `iconify` 图标,然而该语法存在一些问题:
* 书写体验不友好,标记语法中的字符 `:[``]:` 从键盘布局和输入顺序上,不适合快速输入
* `size/color` 不严谨,很容易解析错误
如果使用 `rgb(34 12 64 / 60%)``hsl(30 100% 50% / 60%)``hwb(90 10% 10% / 0.5)` 等颜色值,由于包含了 `/`
会错误的将 `/` 之前的部分解析为 `size`,从而导致解析错误。
* 仅能支持 `iconify` 来源的图标,无法支持 `iconfont` / `fontawesome` / `lucide` 等图标库的图标
**由于上述原因,主题决定弃用该语法,修改为下述语法:**
```md
::collect:name::
::collect:name =size /color::
```
* 标记符号 `:[``]:` 替换为 `::`,这是的可以连续敲击同一个按键以实现快速输入
* `=size` 代表图标的大小,`/color` 代表图标的颜色,使用明确的前置符号来区分 `size``color`
:::info 更多图表来源支持
当前版本依然仅支持 `iconify` 图标,主题计划在后续版本中支持 `iconfont` / `fontawesome` / `lucide` 等图标库,
更用户更灵活的选择。
:::
::: warning
为了方便从旧语法迁移到新语法,在当前版本中,旧的语法依然能够正确渲染图标,
主题会在控制台输出警告信息和修改建议,请根据修改建议进行调整。
:::
### 重写 `file-tree` 容器
在新的版本中,主题重写了 `file-tree` 容器的 markdown-it 插件,
使用全局的解析方法解析文件树内容,并改进了文件树的显示效果和交互行为。
此破坏性更新为主题内部调整,语法保持不变,用户无需对内容进行调整。
## 新功能
### 版权信息配置调整
`themeConfig``copyright` 配置中,新增 `author``creation` 配置项。
* `author` 全局配置文章的默认的版权所有者。
* `creation` 全局配置文章的默认的创作方式。
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
copyright: {
author: 'pengzhanbo', // [!code ++:2]
creation: 'original',
license: 'MIT'
}
})
})
```

File diff suppressed because one or more lines are too long

106
article/i4cuuonn/index.md Normal file
View File

@ -0,0 +1,106 @@
---
url: /article/i4cuuonn/index.md
---
## 概述
不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,
包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6],然而最大灵感来源其实是纯文字的电子邮件格式。
因此 Markdown 的语法全由标点符号所组成,并经过严谨慎选,是为了让它们看起来就像所要表达的意思。像是在文字两旁加上星号,看起来就像\*强调\*。Markdown 的列表看起来,嗯,就是列表。假如你有使用过电子邮件,引言写法看起来就真的像是引用一段文字。
Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等)
这些功能原初的 Markdown 尚不具备,它们能让 Markdown 转换成更多的格式,例如 LaTeXDocbook。
Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具,如 Pandoc要么基于网站如 GitHub 和 Wikipedia在语法上基本兼容但在一些语法和渲染效果上有改动。
## 用途
Markdown 的语法有个主要的目的: 用来作为一种网络内容的*写作*用语言。Markdown 的重点在于它能让文件更容易阅读、编写。因此Markdown 的格式语法只涵盖纯文字可以涵盖的范围。
Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。
用于编写说明文档,并且以 `README.md` 的文件名保存在软件的目录下面。
除此之外,我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域Markdown 已经广泛使用,极大地推进了动态可重复性研究的历史进程。
### 行内 HTML
不在 Markdown 涵盖范围之外的标签,都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown只要直接加标签就可以了。
只有块元素 ── 比如 `<div>``<table>``<pre>``<p>` 等标签,必须在前后加上空行,以利与内容区隔。
而且这些 (元素) 的开始与结尾标签,不可以用 tab 或是空白来缩进。Markdown 的解析器有智慧型判断,可以避免在块标签前后加上没有必要的 `<p>` 标签。
举例来说,在 Markdown 文件里加上一段 HTML 表格:
```md
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
```
请注意Markdown 语法在 HTML 块标签中将不会被进行处理。例如,你无法在 HTML 块内使用 Markdown 形式的 `*强调*`
### 特殊字元自动转换
在 HTML 文件中,有两个字元需要特殊处理: `<``&``<` 符号用于起始标签,`&` 符号则用于标记 HTML 实体,如果你只是想要使用这些符号,你必须要使用实体的形式,像是 `&lt;``&amp;`
`&` 符号其实很容易让写作网络文件的人感到困扰如果你要打「AT\&T」 ,你必须要写成「`AT&amp;T`」 ,还得转换网址内的 `&` 符号,如果你要链接到 `http://images.google.com/images?num=30&q=larry+bird`
你必须要把网址转成:
```html
http://images.google.com/images?num=30&amp;q=larry+bird
```
才能放到链接标签的 `href` 属性里。不用说也知道这很容易忘记,这也可能是 HTML 标准检查所检查到的错误中,数量最多的。
Markdown 允许你直接使用这些符号,但是你要小心跳脱字元的使用,如果你是在 HTML 实体中使用 `&` 符号的话,它不会被转换,而在其它情形下,它则会被转换成 `&amp;`。所以你如果要在文件中插入一个著作权的符号,你可以这样写:
```md
&copy;
```
Markdown 将不会对这段文字做修改,但是如果你这样写:
```md
AT&T
```
Markdown 就会将它转为:
```html
AT&amp;T
```
类似的状况也会发生在 `<` 符号上,因为 Markdown 支持 [行内 HTML](#行内-html) ,如果你是使用 `<` 符号作为 HTML 标签使用,那 Markdown 也不会对它做任何转换,但是如果你是写:
```md
4 < 5
```
Markdown 将会把它转换为:
```html
4 &lt; 5
```
不过需要注意的是code 范围内,不论是行内还是块, `<``&` 两个符号都*一定*会被转换成 HTML 实体,
这项特性让你可以很容易地用 Markdown 写 HTML code (和 HTML 相对而言, HTML 语法中,
你要把所有的 `<``&` 都转换为 HTML 实体,才能在 HTML 文件里面写出 HTML code。)
[1]: http://docutils.sourceforge.net/mirror/setext.html
[2]: http://www.aaronsw.com/2002/atx/
[3]: http://textism.com/tools/textile/
[4]: http://docutils.sourceforge.net/rst.html
[5]: http://www.triptico.com/software/grutatxt.html
[6]: http://ettext.taint.org/doc/

File diff suppressed because one or more lines are too long

323
article/mcgayb5w/index.html Normal file

File diff suppressed because one or more lines are too long

755
article/mcgayb5w/index.md Normal file
View File

@ -0,0 +1,755 @@
---
url: /article/mcgayb5w/index.md
---
## 标题锚点
标题会自动应用锚点。
### 自定义锚点
要为标题指定自定义锚点而不是使用自动生成的锚点,请向标题添加后缀:
```md
# 使用自定义锚点 {#my-anchor}
```
这允许将标题链接为 `#my-anchor`,而不是默认的 `#使用自定义锚点`
## 链接
内部和外部链接都会被特殊处理。
主题默认对每个 md 文件自动生成一个新的 链接,并保存在对应的 md 文件的 frontmatter 的 `permalink` 中。
你可以随时修改它们。你也可以通过 `theme.autoFrontmatter` 选项来禁用这个功能,这时会恢复为 VuePress 的默认行为。
### 内部链接
有三种方式来使用内部链接:
* 使用 生成的 `permalink` 作为内部链接的目标。
* 使用 md 文件的相对路径作为内部链接的目标。
* 使用 md 文件的绝对路径作为内部链接的目标, 绝对路径 `/` 表示从 `${sourceDir}` 目录开始。
```md
[Markdown](/guide/markdown/)
[Markdown](./markdown基础.md)
```
渲染为:
[Markdown](/guide/markdown/)
[Markdown](./markdown基础.md)
#### 外部链接
外部链接带有 `target="_blank" rel="noreferrer"`
[VuePress](https://v2.vuepress.vuejs.org/)
## Github风格的表格
**输入:**
```md
| Tables | Are | Cool |
| ------------- | :-----------: | ----: |
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
```
**输出:**
| Tables | Are | Cool |
| ------------- | :-----------: | ----: |
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
## Emoji :tada:
**输入:**
```md
:tada: :100:
```
**输出:**
:tada: :100:
这里可以找到 [所有支持的 emoji 列表](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.mjs)。
## 目录表
**输入:**
```md
[[TOC]]
```
**输出:**
\[\[TOC]]
## 自定义容器
自定义容器可以通过它们的类型、标题和内容来定义。
### 默认标题
**输入:**
```md
::: note
This is a note box
:::
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: caution
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**输出:**
::: note
This is a note box
:::
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: caution
This is a dangerous warning.
:::
::: details
This is a details block.
:::
### 自定义标题
可以通过在容器的 "type" 之后附加文本来设置自定义标题。
**输入:**
````md
::: caution STOP
危险区域,请勿继续
:::
::: details 点我查看代码
```js
console.log('Hello, VitePress!')
```
:::
````
**输出:**
::: caution STOP
危险区域,请勿继续
:::
::: details 点我查看代码
```js
console.log('Hello, VitePress!')
```
:::
## GitHub 风格的警报
主题 同样支持以标注的方式渲染 [GitHub 风格的警报](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts)。它们和[自定义容器](#自定义容器)的渲染方式相同。
**输入:**
```md
> [!NOTE]
> 强调用户在快速浏览文档时也不应忽略的重要信息。
> [!TIP]
> 有助于用户更顺利达成目标的建议性信息。
> [!IMPORTANT]
> 对用户达成目标至关重要的信息。
> [!WARNING]
> 因为可能存在风险,所以需要用户立即关注的关键内容。
> [!CAUTION]
> 行为可能带来的负面影响。
```
**输出:**
> \[!NOTE]
> 强调用户在快速浏览文档时也不应忽略的重要信息。
> \[!TIP]
> 有助于用户更顺利达成目标的建议性信息。
> \[!IMPORTANT]
> 对用户达成目标至关重要的信息。
> \[!WARNING]
> 因为可能存在风险,所以需要用户立即关注的关键内容。
> \[!CAUTION]
> 行为可能带来的负面影响。
## 代码块中的语法高亮
主题 使用 [Shiki](https://github.com/shikijs/shiki) 在 Markdown 代码块中使用彩色文本实现语法高亮。
Shiki 支持多种编程语言。需要做的就是将有效的语言别名附加到代码块的开头:
**输入:**
````md
```js
export default {
name: 'MyComponent',
// ...
}
```
````
````md
```html
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.text }}
</li>
</ul>
```
````
**输出:**
```js
export default {
name: 'MyComponent',
// ...
}
```
```html
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.text }}
</li>
</ul>
```
在 Shiki 的代码仓库中,可以找到 [合法的编程语言列表](https://shiki.style/languages)。
## 在代码块中实现行高亮
**输入:**
````md
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**输出:**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
除了单行之外,还可以指定多个单行、多行,或两者均指定:
* 多行:例如 `{5-8}``{3-10}``{10-17}`
* 多个单行:例如 `{4,7,9}`
* 多行与单行:例如 `{4,7-13,16,23-27,40}`
**输入:**
````md
```js{1,4,6-8}
export default { // Highlighted
data () {
return {
msg: `Highlighted!
This line isn't highlighted,
but this and the next 2 are.`,
motd: 'VitePress is awesome',
lorem: 'ipsum'
}
}
}
```
````
**输出:**
```js{1,4,6-8}
export default { // Highlighted
data () {
return {
msg: `Highlighted!
This line isn't highlighted,
but this and the next 2 are.`,
motd: 'VitePress is awesome',
lorem: 'ipsum'
}
}
}
```
也可以使用 `// [!code highlight]` 注释实现行高亮。
**输入:**
````md
```js
export default {
data() {
return {
msg: 'Highlighted!' // [\!code highlight]
}
}
}
```
````
**输出:**
```js
export default {
data() {
return {
msg: 'Highlighted!' // [!code highlight]
}
}
}
```
## 代码块中聚焦
在某一行上添加 `// [!code focus]` 注释将聚焦它并模糊代码的其他部分。
此外,可以使用 `// [!code focus:<lines>]` 定义要聚焦的行数。
**输入:**
````md
```js
export default {
data() {
return {
msg: 'Focused!' // [\!code focus]
}
}
}
```
````
**输出:**
```js
export default {
data() {
return {
msg: 'Focused!' // [!code focus]
}
}
}
```
## 代码块中的颜色差异
在某一行添加 `// [!code --]``// [!code ++]` 注释将会为该行创建 diff同时保留代码块的颜色。
**输入:**
````md
```js
export default {
data() {
return {
remove: 'Removed', // [\!code --]
add: 'Added' // [\!code ++]
}
}
}
```
````
**输出:**
```js
export default {
data() {
return {
remove: 'Removed', // [!code --]
add: 'Added' // [!code ++]
}
}
}
```
## 高亮“错误”和“警告”
在某一行添加 `// [!code warning]``// [!code error]` 注释将会为该行相应的着色。
**输入:**
````md
```js
export default {
data() {
return {
error: 'Error', // [\!code error]
warning: 'Warning' // [\!code warning]
}
}
}
```
````
**输出:**
```js
export default {
data() {
return {
error: 'Error', // [!code error]
warning: 'Warning' // [!code warning]
}
}
}
```
## 代码块中 词高亮
**输入:**
````md
```ts
export function foo() { // [\!code word:Hello]
const msg = 'Hello World'
console.log(msg) // prints Hello World
}
```
````
**输出:**
```ts
export function foo() { // [!code word:Hello]
const msg = 'Hello World'
console.log(msg) // prints Hello World
}
```
你还可以指定高亮显示的次数,例如 `[!code word:options:2]` 会高亮显示近两个 `options`
**输入:**
````md
```ts
// [\!code word:options:2]
const options = { foo: 'bar' }
options.foo = 'baz'
console.log(options.foo) // 这个不会被高亮显示
```
````
**输出:**
```ts
// [!code word:options:2]
const options = { foo: 'bar' }
options.foo = 'baz'
console.log(options.foo) // 这个不会被高亮显示
```
## 代码组
可以像这样对多个代码块进行分组:
**输入:**
````md
::: code-tabs
@tab config.js
```js
/**
* @type {import('vuepress').UserConfig}
*/
const config = {
// ..
}
export default config
```
@tab config.ts
```ts
import type { UserConfig } from 'vuepress'
const config: UserConfig = {
// ..
}
export default config
```
:::
````
**输出:**
::: code-tabs
@tab config.js
```js
/**
* @type {import('vuepress').UserConfig}
*/
const config = {
// ..
}
export default config
```
@tab config.ts
```ts
import type { UserConfig } from 'vuepress'
const config: UserConfig = {
// ..
}
export default config
```
:::
你还可以通过 `@tab:active`
## 导入代码块
**输入:**
你可以使用下面的语法,从文件中导入代码块:
```md
@[code](../snippet/snippet-1.js)
```
**输出:**
@[code](../../snippet/snippet-1.js)
如果你只想导入这个文件的一部分:
```md
<!-- 仅导入第 1 行至第 10 行 -->
@[code{1-10}](../snippet/snippet-1.js)
```
代码语言会根据文件扩展名进行推断,但我们建议你显式指定:
```md
<!-- 指定代码语言 -->
@[code js](../snippet/snippet-1.js)
<!-- 行高亮 -->
@[code js{2,4-5}](../foo.js)
```
## 数学方程
**输入:**
```md
When $a \ne 0$, there are two solutions to $(ax^2 + bx + c = 0)$ and they are
$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
**Maxwell's equations:**
| equation | description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| $\nabla \cdot \vec{\mathbf{B}} = 0$ | divergence of $\vec{\mathbf{B}}$ is zero |
| $\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} = \vec{\mathbf{0}}$ | curl of $\vec{\mathbf{E}}$ is proportional to the rate of change of $\vec{\mathbf{B}}$ |
| $\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} = \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} = 4 \pi \rho$ | _wha?_ |
```
**输出:**
When $a \ne 0$, there are two solutions to $(ax^2 + bx + c = 0)$ and they are
$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
**Maxwell's equations:**
| equation | description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| $\nabla \cdot \vec{\mathbf{B}} = 0$ | divergence of $\vec{\mathbf{B}}$ is zero |
| $\nabla \times \vec{\mathbf{E}}, +, \frac1c, \frac{\partial\vec{\mathbf{B}}}{\partial t} = \vec{\mathbf{0}}$ | curl of $\vec{\mathbf{E}}$ is proportional to the rate of change of $\vec{\mathbf{B}}$ |
| $\nabla \times \vec{\mathbf{B}} -, \frac1c, \frac{\partial\vec{\mathbf{E}}}{\partial t} = \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} = 4 \pi \rho$ | *wha?* |
## 标记
使用 `== ==` 进行标记。请注意两边需要有空格。
**输入:**
```md
vuepress-theme-plume 是一个 ==简洁美观== 的 主题
```
**输出:**
vuepress-theme-plume 是一个 ==简洁美观== 的 主题
## 上下角标
* 使用 `^ ^` 进行上角标标注。
* 使用 `~ ~` 进行下角标标注。
**输入:**
```md
- 19^th^
- H~2~O
```
**输出:**
* 19^th^
* H~2~O
## 自定义对齐
**输入:**
```md
::: left
左对齐的内容
:::
::: center
居中的内容
:::
::: right
右对齐的内容
:::
```
**输出:**
::: left
左对齐的内容
:::
::: center
居中的内容
:::
::: right
右对齐的内容
:::
## 属性支持
你可以使用特殊标记为 Markdown 元素添加属性。
**为图片添加属性:**
这将为图片添加 一个 名为 `full-width` 的 class 属性,以及一个 `width` 属性,值为 `100%`
```md
![alt text](/plume.png){.full-width width="100%"}
```
同时也支持其他属性:
```md
一个包含文字的段落。 {#p .a .b align=center customize-attr="content with spaces"}
```
这将被渲染为:
```html
<p id="p" class="a b" align="center" customize-attr="content with spaces">
一个包含文字的段落。
</p>
```
## 任务列表
**输入:**
```md
- [ ] 任务 1
- [x] 任务 2
- [ ] 任务 3
```
**输出:**
* \[ ] 任务 1
* \[x] 任务 2
* \[ ] 任务 3
## 脚注
**输入:**
```md
人生自古谁无死,留取丹心照汗青[^脚注1]。
[^脚注1]: 出自 宋·文天祥 **《过零丁洋》**
```
**输出:**
人生自古谁无死,留取丹心照汗青\[^脚注1]。
\[^脚注1]: 出自 宋·文天祥 **《过零丁洋》**

161
article/mcz1csb4/index.html Normal file

File diff suppressed because one or more lines are too long

833
article/mcz1csb4/index.md Normal file
View File

@ -0,0 +1,833 @@
---
url: /article/mcz1csb4/index.md
---
Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Markdown 的目标是实现「易读易写」。
## 概述
不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,
包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6],然而最大灵感来源其实是纯文字的电子邮件格式。
因此 Markdown 的语法全由标点符号所组成,并经过严谨慎选,是为了让它们看起来就像所要表达的意思。像是在文字两旁加上星号,看起来就像\*强调\*。Markdown 的列表看起来,嗯,就是列表。假如你有使用过电子邮件,引言写法看起来就真的像是引用一段文字。
Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等)
这些功能原初的 Markdown 尚不具备,它们能让 Markdown 转换成更多的格式,例如 LaTeXDocbook。
Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具,如 Pandoc要么基于网站如 GitHub 和 Wikipedia在语法上基本兼容但在一些语法和渲染效果上有改动。
## 用途
Markdown 的语法有个主要的目的: 用来作为一种网络内容的*写作*用语言。Markdown 的重点在于它能让文件更容易阅读、编写。因此Markdown 的格式语法只涵盖纯文字可以涵盖的范围。
Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。
用于编写说明文档,并且以 `README.md` 的文件名保存在软件的目录下面。
除此之外,我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域Markdown 已经广泛使用,极大地推进了动态可重复性研究的历史进程。
### 行内 HTML
不在 Markdown 涵盖范围之外的标签,都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown只要直接加标签就可以了。
只有块元素 ── 比如 `<div>``<table>``<pre>``<p>` 等标签,必须在前后加上空行,以利与内容区隔。
而且这些 (元素) 的开始与结尾标签,不可以用 tab 或是空白来缩进。Markdown 的解析器有智慧型判断,可以避免在块标签前后加上没有必要的 `<p>` 标签。
举例来说,在 Markdown 文件里加上一段 HTML 表格:
```md
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
```
请注意Markdown 语法在 HTML 块标签中将不会被进行处理。例如,你无法在 HTML 块内使用 Markdown 形式的 `*强调*`
### 特殊字元自动转换
在 HTML 文件中,有两个字元需要特殊处理: `<``&``<` 符号用于起始标签,`&` 符号则用于标记 HTML 实体,如果你只是想要使用这些符号,你必须要使用实体的形式,像是 `&lt;``&amp;`
`&` 符号其实很容易让写作网络文件的人感到困扰如果你要打「AT\&T」 ,你必须要写成「`AT&amp;T`」 ,还得转换网址内的 `&` 符号,如果你要链接到 `http://images.google.com/images?num=30&q=larry+bird`
你必须要把网址转成:
```html
http://images.google.com/images?num=30&amp;q=larry+bird
```
才能放到链接标签的 `href` 属性里。不用说也知道这很容易忘记,这也可能是 HTML 标准检查所检查到的错误中,数量最多的。
Markdown 允许你直接使用这些符号,但是你要小心跳脱字元的使用,如果你是在 HTML 实体中使用 `&` 符号的话,它不会被转换,而在其它情形下,它则会被转换成 `&amp;`。所以你如果要在文件中插入一个著作权的符号,你可以这样写:
```md
&copy;
```
Markdown 将不会对这段文字做修改,但是如果你这样写:
```md
AT&T
```
Markdown 就会将它转为:
```html
AT&amp;T
```
类似的状况也会发生在 `<` 符号上,因为 Markdown 支持 [行内 HTML](#行内-html) ,如果你是使用 `<` 符号作为 HTML 标签使用,那 Markdown 也不会对它做任何转换,但是如果你是写:
```md
4 < 5
```
Markdown 将会把它转换为:
```html
4 &lt; 5
```
不过需要注意的是code 范围内,不论是行内还是块, `<``&` 两个符号都*一定*会被转换成 HTML 实体,
这项特性让你可以很容易地用 Markdown 写 HTML code (和 HTML 相对而言, HTML 语法中,
你要把所有的 `<``&` 都转换为 HTML 实体,才能在 HTML 文件里面写出 HTML code。)
***
## 块元素
### 段落和换行
一个段落是由一个以上相连接的行句组成,而一个以上的空行则会切分出不同的段落 (空行的定义是显示上看起来像是空行,便会被视为空行。比方说,若某一行只包含空白和 tab则该行也会被视为空行) ,一般的段落不需要用空白或断行缩进。
「一个以上相连接的行句组成」这句话其实暗示了 Markdown 允许段落内的强迫断行,
这个特性和其他大部分的 text-to-HTML 格式不一样 (包括 MovableType 的「Convert Line Breaks」选项)
其它的格式会把每个断行都转成 `<br />` 标签。
如果你*真的*想要插入 `<br />` 标签的话,在行尾加上两个以上的空格 (` `) 或斜线 (`/`),然后按 Enter。
是的,这确实需要花比较多功夫来插入 `<br />` ,但是「每个换行都转换为 `<br />`」的方法在 Markdown 中并不适合, Markdown 中 email 式的 [块引言][bq] 和多段落的 [列表][l] 在使用换行来排版的时候,不但更好用,还更好阅读。
### 标题
标题能显示出文章的结构。
Markdown 支持两种标题的语法,[Setext][1] 和 [atx][2] 形式。
Setext 形式是用底线的形式,利用 `=` (最高阶标题) 和 `-` (第二阶标题) ,例如:
```md
# This is an H1
## This is an H2
```
任何数量的 `=``-` 都可以有效果。
Atx (推荐)形式则是在行首插入 1 到 6 个 `#` ,对应到标题 1 到 6 阶,例如:
* H1: `# Header 1`
* H2: `## Header 2`
* H3: `### Header 3`
* H4: `#### Header 4`
* H5: `##### Header 5`
* H6: `###### Header 6`
### Blockquotes
Markdown 使用 email 形式的块引言,如果你很熟悉如何在 email 信件中引言,你就知道怎么在 Markdown 文件中建立一个块引言,那会看起来像是你强迫断行,然后在每行的最前面加上 `>` :
```md
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.
```
Markdown 也允许你只在整个段落的第一行最前面加上 `>` :
```md
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.
```
块引言可以有阶层 (例如: 引言内的引言) ,只要根据层数加上不同数量的 `>` :
```md
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.
```
引言的块内也可以使用其他的 Markdown 语法,包括标题、列表、代码块等:
```md
> ## This is a header.
>
> 1. This is the first list item.
> 1. This is the second list item.
>
> Here's some example code:
>
> return shell_exec("echo $input | $markdown_script");
```
任何标准的文字编辑器都能简单地建立 email 样式的引言,例如 BBEdit ,你可以选取文字后然后从选单中选择*增加引言阶层*。
### 列表
Markdown 支持有序列表和无序列表。
无序列表使用减号作为列表标记(也可使用星号、加号):
```md
- Red
- Green
- Blue
```
也可以(不建议):
```md
- Red
- Green
- Blue
* Red
* Green
* Blue
```
有序列表则使用数字接着一个英文句点:
```md
1. Bird
2. McHale
3. Parish
```
很重要的一点是,你在列表标记上使用的数字并不会影响输出的 HTML 结果,上面的列表所产生的 HTML 标记为:
```html
<ol>
<li>Bird</li>
<li>McHale</li>
<li>Parish</li>
</ol>
```
如果你的列表标记写成:
```md
1. Bird
1. McHale
1. Parish
```
你都会得到完全相同的 HTML 输出。重点在于,你可以让 Markdown 文件的列表数字和输出的结果相同,或是你懒一点都写作 `1` 你可以完全不用在意数字的正确性。
列表项目标记通常是放在最左边,但是其实也可以缩进,最多三个空白,项目标记后面则一定要接着至少一个空白或 tab。
要让列表看起来更漂亮,你可以把内容用固定的缩进整理好:
```md
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
- Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
```
但是如果你很懒,那也不一定需要:
```md
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
- Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
```
如果列表项目间用空行分开, Markdown 会把项目的内容在输出时用 `<p>` 标签包起来,举例来说:
```md
- Bird
- Magic
```
会被转换为:
```html
<ul>
<li>Bird</li>
<li>Magic</li>
</ul>
```
但是这个:
```md
- Bird
- Magic
```
会被转换为:
```html
<ul>
<li><p>Bird</p></li>
<li><p>Magic</p></li>
</ul>
```
列表项目可以包含多个段落,每个项目下的段落都必须缩进 4 个空白或是一个 tab :
```md
1. This is a list item with two paragraphs. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
sit amet velit.
2. Suspendisse id sem consectetuer libero luctus adipiscing.
```
如果你每行都有缩进看起来会看好很多当然再次地如果你很懒惰Markdown 也允许:
```md
- This is a list item with two paragraphs.
This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.
- Another item in the same list.
```
如果要在列表项目内放进引言,那 `>` 就需要缩进:
```md
- A list item with a blockquote:
> This is a blockquote
> inside a list item.
```
当然,项目列表很可能会不小心产生,像是下面这样的写法:
```md
1986. What a great season.
```
换句话说,也就是在行首出现*数字-句点-空白*,要避免这样的状况,你可以在句点前面加上反斜线。
```md
1986\. What a great season.
```
### 代码块
和代码相关的写作或是标签语言原始码通常会有已经排版好的代码块通常这些块我们并不希望它以一般段落文件的方式去排版而是照原来的样子显示Markdown 会用 `<pre>``<code>` 标签来把代码块包起来。
要在 Markdown 中建立代码块很简单,只要简单地缩进 4 个空白或是 1 个 tab 就可以,例如,下面的输入:
```md
This is a normal paragraph:
This is a code block.
```
Markdown 会转换成:
```html
<p>This is a normal paragraph:</p>
<pre>
<code>This is a code block.</code>
</pre>
```
这里的缩进 (4 个空白或是 1 个 tab) ,都会被移除,例如:
```md
Here is an example of AppleScript:
tell application "Foo"
beep
end tell
```
会被转换为:
```html
<p>Here is an example of AppleScript:</p>
<pre><code>tell application "Foo"
beep
end tell
</code></pre>
```
一个代码块会一直持续到没有缩进的那一行 (或是文件结尾) 。
在代码块里面, `&``<``>` 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制粘贴,再加上缩进就可以了,剩下的 Markdown 都会帮你处理,例如:
````md
```html
<div class="footer">
&copy; 2004 Foo Corporation
</div>
```
````
会被转换为:
```html
<pre>
<code>&lt;div class="footer"&gt;
&amp;copy; 2004 Foo Corporation
&lt;/div&gt;</code>
</pre>
```
代码块中,一般的 Markdown 语法不会被转换,像是星号便只是星号,这表示你可以很容易地以 Markdown 语法撰写 Markdown 语法相关的文件。
如果你想要在代码块里输入用 Markdown 表示的代码库,你可以进行嵌套。
`````md
````md
```js
const a = 1
```
````
`````
会渲染为
````md
```js
const a = 1
```
````
### 分隔线
你可以在一行中用三个或以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号中间插入空白。下面每种写法都可以建立分隔线:
```html
---(建议) * * * *** ***** - - - ---------------------------------------
```
## 行内元素
### 链接
Markdown 支持两种形式的链接语法: *行内*和*参考*两种形式。
不管是哪一种,链接的文字都是用 `[方括号]` 来标记。
要建立一个行内形式的链接,只要在方块括号后面马上接着括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如:
```html
This is [an example](http://example.com/ "Title") inline link. [This
link](http://example.net/) has no title attribute.
```
会产生:
```html
<p>
This is <a href="http://example.com/" title="Title"> an example</a> inline
link.
</p>
<p><a href="http://example.net/">This link</a> has no title attribute.</p>
```
如果你是要链接到同样主机的资源,你可以使用相对路径:
```md
See my [About](/about/) page for details.
```
参考形式的链接使用另外一个方括号接在链接文字的括号后面,而在第二个方括号里面要填入用以辨识链接的标签:
```md
This is [an example][id] reference-style link.
```
接着,在文件的任意处,你可以把这个标签的链接内容定义出来:
```md
[id]: http://example.com/ "Optional Title Here"
```
链接定义的形式为:
* 方括号,输入链接的标识 ID
* 冒号
* 一个以上的空白或 tab
* 链接的网址
* 选择性地添加 title 内容,可以用单引号、双引号或是括号包括
下面这三种链接的定义相同:
```md
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ "Optional Title Here"
```
**请注意:** 有一个已知的问题是 Markdown.pl 1.0.1 会忽略单引号包起来的链接 title。
链接网址也可以用方括号包起来:
```md
[id]: http://example.com/ "Optional Title Here"
```
你也可以把 title 属性放到下一行,也可以加一些缩进,网址太长的话,这样会比较好看:
```md
[id]: http://example.com/longish/path/to/resource/here "Optional Title Here"
```
网址定义只有在产生链接的时候用到,并不会直接出现在文件之中。
链接辨识标签可以有字母、数字、空白和标点符号,但是并**不**区分大小写,因此下面两个链接是一样的:
```md
[link text][a]
[link text][a]
```
*预设的链接标签*功能让你可以省略指定链接标签,这种情形下,链接标签和链接文字会视为相同,要用预设链接标签只要在链接文字后面加上一个空的方括号,如果你要让 "Google" 链接到 google.com你可以简化成:
```md
[Google][]
```
然后定义链接内容:
```md
[google]: http://google.com/
```
由于链接文字可能包含空白,所以这种简化的标签内也可以包含多个文字:
```md
Visit [Daring Fireball][] for more information.
```
然后接着定义链接:
```md
[daring fireball]: http://daringfireball.net/
```
链接的定义可以放在文件中的任何一个地方,我比较偏好直接放在链接出现段落的后面,你也可以把它放在文件最后面,就像是注解一样。
下面是一个参考式链接的范例:
```md
I get 10 times more traffic from [Google][1] than from
[Yahoo][2] or [MSN][3].
[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"
```
如果改成用链接名称的方式写:
```md
I get 10 times more traffic from [Google][] than from
[Yahoo][] or [MSN][].
[google]: http://google.com/ "Google"
[yahoo]: http://search.yahoo.com/ "Yahoo Search"
[msn]: http://search.msn.com/ "MSN Search"
```
上面两种写法都会产生下面的 HTML。
```html
<p>
I get 10 times more traffic from
<a href="http://google.com/" title="Google">Google</a> than from
<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.
</p>
```
下面是用行内形式写的同样一段内容的 Markdown 文件,提供作为比较之用:
```md
I get 10 times more traffic from [Google](http://google.com/ "Google")
than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
[MSN](http://search.msn.com/ "MSN Search").
```
参考式的链接其实重点不在于它比较好写,而是它比较好读,比较一下上面的范例,使用参考式的文章本身只有 81 个字元,但是用行内形式的链接却会增加到 176 个字元,如果是用纯 HTML 格式来写,会有 234 个字元,在 HTML 格式中,标签比文字还要多。
使用 Markdown 的参考式链接,可以让文件更像是浏览器最后产生的结果,让你可以把一些标记相关的资讯移到段落文字之外,你就可以增加链接而不让文章的阅读感觉被打断。
### 强调
Markdown 使用星号 (`*`) 和底线 (`_`) 作为标记强调字词的符号,被 `*``_` 包围的字词会被转成用 `<em>` 标签包围,用两个 `*``_` 包起来的话,则会被转成 `<strong>`,例如:
```md
**double asterisks** (建议)
**double underscores** (建议)
_single asterisks_
_single underscores_
```
会转成:
```html
<em>single asterisks</em>
<em>single underscores</em>
<strong>double asterisks</strong>
<strong>double underscores</strong>
```
你可以随便用你喜欢的样式,唯一的限制是,你用什么符号开启标签,就要用什么符号结束。
强调也可以直接插在文字中间:
```md
un*frigging*believable
```
但是如果你的 `*``_` 两边都有空白的话,它们就只会被当成普通的符号。
如果要在文字前后直接插入普通的星号或底线,你可以用反斜线:
```md
\*this text is surrounded by literal asterisks\*
```
### 代码
如果要标记一小段行内代码,你可以用反引号把它包起来 (`` ` ``) ,例如:
```md
Use the `printf()` function.
```
会产生:
```md
<p>Use the <code>printf()</code> function.</p>
```
如果要在代码内插入反引号,你可以用多个反引号来开启和结束行内代码:
```md
``There is a literal backtick (`) here.``
```
这段语法会产生:
```html
<p><code>There is a literal backtick (`) here.</code></p>
```
代码码区段的起始和结束端都可以放入一个空白,起始端后面一个,结束端前面一个,这样你就可以在区段的一开始就插入反引号:
```md
A single backtick in a code span: `` ` ``
A backtick-delimited string in a code span: `` `foo` ``
```
会产生:
```html
<p>A single backtick in a code span: <code>`</code></p>
<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
```
在代码码区段内,`&` 和方括号都会被转成 HTML 实体,这样会比较容易插入 HTML 原始码Markdown 会把下面这段:
```md
Please don't use any `<blink>` tags.
```
转为:
```html
<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
```
你也可以这样写:
```md
`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
```
以产生:
```html
<p>
<code>&amp;#8212;</code> is the decimal-encoded equivalent of
<code>&amp;mdash;</code>.
</p>
```
### 图片
很明显地,要在纯文字应用中设计一个「自然」的语法来插入图片是有一定难度的。
Markdown 使用一种和链接很相似的语法来标记图片,同样也允许两种样式: *行内**参考*
行内图片的语法看起来像是:
```md
![Alt text](/path/to/img.jpg)
![Alt text](/path/to/img.jpg "Optional title")
```
详细叙述如下:
* 一个惊叹号 `!`
* 一个方括号,里面放上图片的替代文字
* 一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上
选择性的 title 文字。
参考式的图片语法则长得像这样:
```md
![Alt text][id]
```
「id」是图片参考的名称图片参考的定义方式则和链接参考一样:
```md
[id]: url/to/image "Optional title attribute"
```
到目前为止, Markdown 还没有办法指定图片的宽高,如果你需要的话,你可以使用普通的 `<img>` 标签。
### 其他文本样式
* 删除:`~~delete~~`
* 段落: 段落之间空一行
* 换行符: 一行结束时输入两个空格
***
## 其它
### 自动链接
Markdown 支持比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来, Markdown 就会自动把它转成链接,链接的文字就和链接位置一样,例如:
```md
<http://example.com/>
```
Markdown 会转为:
```html
<a href="http://example.com/">http://example.com/</a>
```
自动的邮件链接也很类似,只是 Markdown 会先做一个编码转换的过程,把文字字元转成 16 进位码的 HTML 实体,这样的格式可以混淆一些不好的信箱地址收集机器人,例如:
```md
<address@example.com>
```
Markdown 会转成:
```html
<a
href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;"
>&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a
>
```
在浏览器里面,这段字串会变成一个可以点击的 <address@example.com> 链接。
(这种作法虽然可以混淆不少的机器人,但并无法全部挡下来,不过这样也比什么都不做好些。无论如何,公开你的信箱终究会引来广告信件的。)
### 转义字符
Markdown 可以利用反斜线来插入一些在语法中有其它意义的符号,例如: 如果你想要用星号加在文字旁边的方式来做出强调效果 (但不用 `<em>` 标签) ,你可以在星号的前面加上反斜线:
```md
\*literal asterisks\*
```
Markdown 支持在下面这些符号前面加上反斜线来帮助插入普通的符号:
* `\` 反斜线
* `` ` `` 反引号
* `*` 星号
* `_` 底线
* `{}` 大括号
* `[]` 方括号
* `()` 括号
* `#` 井字号
* `+` 加号
* `-` 减号
* `.` 英文句点
* `!` 惊叹号
## 快捷键
| 输出后的效果 | Markdown | 快捷键 |
| ------------- | ---------- | -------------- |
| **Bold** | `**text**` | Ctrl/⌘ + B |
| *Emphasize* | `*text*` | Ctrl/⌘ + I |
| `Inline Code` | \`code\` | 选中后 `` ` `` |
## 表格
| 居中 | 右对齐 | 左对齐 |
| :-----------: | -------------: | :------------- |
| 居中使用`:-:` | 右对齐使用`-:` | 左对齐使用`:-` |
| b | aaaaaaaaa | aaaa |
| c | aaaa | a |
[1]: http://docutils.sourceforge.net/mirror/setext.html
[2]: http://www.aaronsw.com/2002/atx/
[3]: http://textism.com/tools/textile/
[4]: http://docutils.sourceforge.net/rst.html
[5]: http://www.triptico.com/software/grutatxt.html
[6]: http://ettext.taint.org/doc/
[bq]: #blockquotes
[l]: #列表

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

32
article/r532eavn/index.md Normal file
View File

@ -0,0 +1,32 @@
---
url: /article/r532eavn/index.md
---
当前版本包含了一些破坏性的更新,因此做一些说明。
## vuepress-plugin-md-enhance 插件迁移
在 [1.0.0-rc.103](./102-103.md#vuepress-plugin-md-enhance-插件迁移) 版本中,
主题完成了一部分功能到 vuepress 官方插件的迁移工作。但依然还有部分功能尚未完成。
在当前版本更新中,主题对这项工作进行了新的推进,将 `markdownEnhance.include` 功能迁移到了
[`@vuepress/plugin-markdown-include`](https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-include.html) 插件。
因此,与之关联的配置项 `plugins.markdownEnhance.include` 将被移除,并迁移到 `plugins.markdownInclude` 进行配置。
**如果你有自定义配置,请注意需要进行迁移。**
## 功能修复
### @vuepress/plugin-git
`1.0.0-rc.119` 版本中,我重构了 [@vuepress/plugin-git](https://ecosystem.vuejs.press/zh/plugins/development/git.html) ,使插件能够获得更多的 git 信息,如 每个文件的 创建时间,最后修改时间,作者、提交历史记录等。
但与此同时也引入了新的 bug该 bug 会导致在 私有 git 托管服务中进行构建时,在不能自动获取 贡献者头像使用 sha256
自动生成临时头像时会导致构建失败。
[#334](https://github.com/pengzhanbo/vuepress-theme-plume/issues/334),
[#349](https://github.com/pengzhanbo/vuepress-theme-plume/issues/349) )
另外的一个 隐性问题是,如果项目的提交记录过多,拥有数千条以上的记录时,由于读取的 git log 过多会导致内存占用过高。
可能会导致构建时间过长甚至失败。
我在 [vuepress/ecosystem#292](https://github.com/vuepress/ecosystem/pull/292) 修复了相关问题,并在
主题 `1.0.0-rc.120` 版本中进行了修复。

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
---
url: /article/xld23tu1/index.md
---
这是一篇 示例文章。
无内容。

File diff suppressed because one or more lines are too long

78
article/yw0dmwcm/index.md Normal file
View File

@ -0,0 +1,78 @@
---
url: /article/yw0dmwcm/index.md
---
**在本次更新中,主题移除了 `vuepress-plugin-md-enhance` 插件。**
由该插件提供支持的 图表 `Chartjs` `ECharts` `mermaid` `flowchart` `plantuml` 功能,迁移到
`@vuepress/plugin-markdown-chart` 插件。
因此主题也同步完成了插件的迁移。
至此,在主题中,由 `vuepress-plugin-md-enhance` 插件提供的相关功能,已全部迁移至官方 `vuepress/ecosystem`
仓库的相关插件。因此主题将从 `1.0.0-rc.154` 开始,安全的移除 `vuepress-plugin-md-enhance` 插件。
受此影响,如果你在 `.vuepress/client.ts` 中,有使用从 `vuepress-plugin-md-enhance` 导入的功能:
```ts title=".vuepress/client.ts"
import { defineMermaidConfig } from 'vuepress-plugin-md-enhance/client'
defineMermaidConfig({
theme: 'dark'
})
```
需要进行修改:
```ts title=".vuepress/client.ts"
import { defineMermaidConfig } from '@vuepress/plugin-markdown-chart/client' // [!code ++]
import { defineMermaidConfig } from 'vuepress-plugin-md-enhance/client' // [!code --]
defineMermaidConfig({
theme: 'dark'
})
```
如果您有在 `.vuepress/config.ts` 的主题配置中,使用 `plugins.mdEnhance` 配置,需要进行修改:
```ts title=".vuepress/config.ts"
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
plugins: {
mdEnhance: {
mermaid: true,
chartjs: true,
// ...
}
}
})
})
```
需要进行修改:
```ts title=".vuepress/config.ts"
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
plugins: {
mdEnhance: { // [!code --:5]
mermaid: true,
chartjs: true,
// ...
}
},
markdown: { // [!code ++:5]
mermaid: true,
chartjs: true,
// ...
}
})
})
```
**如果您在使用过程中遇到问题,请在 [GitHub Issue](https://github.com/pengzhanbo/vuepress-theme-plume/issues) 上反馈。**

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
assets/120-CZxdU1M_.js Normal file

File diff suppressed because one or more lines are too long

14
assets/144-D_eNboTz.js Normal file
View File

@ -0,0 +1,14 @@
import{P as e,f as t,h as n}from"./runtime-core.esm-bundler-CZvn3YaB.js";import{t as r}from"./plugin-vue_export-helper-CxTVcLa7.js";var i=JSON.parse(`{"path":"/article/f1khd14n/","title":"1.0.0-rc.144 更新说明 | 博客","lang":"zh-CN","frontmatter":{"title":"1.0.0-rc.144 更新说明","createTime":"2025/04/28 11:33:49","permalink":"/article/f1khd14n/","tags":["破坏性更新"],"description":"当前版本包含了破坏性的更新。 Breaking Changes 移除 node18 支持 主题从 1.0.0-rc.144 开始,不再支持 node18 。最低支持的 node 版本为 20.6.0 。 图标语法 在 主题 1.0.0-rc.144 版本之前,图标语法如下: 该语法支持所有的 iconify 图标,然而该语法存在一些问题: 书写体验不友...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"1.0.0-rc.144 更新说明\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2025-10-07T15:13:09.000Z\\",\\"author\\":[]}"],["meta",{"property":"og:url","content":"https://theme-plume.vuejs.press/article/f1khd14n/"}],["meta",{"property":"og:site_name","content":"Plume 主题"}],["meta",{"property":"og:title","content":"1.0.0-rc.144 更新说明"}],["meta",{"property":"og:description","content":"当前版本包含了破坏性的更新。 Breaking Changes 移除 node18 支持 主题从 1.0.0-rc.144 开始,不再支持 node18 。最低支持的 node 版本为 20.6.0 。 图标语法 在 主题 1.0.0-rc.144 版本之前,图标语法如下: 该语法支持所有的 iconify 图标,然而该语法存在一些问题: 书写体验不友..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2025-10-07T15:13:09.000Z"}],["meta",{"property":"article:tag","content":"破坏性更新"}],["meta",{"property":"article:modified_time","content":"2025-10-07T15:13:09.000Z"}]]},"readingTime":{"minutes":2.04,"words":611},"git":{"createdTime":1745833395000,"updatedTime":1759849989000,"contributors":[{"name":"pengzhanbo","username":"pengzhanbo","email":"volodymyr@foxmail.com","commits":3,"avatar":"https://avatars.githubusercontent.com/pengzhanbo?v=4","url":"https://github.com/pengzhanbo"}],"changelog":[{"hash":"4d2361a7046214fe0f4e4af01831107fd00e38ad","time":1759849989000,"email":"volodymyr@foxmail.com","author":"pengzhanbo","message":"feat(theme)!: add collections support (#704)"},{"hash":"338334f4796d04801b3175fbd633128905b73ce5","time":1750330126000,"email":"volodymyr@foxmail.com","author":"pengzhanbo","message":"feat!: use new chart plugin and remove md-enhance (#621)"},{"hash":"a446a86dbfd26a834acb74217c9f14f3cf103960","time":1745833395000,"email":"volodymyr@foxmail.com","author":"pengzhanbo","message":"docs: add version update blog"}]},"autoDesc":true,"filePathRelative":"blog/3.更新说明/144.md","headers":[],"categoryList":[{"id":"7a3973","sort":3,"name":"更新说明"}],"bulletin":false}`),a={name:`144.md`};function o(r,i,a,o,s,c){return e(),t(`div`,null,[...i[0]||=[n(`<div class="hint-container warning"><p class="hint-container-title">当前版本包含了破坏性的更新。</p></div><h2 id="breaking-changes" tabindex="-1"><a class="header-anchor" href="#breaking-changes"><span>Breaking Changes</span></a></h2><h3 id="移除-node18-支持" tabindex="-1"><a class="header-anchor" href="#移除-node18-支持"><span>移除 <code>node18</code> 支持</span></a></h3><p>主题从 <code>1.0.0-rc.144</code> 开始,不再支持 <code>node18</code> 。最低支持的 node 版本为 <code>20.6.0</code> 。</p><h3 id="图标语法" tabindex="-1"><a class="header-anchor" href="#图标语法"><span>图标语法</span></a></h3><p>在 主题 <code>1.0.0-rc.144</code> 版本之前,图标语法如下:</p><div class="language-md" data-highlighter="shiki" data-ext="md" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-md"><span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">collect:name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">:</span></span>
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">:[collect:name size/color]:</span></span></code></pre></div><p> <code>iconify</code> </p><ul><li><p> <code>:[</code> <code>]:</code> </p></li><li><p><code>size/color</code> </p><p>使 <code>rgb(34 12 64 / 60%)</code> <code>hsl(30 100% 50% / 60%)</code><code>hwb(90 10% 10% / 0.5)</code> <code>/</code> <code>/</code> <code>size</code></p></li><li><p> <code>iconify</code> <code>iconfont</code> / <code>fontawesome</code> / <code>lucide</code> </p></li></ul><p><strong></strong></p><div class="language-md" data-highlighter="shiki" data-ext="md" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-md"><span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">::collect:name::</span></span>
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">::collect:name =size /color::</span></span></code></pre></div><ul><li> <code>:[</code> <code>]:</code> <code>::</code></li><li><code>=size</code> <code>/color</code> 使 <code>size</code> <code>color</code></li></ul><div class="hint-container info"><p class="hint-container-title"></p><p> <code>iconify</code> <code>iconfont</code> / <code>fontawesome</code> / <code>lucide</code> </p></div><div class="hint-container warning"><p class="hint-container-title"></p><p>便 </p></div><h3 id="-file-tree-" tabindex="-1"><a class="header-anchor" href="#-file-tree-"><span> <code>file-tree</code> </span></a></h3><p> <code>file-tree</code> markdown-it 使</p><p></p><h2 id="" tabindex="-1"><a class="header-anchor" href="#"><span></span></a></h2><h3 id="" tabindex="-1"><a class="header-anchor" href="#"><span></span></a></h3><p> <code>themeConfig</code> <code>copyright</code> <code>author</code> <code>creation</code> </p><ul><li><code>author</code> </li><li><code>creation</code> </li></ul><div class="language-ts line-numbers-mode" data-highlighter="shiki" data-ext="ts" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark has-diff vp-code"><code class="language-ts"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> defineUserConfig</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> from</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">vuepress</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> plumeTheme</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> from</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">vuepress-theme-plume</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">export</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> default</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> defineUserConfig</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">({</span></span>
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> theme</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">: </span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">plumeTheme</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">({</span></span>
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> copyright</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">: {</span></span>
<span class="line diff add"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> author</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">: </span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">pengzhanbo</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">, </span></span>
<span class="line diff add"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> creation</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">: </span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">original</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> license</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">: </span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">MIT</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> })</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">})</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,22)]])}var s=r(a,[[`render`,o]]);export{i as _pageData,s as default};

41
assets/154-DI06TTZR.js Normal file

File diff suppressed because one or more lines are too long

98
assets/165-Bm1EjQme.js Normal file

File diff suppressed because one or more lines are too long

98
assets/165-CBdh2Ylc.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
var e=`˜Pt <Ë\bÃh¨üwPcz]Ô6*­v‹ŸRS¢‡Œ­E`;export{e as default};

View File

@ -0,0 +1 @@
import{P as e,f as t,l as n}from"./runtime-core.esm-bundler-CZvn3YaB.js";import{t as r}from"./plugin-vue_export-helper-CxTVcLa7.js";var i=JSON.parse(`{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound","description":"404 Not Found","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\",\\"description\\":\\"404 Not Found\\"}"],["meta",{"property":"og:url","content":"https://theme-plume.vuejs.press/404.html"}],["meta",{"property":"og:site_name","content":"Plume 主题"}],["meta",{"property":"og:description","content":"404 Not Found"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"zh-CN"}]]},"readingTime":{"minutes":0.01,"words":3},"git":{},"autoDesc":true,"filePathRelative":null,"headers":[],"bulletin":false}`),a={name:`404.html.vue`};function o(r,i,a,o,s,c){return e(),t(`div`,null,[...i[0]||=[n(`p`,null,`404 Not Found`,-1)]])}var s=r(a,[[`render`,o]]);export{i as _pageData,s as default};

View File

@ -0,0 +1 @@
var e=`•_¬ÝH:\x07ӟäš&má´??¿tåéƒ}ÿLQøáò&Ž\x07V2²\x1Bוn\vl`;export{e as default};

View File

@ -0,0 +1 @@
var e="l‚›Â~\\™ÒeøèOzÀŸ9Ê÷ÙxéŸYÒ'${";export{e as default};

48
assets/73-77-CHAzzHE8.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{It as e,P as t,f as n,l as r,y as i,zt as a}from"./runtime-core.esm-bundler-CZvn3YaB.js";var o=[`data-title`],s=[`data-lang`],c={class:`shiki shiki-themes vitesse-light vitesse-dark vp-code`},l=i({__name:`CodeViewer`,props:{content:{},lang:{}},setup(i){return(l,u)=>(t(),n(`div`,{class:e(`code-viewer language-${i.lang}`),"data-title":i.lang},[r(`button`,{class:`copy`,"data-lang":i.lang,title:`Copy code`,"data-copied":`已复制`},null,8,s),r(`pre`,c,[r(`code`,null,a(i.content),1)])],10,o))}});export{l as t};

1
assets/Demos-BEiVBu0N.js Normal file
View File

@ -0,0 +1 @@
import{P as e,R as t,Rt as n,d as r,f as i,i as a,l as o,y as s,zt as c}from"./runtime-core.esm-bundler-CZvn3YaB.js";import{t as l}from"./plugin-vue_export-helper-CxTVcLa7.js";var u={class:`demos`},d={class:`demo-img`},f=[`href`],p=[`src`,`alt`],m={class:`demo-content`},h={class:`demo-title`},g={class:`title`},_=[`href`,`aria-label`,`title`],v=[`href`,`aria-label`],y=[`title`],b=l(s({__name:`Demos`,props:{list:{}},setup(s){return(l,b)=>(e(),i(`div`,u,[(e(!0),i(a,null,t(s.list,t=>(e(),i(`div`,{key:t.url,class:`demo-item`},[o(`div`,d,[o(`a`,{href:t.url,target:`_blank`,rel:`noopener noreferrer`},[o(`img`,{src:t.preview,alt:t.name,loading:`lazy`},null,8,p)],8,f)]),o(`div`,m,[o(`h3`,h,[t.logo?(e(),i(`span`,{key:0,class:`logo`,style:n(`background-image: url(${t.logo})`)},null,4)):r(``,!0),o(`span`,g,[o(`a`,{href:t.url,target:`_blank`,rel:`noopener noreferrer`,"aria-label":t.name,title:t.name},c(t.name),9,_)]),t.repo?(e(),i(`a`,{key:1,href:t.repo,class:`github`,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Link to GitHub: ${t.name}`},[...b[0]||=[o(`span`,{class:`vpi-simple-icons-github`},null,-1)]],8,v)):r(``,!0)]),o(`p`,{title:t.desc},c(t.desc),9,y)])]))),128))]))}}),[[`__scopeId`,`data-v-bdcce604`]]);export{b as t};

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More