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{matrix} a & b \\ c & d \end{matrix} | |
括号 | \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} |
希腊字母
字母 | 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 | 、 |
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="mermaidCode"/>
</template>
<script setup>
const mermaidCode = `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(极小值)`;
</script>
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