Hugo增加mermaid支持

目录

hugo增加mermaid绘图支持

hugo增加自定义功能的方式

customjs

  1. 在config.toml中增加配置

    custom_css = ["css/custom.css"]
    custom_js = ["js/custom.js"]
    
  2. 在模版中以如下方式使用:

    // css
    {{ range .Site.Params.custom_css -}}
        <link rel="stylesheet" href="{{ . | absURL }}">
    {{- end }}
    
    // javascript
    {{ range .Site.Params.custom_js -}}
        <script type="text/javascript" src="{{ . | absURL }}"></script>
    {{- end }}
    
  3. 添加相应自定义文件到指定位置

    static/css/custom.css
    static/js/custom.js
    

template overwrite(推荐)

利用hugo模版覆盖机制:project layout下的同名模版覆盖theme layout模版

拷贝

hugo -> themes -> actual-theme -> layouts -> partials -> xxx.html

hugo -> layouts -> partials -> xxx.html

然后增加需要的功能

增加mermaid支持

采用template overwrite机制可以在不修改主题的情况下增加功能模块

Mainroad主题为例,增加mermaid绘图支持

  1. 经分析在mathjax.html模块中增加功能最为合适

  2. 拷贝themes/mainroad/layouts/partials/mathjax.htmllayouts/partials/mathjax.html

  3. 增加以下代码新增mermaid支持,实现支持通过参数控制功能模块的启用与否,实现按需载入

    {{ if and .IsPage (eq (.Param "mermaid") true) }}
    <script type="module">
        import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
        mermaidAPI.initialize({
            securityLevel: 'loose',
            theme: 'forest',
        });
    </script>
    <script>
        // Replace mermaid pre.code to div
        Array.from(document.getElementsByClassName("language-mermaid")).forEach(
            (el) => {
                el.parentElement.outerHTML = `<div class="mermaid">${el.innerText}</div>`;
            }
        );
    </script>
    <style>
        /* Set svg to center */
        .mermaid svg {
            display: block;
            margin: auto;
        }
    </style>
    {{ end }}
    
  4. 在文章的Front Matter部分增加mermaid: true参数配置即可在该文章中启动mermaid绘图支持

  5. 在文章中使用mermaid语言代码块编写mermaid支持的语法即可实现运行时渲染图像

参考资料

hugo支持绘图

hugo theme configuration

Hugo Add Customized CSS or Javascript

mermaid.live