vitePress 插件
markdown扩展
图片放大预览
安装依赖
bash
npm i markdown-it-custom-attrs插件配置
在vitePress的config.js中引入插件并且进行配置
js
import mdItCustomAttrs from 'markdown-it-custom-attrs';
export default {
markdown: {
config: (md) => {
md.use(mdItCustomAttrs, 'image', {
'data-fancybox': 'gallery'
});
}
}
};引入灯箱css和js资源
要么用 CDN 引入,要么在项目中安装
js
export default {
head: [
// ["link", {rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css"}],
// ["script", {src: "https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"}],
["link", {rel: "stylesheet", href: "./static-plugin/fancybox.css"}],
["script", {src: "./static-plugin/fancybox.umd.js"}],
],
}直接使用
html
<image src="./image/add_glb_model.png" data-fancybox="gallery"/>数学公式的使用
安装插件
bash
npm install katex @iktakahiro/markdown-it-katex使用插件及配置
js
import markdownItKatex from '@iktakahiro/markdown-it-katex';
export default {
markdown: {
config: (md) => {
md.use(markdownItKatex);
}
},
head: [
// 引入 KaTeX 样式
['link', {
rel: 'stylesheet',
href: 'https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css',
crossorigin: 'anonymous'
}]
]
};使用数学公式
text
行内公式: $F_x =\frac{z}{y} + 2x^y$
块级公式:
$$
F_x = \frac{\partial}{\partial x}(e^{-xy}) = e^{-xy} \cdot (-y) = -y e^{-xy}
$$行内公式:
块级公式:
数学符号
| 描述 | KaTeX 代码 | 渲染效果(示例) |
|---|---|---|
| 分数 | \frac{z}{y} | |
| 指数 | e^{-xy} | |
| 下标 | a_b | |
| 加减 | a + b - c | |
| 正负号 | a \pm b \mp c | |
| 乘 | a \times b | |
| 点乘 | a \cdot b | |
| 开方 | \sqrt{x}、\sqrt[n]{x} | 、 |
| 求和 | \sum_{i=1}^{n} | |
| 极限 | \lim_{x \to \infty} | |
| 矢量 | \vec{v} | |
| 矩阵 | \begin{vmatrix} a & b \\ c & d \end{vmatrix}pmatrix圆括号、bmatrix方括号、Bmatrix大括号、vmatrix单竖线、Vmatrix双竖线 | |
| 括号 | \left( \frac{a}{b} \right) | |
| 绝对值 | |x| | |
| 积分 | \int_{a}^{b}、\iint 、\iiint | 、 、 |
| 环路积分 | \oint、\oiint、\oiiint | 、、 |
| 分段函数 | f(x) = \begin{cases} x^2, & x < 0 \\ x , & x \geq 0\end{cases} | |
| 垂直、平行 | a \perp b、a \parallel b | 、 |
| 对称差 | a \oplus b |
希腊字母
| 字母 | KaTeX 代码 | 渲染 |
|---|---|---|
| α | \alpha | |
| β | \beta | |
| γ | \gamma | |
| δ | \delta | |
| δ | \Delta | |
| ε | \epsilon | |
| ζ | \zeta | |
| η | \eta | |
| θ | \theta | |
| ι | \iota | |
| κ | \kappa | |
| λ | \lambda | |
| μ | \mu | |
| ν | \nu | |
| ξ | \xi | |
| ο | \omicron | |
| π | \pi | |
| ρ | \rho | |
| σ | \sigma | |
| τ | \tau | |
| υ | \upsilon | |
| φ | \phi | |
| χ | \chi | |
| ψ | \psi | |
| ω | \omega | |
| Ω | \Omega |
不等号
| 不等号 | LaTeX 表达式 | 渲染效果 |
|---|---|---|
| 不等于 | \neq 或 \ne | |
| 大于 | > | |
| 小于 | < | |
| 大于等于 | \geq 或 \ge | |
| 小于等于 | \leq 或 \le | |
| 远大于 | \gg | |
| 远小于 | \ll | |
| 不小于 | \not\geq | |
| 不大于 | \not\leq |
逻辑符号
| 描述 | 表达式 | 渲染效果 |
|---|---|---|
| 等价于 | A \leftrightarrow B、A \iff B、A \Rightarrow B、A \Leftarrow B | 、、 、 |
| 蕴含 | A \rightarrow B | |
| 可推导出 | B \vdash A | |
| 语义蕴含 | M \models A | |
| 逻辑且、或 | A \land B、A \lor B | 、 |
| 非 | \neg A 或 \lnot A | 、 |
| 属于 | a \in b、a \notin b | 、 |
| 包含 | a \subseteq b、a \not\subseteq b、a \supseteq b、a \not\supseteq b | 、 、 |
| 全称量词 | \forall x | |
| 存在量词 | \exists x | |
| 空集 | \varnothing | |
| 函数复合(圆) | \circ、\bigcirc、\bullet、\text{\textcircled{1}}、\oplus | 、、、、 |
| 映射 | \mapsto、\longmapsto、\hookrightarrow、\hookleftarrow | 、、、 |
| 等价 | a \sim b | |
| 偏序 | a \preceq b |
mermaid支持
安装
bash
npm i mermaid组件封装
封装了这个mermaid组件之后,在vitepress的index.js文件中进行全局注册
vue
<template>
<div ref="container" class="mermaid-diagram">
</div>
</template>
<script lang="ts" setup>
import {onMounted, ref, watch} from 'vue';
import mermaid from 'mermaid';
// 启用 mermaid
mermaid.initialize({startOnLoad: false});
const props = defineProps<{
code: string
}>();
const container = ref<HTMLElement | null>(null);
const renderDiagram = async () => {
if (!container.value) return;
try {
// 清空容器内容
container.value.innerHTML = '';
// 使用 mermaid 将代码渲染为 SVG
const {svg} = await mermaid.render('graphDiv', props.code);
container.value.innerHTML = svg;
} catch (error) {
console.error('Mermaid 渲染失败:', error);
container.value.innerText = '流程图渲染失败,请检查代码格式。';
}
};
watch(() => props.code, renderDiagram);
onMounted(() => {
renderDiagram();
});
</script>
<style scoped>
.mermaid-diagram {
width: 100%;
overflow-x: auto;
}
.mermaid-diagram svg {
max-width: 100%;
height: auto;
}
</style>使用
vue
<template>
<MarkMermaid :code="`graph LR
A(求xy的一次偏导数) --> B(联立方程得解)
B --> C(求二阶偏导数)
C --> D(A=f_xx)
C --> E(B=f_xy)
C --> F(C=f_yy)
D --> G(△=B^2-AC)
E --> G
F --> G
G -- △>0 --> H(不是极值点)
G -- △ = 0 --> I(无法确定)
G -- △<0 --> J(存在极值点)
J -- A<0 --> K(极大值)
J -- A>0 --> L(极小值)`"></MarkMermaid>
</template>mermaid插件支持
找了一些插件用到项目当中都会报错,最后找到了这个插件vitepress-mermaid-renderer
安装与配置
先安装插件
bash
npm install vitepress-mermaid-renderer在theme/index.ts文件当中添加配置,之前的不变,这是这个插件要新增的
js
import {createMermaidRenderer} from 'vitepress-mermaid-renderer';
import 'vitepress-mermaid-renderer/dist/style.css';
export default {
enhanceApp({app, router}) {
const mermaidRenderer = createMermaidRenderer();
mermaidRenderer.initialize();
if (router) {
router.onAfterRouteChange = () => {
nextTick(() => mermaidRenderer.renderMermaidDiagrams());
};
}
}
};展示效果
mermaid
graph LR
A --> B
mermaid
graph TB
A --> B
B --> C
C --> A打包优化
- 图片压缩
- png转webp
