图表与可视化集成

Hugo 提供了多种方式来集成图表和可视化工具,让你的内容更加生动和易于理解。通过渲染钩子和 Shortcodes,你可以轻松地在 Markdown 内容中嵌入各种类型的图表。

渲染钩子实现的图表集成

Mermaid 图表集成

虽然 Hugo 没有内置的 Mermaid 渲染钩子,但可以通过自定义代码块渲染钩子来实现:

{{/* layouts/_default/_markup/render-codeblock-mermaid.html */}}
<div class="mermaid">
{{ .Inner | safeHTML }}
</div>
{{ .Page.Store.Set "hasMermaid" true }}

然后在基础模板中条件加载 Mermaid JavaScript 库:

{{ if .Store.Get "hasMermaid" }}
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>
{{ end }}

GoAT ASCII 图表

Hugo 内置支持 GoAT ASCII 图表,通过嵌入式代码块渲染钩子实现。你可以直接在 Markdown 中使用:

```goat
    ┌─────┐   ┌─────┐
    │     │   │     │
    │  A  ├──▶│  B  │
    │     │   │     │
    └─────┘   └─────┘
```

自定义图表类型

你可以为其他图表库创建类似的渲染钩子,例如 D3.js、Chart.js 等:

{{/* layouts/_default/_markup/render-codeblock-chartjs.html */}}
<canvas id="chart-{{ .Ordinal }}"></canvas>
<script>
// Chart.js 初始化代码
const data{{ .Ordinal }} = {{ .Inner | jsonify }};
// ... 图表渲染逻辑
</script>
{{ .Page.Store.Set "hasChartJS" true }}

数学公式渲染

通过启用 Goldmark 的 Passthrough 扩展,可以使用渲染钩子渲染数学公式:

{{/* layouts/_default/_markup/render-passthrough.html */}}
{{ if eq .Type "math" }}
  {{ .Inner | transform.ToMath }}
{{ end }}

配置文件中需要启用相应扩展:

markup:
  goldmark:
    extensions:
      passthrough:
        enable: true
        delimiters:
          block:
            - ['\[', '\]']
            - ['$$', '$$']
          inline:
            - ['\(', '\)']
            - ['$', '$']

图表性能优化

条件加载资源

使用 Page.Store 来记录页面使用的图表类型,然后条件加载相应的 JavaScript 库:

{{/* 在基础模板中 */}}
{{ if .Store.Get "hasMermaid" }}
  {{ $mermaid := resources.Get "js/mermaid.min.js" }}
  <script src="{{ $mermaid.Permalink }}"></script>
{{ end }}

{{ if .Store.Get "hasChartJS" }}
  {{ $chartjs := resources.Get "js/chart.min.js" }}
  <script src="{{ $chartjs.Permalink }}"></script>
{{ end }}

延迟加载

对于复杂的图表,可以考虑使用 Intersection Observer API 实现延迟加载,提高页面加载性能。

相关章节

关于渲染钩子的详细使用方法和技巧,请参见渲染钩子章节。

文章导航

章节内容

这是章节的内容页面。

章节概览