Skip to content

vitePress 插件 ​

markdown扩展 ​

Markdown 扩展 / VitePress

图片放大预览 ​

安装依赖 ​

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}
$$

行内公式: Fx=zy+2xyF_x =\frac{z}{y} + 2x^y

块级公式:

Fx=∂∂x(e−xy)=e−xy⋅(−y)=−ye−xyF_x = \frac{\partial}{\partial x}(e^{-xy}) = e^{-xy} \cdot (-y) = -y e^{-xy}

数学符号 ​

描述KaTeX 代码渲染效果(示例)
分数\frac{z}{y}zy\frac{z}{y}
指数e^{-xy}e−xye^{-xy}
下标a_baba_b
加减a + b - ca+b−ca + b - c
正负号a \pm b \mp ca±b∓ca \pm b \mp c
乘a \times ba×ba \times b
点乘a \cdot ba⋅ba \cdot b
开方\sqrt{x}、\sqrt[n]{x}x\sqrt{x} 、xn\sqrt[n]{x}
求和\sum_{i=1}^{n}∑i=1n\sum_{i=1}^{n}
极限\lim_{x \to \infty}lim⁡x→∞\lim_{x \to \infty}
矢量\vec{v}v⃗\vec{v}
矩阵\begin{vmatrix} a & b \\ c & d \end{vmatrix}
pmatrix圆括号、bmatrix方括号、Bmatrix大括号、vmatrix单竖线、Vmatrix双竖线
∣abcd∣\begin{vmatrix} a & b \\ c & d \end{vmatrix}
括号\left( \frac{a}{b} \right)(ab)\left( \frac{a}{b} \right)
绝对值|x|∣x∣|x|
积分\int_{a}^{b}、\iint 、\iiint∫ab\int_{a}^{b}、∬\iint 、∭\iiint
环路积分\oint、\oiint、\oiiint∮\oint、\oiint\oiint、\oiiint\oiiint
分段函数f(x) = \begin{cases} x^2, & x < 0 \\ x , & x \geq 0\end{cases}f(x)={x2,x<0x,x≥0f(x) = \begin{cases} x^2, & x < 0 \\ x , & x \geq 0\end{cases}
垂直、平行a \perp b、a \parallel ba⊥ba \perp b、a∥ba \parallel b
对称差a \oplus ba⊕ba \oplus b

希腊字母 ​

字母KaTeX 代码渲染
α\alphaα\alpha
β\betaβ\beta
γ\gammaγ\gamma
δ\deltaδ\delta
δ\DeltaΔ\Delta
ε\epsilonϵ\epsilon
ζ\zetaζ\zeta
η\etaη\eta
θ\thetaθ\theta
ι\iotaι\iota
κ\kappaκ\kappa
λ\lambdaλ\lambda
μ\muμ\mu
ν\nuν\nu
ξ\xiξ\xi
ο\omicronο\omicron
π\piπ\pi
ρ\rhoρ\rho
σ\sigmaσ\sigma
τ\tauτ\tau
υ\upsilonυ\upsilon
φ\phiϕ\phi
χ\chiχ\chi
ψ\psiψ\psi
ω\omegaω\omega
Ω\OmegaΩ\Omega

不等号 ​

不等号LaTeX 表达式渲染效果
不等于\neq 或 \nea≠ba \neq b
大于>a>ba > b
小于<a<ba < b
大于等于\geq 或 \gea≥ba \geq b
小于等于\leq 或 \lea≤ba \leq b
远大于\gga≫ba \gg b
远小于\lla≪ba \ll b
不小于\not\geqa≱ba \not\geq b
不大于\not\leqa≰ba \not\leq b
约等于\approx 或 \simeqa≈ba \approx b

逻辑符号 ​

描述表达式渲染效果
等价于A \leftrightarrow B、A \iff B、A \Rightarrow B、A \Leftarrow BA↔BA \leftrightarrow B、A  ⟺  BA \iff B、
A⇒BA \Rightarrow B、A⇐BA \Leftarrow B
蕴含A \rightarrow BA→BA \rightarrow B
可推导出B \vdash AB⊢AB \vdash A
语义蕴含M \models AM⊨AM \models A
逻辑且、或A \land B、A \lor BA∧BA \land B、A∨BA \lor B
非\neg A 或 \lnot A¬A\neg A、¬A\lnot A
属于a \in b、a \notin ba∈ba \in b、a∉ba \notin b
包含a \subseteq b、a \not\subseteq b、a \supseteq b、a \not\supseteq ba⊆ba \subseteq b、a⊈ba \not\subseteq b
a⊇ba \supseteq b、a⊉ba \not\supseteq b
全称量词\forall x ∀x\forall x
存在量词\exists x∃x\exists x
空集\varnothing∅\varnothing
函数复合(圆)\circ、\bigcirc、\bullet、\text{\textcircled{1}}、\oplus∘\circ、◯\bigcirc、∙\bullet、5◯\text{\textcircled{5}}、⊕\oplus
映射\mapsto、\longmapsto、\hookrightarrow、\hookleftarrow↦\mapsto、⟼\longmapsto、↪\hookrightarrow、↩\hookleftarrow
等价a \sim ba∼ba \sim b
偏序a \preceq ba⪯ba \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

打包优化 ​

By Modify.

选择字体进行切换