<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Mermaid on Tarragon</title><link>https://tarrragon.github.io/blog/tags/mermaid/</link><description>Recent content in Mermaid on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 28 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/mermaid/index.xml" rel="self" type="application/rss+xml"/><item><title>Mermaid gitGraph：自訂 commit type 顏色不渲染的配置補洞</title><link>https://tarrragon.github.io/blog/posts/mermaid_gitgraph_type_color_config/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/mermaid_gitgraph_type_color_config/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>背景&lt;/strong>：本文是「Hugo 部落格支援 Mermaid 流程圖完整實現指南」的補洞紀錄。原指南建立了 Mermaid 整合的基礎、但 gitGraph 的自訂 commit type 顏色設定沒包含進去、文章用到才發現渲染失效。&lt;/p>&lt;/blockquote>
&lt;h2 id="問題情境">問題情境&lt;/h2>
&lt;p>部落格用 Hugo + Mermaid 10.6.1 畫 gitGraph，文章裡寫了 &lt;code>type: HIGHLIGHT&lt;/code> 和 &lt;code>type: REVERSE&lt;/code> 想標出特定 commit、但渲染出來全部是預設灰色、type 標記沒生效。&lt;/p>





&lt;pre tabindex="0">&lt;code class="language-mermaid" data-lang="mermaid">gitGraph
 commit id: &amp;#34;A&amp;#34; type: HIGHLIGHT
 commit id: &amp;#34;C&amp;#34; type: REVERSE&lt;/code>&lt;/pre>&lt;p>期望：HIGHLIGHT 綠色、REVERSE 紅色
實際：兩個都跟普通 commit 一樣灰&lt;/p>
&lt;hr>
&lt;h2 id="根本原因">根本原因&lt;/h2>
&lt;p>&lt;code>layouts/partials/custom_head.html&lt;/code> 的 &lt;code>mermaid.initialize()&lt;/code> 裡 &lt;code>themeVariables&lt;/code> 只設了通用顏色（&lt;code>primaryColor&lt;/code>、&lt;code>secondaryColor&lt;/code> 等）、沒給 gitGraph 專用的顏色變數。Mermaid 找不到 HIGHLIGHT / REVERSE 對應的顏色就 fallback 到預設值。&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1">// 原本的配置（不完整）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">themeVariables&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="nx">primaryColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#2d3748&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="nx">primaryTextColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#2d3748&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="nx">primaryBorderColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#4a5568&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="nx">lineColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#4a5568&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="nx">secondaryColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#e2e8f0&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="nx">tertiaryColor&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#f7fafc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 缺：git0 / git1 / git2 等 gitGraph 變數
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Mermaid 的 themeVariables 對不同圖表類型有不同的命名空間 — flowchart 用 &lt;code>primaryColor&lt;/code>、gitGraph 用 &lt;code>git0&lt;/code> / &lt;code>git1&lt;/code> / &lt;code>git2&lt;/code>。原本的配置只覆蓋到通用 / flowchart 的命名空間。&lt;/p>
&lt;hr>
&lt;h2 id="解法">解法&lt;/h2>
&lt;p>兩層補洞：JS 層補 themeVariables、CSS 層補 selector 規則做雙保險。&lt;/p>
&lt;h3 id="1-themevariables-加-gitgraph-顏色">1. themeVariables 加 gitGraph 顏色&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nx">themeVariables&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 原本的通用顏色保留
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 補 gitGraph 顏色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">git0&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#90ee90&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1">// HIGHLIGHT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">git1&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#ffb6c6&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1">// REVERSE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">git2&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#4a5568&amp;#39;&lt;/span> &lt;span class="c1">// 其他
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-css-selector-補強">2. CSS selector 補強&lt;/h3>
&lt;p>光靠 themeVariables 在某些 Mermaid 版本仍不穩定（命名規則隨版本改變、見下方注意事項）、加 CSS 直接針對渲染後的 SVG 元素：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">mermaid&lt;/span> &lt;span class="nt">svg&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="o">$=&lt;/span>&lt;span class="s2">&amp;#34;_HIGHLIGHT&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="nt">circle&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#90ee90&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="n">stroke&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#2d7a2d&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">mermaid&lt;/span> &lt;span class="nt">svg&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="o">$=&lt;/span>&lt;span class="s2">&amp;#34;_REVERSE&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="nt">circle&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#ffb6c6&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl"> &lt;span class="n">stroke&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#d32f2f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Mermaid 渲染 gitGraph 時、會在每個 commit 的 SVG node 加上 &lt;code>id=&amp;quot;..._HIGHLIGHT&amp;quot;&lt;/code> / &lt;code>id=&amp;quot;..._REVERSE&amp;quot;&lt;/code>、用 attribute selector &lt;code>[id$=&amp;quot;_TYPENAME&amp;quot;]&lt;/code> 命中。&lt;/p>
&lt;hr>
&lt;h2 id="注意事項">注意事項&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>顏色變數命名隨 Mermaid 版本變動&lt;/strong>：10.6.1 用 &lt;code>git0&lt;/code> / &lt;code>git1&lt;/code> / &lt;code>git2&lt;/code>、更早版本可能是 &lt;code>gitInv0&lt;/code> / &lt;code>gitInv1&lt;/code>。升級 Mermaid 版本時要驗證一次顏色設定還生效。&lt;/li>
&lt;li>&lt;strong>CSS selector 是防禦性的&lt;/strong>：themeVariables 配對的話 CSS 不會生效、但 themeVariables 失靈時 CSS 接住。雙保險、不重複設值。&lt;/li>
&lt;li>&lt;strong>這篇只解決「顏色沒出來」這個視覺問題&lt;/strong>：寫文章引用 gitGraph 的過程中還發現另一個議題 —「用 emoji 圖例區分 HIGHLIGHT / REVERSE」本身是語意混淆、不是視覺問題、修 CSS 解不了。那個議題見 &lt;a href="https://tarrragon.github.io/blog/report/visual-tool-error-layer-alignment/" data-link-title="視覺手段對齊錯誤層次：CSS / emoji 修不到語意 / 邏輯問題" data-link-desc="修視覺問題的工具（CSS、emoji、顏色、排版）只能擋視覺層、不能修語意 / 邏輯層。把語意 / 邏輯問題當成視覺問題修 = 蓋住症狀根因不動 &amp;#43; false confidence、跟 #82 用 hook 蓋行為錯誤同骨。三層優先序：邏輯 → 語意 → 視覺、修法從深層往淺層走、不從症狀往回推。本卡是 #82 在「呈現層」的具體實例、是 #83 multi-pass review 缺的 vertical 軸。">report #92 視覺手段對齊錯誤層次&lt;/a>。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="驗證">驗證&lt;/h2>
&lt;p>修改後在本地 Hugo dev server 預覽包含 gitGraph 的文章、確認：&lt;/p></description><content:encoded><![CDATA[<blockquote>
<p><strong>背景</strong>：本文是「Hugo 部落格支援 Mermaid 流程圖完整實現指南」的補洞紀錄。原指南建立了 Mermaid 整合的基礎、但 gitGraph 的自訂 commit type 顏色設定沒包含進去、文章用到才發現渲染失效。</p></blockquote>
<h2 id="問題情境">問題情境</h2>
<p>部落格用 Hugo + Mermaid 10.6.1 畫 gitGraph，文章裡寫了 <code>type: HIGHLIGHT</code> 和 <code>type: REVERSE</code> 想標出特定 commit、但渲染出來全部是預設灰色、type 標記沒生效。</p>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">gitGraph
   commit id: &#34;A&#34; type: HIGHLIGHT
   commit id: &#34;C&#34; type: REVERSE</code></pre><p>期望：HIGHLIGHT 綠色、REVERSE 紅色
實際：兩個都跟普通 commit 一樣灰</p>
<hr>
<h2 id="根本原因">根本原因</h2>
<p><code>layouts/partials/custom_head.html</code> 的 <code>mermaid.initialize()</code> 裡 <code>themeVariables</code> 只設了通用顏色（<code>primaryColor</code>、<code>secondaryColor</code> 等）、沒給 gitGraph 專用的顏色變數。Mermaid 找不到 HIGHLIGHT / REVERSE 對應的顏色就 fallback 到預設值。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1">// 原本的配置（不完整）
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="c1"></span><span class="nx">themeVariables</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="nx">primaryColor</span><span class="o">:</span> <span class="s1">&#39;#2d3748&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="nx">primaryTextColor</span><span class="o">:</span> <span class="s1">&#39;#2d3748&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="nx">primaryBorderColor</span><span class="o">:</span> <span class="s1">&#39;#4a5568&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  <span class="nx">lineColor</span><span class="o">:</span> <span class="s1">&#39;#4a5568&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="nx">secondaryColor</span><span class="o">:</span> <span class="s1">&#39;#e2e8f0&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="nx">tertiaryColor</span><span class="o">:</span> <span class="s1">&#39;#f7fafc&#39;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="c1">// 缺：git0 / git1 / git2 等 gitGraph 變數
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c1"></span><span class="p">}</span></span></span></code></pre></div><p>Mermaid 的 themeVariables 對不同圖表類型有不同的命名空間 — flowchart 用 <code>primaryColor</code>、gitGraph 用 <code>git0</code> / <code>git1</code> / <code>git2</code>。原本的配置只覆蓋到通用 / flowchart 的命名空間。</p>
<hr>
<h2 id="解法">解法</h2>
<p>兩層補洞：JS 層補 themeVariables、CSS 層補 selector 規則做雙保險。</p>
<h3 id="1-themevariables-加-gitgraph-顏色">1. themeVariables 加 gitGraph 顏色</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">1</span><span class="cl"><span class="nx">themeVariables</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="c1">// 原本的通用顏色保留
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"></span>  <span class="c1">// ...
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">  <span class="c1">// 補 gitGraph 顏色
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="c1"></span>  <span class="nx">git0</span><span class="o">:</span> <span class="s1">&#39;#90ee90&#39;</span><span class="p">,</span>    <span class="c1">// HIGHLIGHT
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="c1"></span>  <span class="nx">git1</span><span class="o">:</span> <span class="s1">&#39;#ffb6c6&#39;</span><span class="p">,</span>    <span class="c1">// REVERSE
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="c1"></span>  <span class="nx">git2</span><span class="o">:</span> <span class="s1">&#39;#4a5568&#39;</span>     <span class="c1">// 其他
</span></span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="c1"></span><span class="p">}</span></span></span></code></pre></div><h3 id="2-css-selector-補強">2. CSS selector 補強</h3>
<p>光靠 themeVariables 在某些 Mermaid 版本仍不穩定（命名規則隨版本改變、見下方注意事項）、加 CSS 直接針對渲染後的 SVG 元素：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">.</span><span class="nc">mermaid</span> <span class="nt">svg</span> <span class="o">[</span><span class="nt">id</span><span class="o">$=</span><span class="s2">&#34;_HIGHLIGHT&#34;</span><span class="o">]</span> <span class="nt">circle</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="n">fill</span><span class="p">:</span> <span class="mh">#90ee90</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">  <span class="n">stroke</span><span class="p">:</span> <span class="mh">#2d7a2d</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">.</span><span class="nc">mermaid</span> <span class="nt">svg</span> <span class="o">[</span><span class="nt">id</span><span class="o">$=</span><span class="s2">&#34;_REVERSE&#34;</span><span class="o">]</span> <span class="nt">circle</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">  <span class="n">fill</span><span class="p">:</span> <span class="mh">#ffb6c6</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">  <span class="n">stroke</span><span class="p">:</span> <span class="mh">#d32f2f</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>Mermaid 渲染 gitGraph 時、會在每個 commit 的 SVG node 加上 <code>id=&quot;..._HIGHLIGHT&quot;</code> / <code>id=&quot;..._REVERSE&quot;</code>、用 attribute selector <code>[id$=&quot;_TYPENAME&quot;]</code> 命中。</p>
<hr>
<h2 id="注意事項">注意事項</h2>
<ul>
<li><strong>顏色變數命名隨 Mermaid 版本變動</strong>：10.6.1 用 <code>git0</code> / <code>git1</code> / <code>git2</code>、更早版本可能是 <code>gitInv0</code> / <code>gitInv1</code>。升級 Mermaid 版本時要驗證一次顏色設定還生效。</li>
<li><strong>CSS selector 是防禦性的</strong>：themeVariables 配對的話 CSS 不會生效、但 themeVariables 失靈時 CSS 接住。雙保險、不重複設值。</li>
<li><strong>這篇只解決「顏色沒出來」這個視覺問題</strong>：寫文章引用 gitGraph 的過程中還發現另一個議題 —「用 emoji 圖例區分 HIGHLIGHT / REVERSE」本身是語意混淆、不是視覺問題、修 CSS 解不了。那個議題見 <a href="/blog/report/visual-tool-error-layer-alignment/" data-link-title="視覺手段對齊錯誤層次：CSS / emoji 修不到語意 / 邏輯問題" data-link-desc="修視覺問題的工具（CSS、emoji、顏色、排版）只能擋視覺層、不能修語意 / 邏輯層。把語意 / 邏輯問題當成視覺問題修 = 蓋住症狀根因不動 &#43; false confidence、跟 #82 用 hook 蓋行為錯誤同骨。三層優先序：邏輯 → 語意 → 視覺、修法從深層往淺層走、不從症狀往回推。本卡是 #82 在「呈現層」的具體實例、是 #83 multi-pass review 缺的 vertical 軸。">report #92 視覺手段對齊錯誤層次</a>。</li>
</ul>
<hr>
<h2 id="驗證">驗證</h2>
<p>修改後在本地 Hugo dev server 預覽包含 gitGraph 的文章、確認：</p>
<ul>
<li>HIGHLIGHT 的 commit circle 顯示綠色</li>
<li>REVERSE 的 commit circle 顯示紅色</li>
<li>沒有 type 的 commit 維持預設灰色</li>
</ul>
]]></content:encoded></item><item><title>Hugo 部落格支援 Mermaid 流程圖完整實現指南</title><link>https://tarrragon.github.io/blog/posts/hugo-%E9%83%A8%E8%90%BD%E6%A0%BC%E6%94%AF%E6%8F%B4-mermaid-%E6%B5%81%E7%A8%8B%E5%9C%96%E5%AE%8C%E6%95%B4%E5%AF%A6%E7%8F%BE%E6%8C%87%E5%8D%97/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/hugo-%E9%83%A8%E8%90%BD%E6%A0%BC%E6%94%AF%E6%8F%B4-mermaid-%E6%B5%81%E7%A8%8B%E5%9C%96%E5%AE%8C%E6%95%B4%E5%AF%A6%E7%8F%BE%E6%8C%87%E5%8D%97/</guid><description>&lt;h2 id="概述">概述&lt;/h2>
&lt;p>本文詳細說明如何在 Hugo 部落格中實現 Mermaid 流程圖支援，包含：&lt;/p>
&lt;ul>
&lt;li>Mermaid.js 整合與初始化&lt;/li>
&lt;li>Markdown 語法轉換處理&lt;/li>
&lt;li>自定義樣式設計&lt;/li>
&lt;li>響應式圖表適配&lt;/li>
&lt;li>多種圖表類型支援&lt;/li>
&lt;/ul>
&lt;h2 id="1-問題分析">1. 問題分析&lt;/h2>
&lt;h3 id="11-hugo-markdown-渲染問題">1.1 Hugo Markdown 渲染問題&lt;/h3>
&lt;p>Hugo 的 Markdown 渲染器會將 Mermaid 程式碼區塊包裝在 &lt;code>&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&lt;/code> 標籤中：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">pre&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">code&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;language-mermaid&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> A[開始] --&amp;gt; B{判斷條件}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> B --&amp;gt;|是| C[執行動作]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> B --&amp;gt;|否| D[結束]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">code&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">pre&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但 Mermaid.js 需要的是 &lt;code>&amp;lt;div class=&amp;quot;mermaid&amp;quot;&amp;gt;&lt;/code> 標籤：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;mermaid&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> A[開始] --&amp;gt; B{判斷條件}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> B --&amp;gt;|是| C[執行動作]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> B --&amp;gt;|否| D[結束]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="12-解決方案">1.2 解決方案&lt;/h3>
&lt;p>使用 JavaScript 動態轉換 Markdown 渲染的程式碼區塊為 Mermaid 所需的格式。&lt;/p>
&lt;h2 id="2-實現步驟">2. 實現步驟&lt;/h2>
&lt;h3 id="21-引入-mermaidjs">2.1 引入 Mermaid.js&lt;/h3>
&lt;p>在 &lt;code>layouts/partials/custom_head.html&lt;/code> 中添加 Mermaid.js：&lt;/p>


&lt;details>
 &lt;summary>點擊查看引入程式碼&lt;/summary>
 

```html
&lt;!-- Mermaid.js 支援 -->
&lt;script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js">&lt;/script>
```


&lt;/details>
&lt;h3 id="22-語法轉換腳本">2.2 語法轉換腳本&lt;/h3>
&lt;p>添加 JavaScript 來轉換 Markdown 渲染的程式碼區塊：&lt;/p>


&lt;details>
 &lt;summary>點擊查看語法轉換 JavaScript 程式碼&lt;/summary>
 

```html
&lt;!-- Mermaid 初始化與樣式 -->
&lt;script>
 document.addEventListener('DOMContentLoaded', function() {
 // 轉換 mermaid 程式碼區塊
 const mermaidCodeBlocks = document.querySelectorAll('pre code.language-mermaid');
 mermaidCodeBlocks.forEach(function(block) {
 const pre = block.parentElement;
 const div = document.createElement('div');
 div.className = 'mermaid';
 div.textContent = block.textContent;
 pre.parentNode.replaceChild(div, pre);
 });
 
 // 初始化 Mermaid
 mermaid.initialize({
 startOnLoad: true,
 theme: 'default',
 securityLevel: 'loose',
 fontFamily: 'Arial, sans-serif',
 themeVariables: {
 primaryColor: '#2d3748',
 primaryTextColor: '#2d3748',
 primaryBorderColor: '#4a5568',
 lineColor: '#4a5568',
 secondaryColor: '#e2e8f0',
 tertiaryColor: '#f7fafc'
 }
 });
 });
&lt;/script>
```


&lt;/details>
&lt;h3 id="23-自定義樣式">2.3 自定義樣式&lt;/h3>
&lt;p>添加 Mermaid 圖表的 CSS 樣式：&lt;/p>


&lt;details>
 &lt;summary>點擊查看 CSS 樣式程式碼&lt;/summary>
 

```html
&lt;style>
 /* Mermaid 圖表樣式 */
 .mermaid {
 text-align: center;
 margin: 20px 0;
 }
 
 .mermaid svg {
 max-width: 100%;
 height: auto;
 }
 
 /* 響應式設計 */
 @media (max-width: 768px) {
 .mermaid {
 font-size: 12px;
 }
 }
&lt;/style>
```


&lt;/details>
&lt;h2 id="3-完整實現程式碼">3. 完整實現程式碼&lt;/h2>
&lt;h3 id="31-custom_headhtml-完整程式碼">3.1 custom_head.html 完整程式碼&lt;/h3>


&lt;details>
 &lt;summary>點擊查看完整實現程式碼&lt;/summary>
 

```html
&lt;!-- Mermaid.js 支援 -->
&lt;script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js">&lt;/script>

&lt;!-- Mermaid 初始化與樣式 -->
&lt;script>
 document.addEventListener('DOMContentLoaded', function() {
 // 轉換 mermaid 程式碼區塊
 const mermaidCodeBlocks = document.querySelectorAll('pre code.language-mermaid');
 mermaidCodeBlocks.forEach(function(block) {
 const pre = block.parentElement;
 const div = document.createElement('div');
 div.className = 'mermaid';
 div.textContent = block.textContent;
 pre.parentNode.replaceChild(div, pre);
 });
 
 // 初始化 Mermaid
 mermaid.initialize({
 startOnLoad: true,
 theme: 'default',
 securityLevel: 'loose',
 fontFamily: 'Arial, sans-serif',
 themeVariables: {
 primaryColor: '#2d3748',
 primaryTextColor: '#2d3748',
 primaryBorderColor: '#4a5568',
 lineColor: '#4a5568',
 secondaryColor: '#e2e8f0',
 tertiaryColor: '#f7fafc'
 }
 });
 });
&lt;/script>

&lt;style>
 /* Mermaid 圖表樣式 */
 .mermaid {
 text-align: center;
 margin: 20px 0;
 }
 
 .mermaid svg {
 max-width: 100%;
 height: auto;
 }
 
 /* 響應式設計 */
 @media (max-width: 768px) {
 .mermaid {
 font-size: 12px;
 }
 }
&lt;/style>
```


&lt;/details>
&lt;h2 id="4-使用方式">4. 使用方式&lt;/h2>
&lt;h3 id="41-基本語法">4.1 基本語法&lt;/h3>
&lt;p>在 Markdown 文件中使用 Mermaid 語法：&lt;/p></description><content:encoded><![CDATA[<h2 id="概述">概述</h2>
<p>本文詳細說明如何在 Hugo 部落格中實現 Mermaid 流程圖支援，包含：</p>
<ul>
<li>Mermaid.js 整合與初始化</li>
<li>Markdown 語法轉換處理</li>
<li>自定義樣式設計</li>
<li>響應式圖表適配</li>
<li>多種圖表類型支援</li>
</ul>
<h2 id="1-問題分析">1. 問題分析</h2>
<h3 id="11-hugo-markdown-渲染問題">1.1 Hugo Markdown 渲染問題</h3>
<p>Hugo 的 Markdown 渲染器會將 Mermaid 程式碼區塊包裝在 <code>&lt;pre&gt;&lt;code&gt;</code> 標籤中：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">pre</span><span class="p">&gt;&lt;</span><span class="nt">code</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;language-mermaid&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">graph TD
</span></span><span class="line"><span class="ln">3</span><span class="cl">    A[開始] --&gt; B{判斷條件}
</span></span><span class="line"><span class="ln">4</span><span class="cl">    B --&gt;|是| C[執行動作]
</span></span><span class="line"><span class="ln">5</span><span class="cl">    B --&gt;|否| D[結束]
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">&lt;/</span><span class="nt">code</span><span class="p">&gt;&lt;/</span><span class="nt">pre</span><span class="p">&gt;</span></span></span></code></pre></div><p>但 Mermaid.js 需要的是 <code>&lt;div class=&quot;mermaid&quot;&gt;</code> 標籤：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;mermaid&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">graph TD
</span></span><span class="line"><span class="ln">3</span><span class="cl">    A[開始] --&gt; B{判斷條件}
</span></span><span class="line"><span class="ln">4</span><span class="cl">    B --&gt;|是| C[執行動作]
</span></span><span class="line"><span class="ln">5</span><span class="cl">    B --&gt;|否| D[結束]
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span></code></pre></div><h3 id="12-解決方案">1.2 解決方案</h3>
<p>使用 JavaScript 動態轉換 Markdown 渲染的程式碼區塊為 Mermaid 所需的格式。</p>
<h2 id="2-實現步驟">2. 實現步驟</h2>
<h3 id="21-引入-mermaidjs">2.1 引入 Mermaid.js</h3>
<p>在 <code>layouts/partials/custom_head.html</code> 中添加 Mermaid.js：</p>


<details>
  <summary>點擊查看引入程式碼</summary>
  

```html
<!-- Mermaid.js 支援 -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>
```


</details>
<h3 id="22-語法轉換腳本">2.2 語法轉換腳本</h3>
<p>添加 JavaScript 來轉換 Markdown 渲染的程式碼區塊：</p>


<details>
  <summary>點擊查看語法轉換 JavaScript 程式碼</summary>
  

```html
<!-- Mermaid 初始化與樣式 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    // 轉換 mermaid 程式碼區塊
    const mermaidCodeBlocks = document.querySelectorAll('pre code.language-mermaid');
    mermaidCodeBlocks.forEach(function(block) {
      const pre = block.parentElement;
      const div = document.createElement('div');
      div.className = 'mermaid';
      div.textContent = block.textContent;
      pre.parentNode.replaceChild(div, pre);
    });
    
    // 初始化 Mermaid
    mermaid.initialize({
      startOnLoad: true,
      theme: 'default',
      securityLevel: 'loose',
      fontFamily: 'Arial, sans-serif',
      themeVariables: {
        primaryColor: '#2d3748',
        primaryTextColor: '#2d3748',
        primaryBorderColor: '#4a5568',
        lineColor: '#4a5568',
        secondaryColor: '#e2e8f0',
        tertiaryColor: '#f7fafc'
      }
    });
  });
</script>
```


</details>
<h3 id="23-自定義樣式">2.3 自定義樣式</h3>
<p>添加 Mermaid 圖表的 CSS 樣式：</p>


<details>
  <summary>點擊查看 CSS 樣式程式碼</summary>
  

```html
<style>
  /* Mermaid 圖表樣式 */
  .mermaid {
    text-align: center;
    margin: 20px 0;
  }
  
  .mermaid svg {
    max-width: 100%;
    height: auto;
  }
  
  /* 響應式設計 */
  @media (max-width: 768px) {
    .mermaid {
      font-size: 12px;
    }
  }
</style>
```


</details>
<h2 id="3-完整實現程式碼">3. 完整實現程式碼</h2>
<h3 id="31-custom_headhtml-完整程式碼">3.1 custom_head.html 完整程式碼</h3>


<details>
  <summary>點擊查看完整實現程式碼</summary>
  

```html
<!-- Mermaid.js 支援 -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>

<!-- Mermaid 初始化與樣式 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    // 轉換 mermaid 程式碼區塊
    const mermaidCodeBlocks = document.querySelectorAll('pre code.language-mermaid');
    mermaidCodeBlocks.forEach(function(block) {
      const pre = block.parentElement;
      const div = document.createElement('div');
      div.className = 'mermaid';
      div.textContent = block.textContent;
      pre.parentNode.replaceChild(div, pre);
    });
    
    // 初始化 Mermaid
    mermaid.initialize({
      startOnLoad: true,
      theme: 'default',
      securityLevel: 'loose',
      fontFamily: 'Arial, sans-serif',
      themeVariables: {
        primaryColor: '#2d3748',
        primaryTextColor: '#2d3748',
        primaryBorderColor: '#4a5568',
        lineColor: '#4a5568',
        secondaryColor: '#e2e8f0',
        tertiaryColor: '#f7fafc'
      }
    });
  });
</script>

<style>
  /* Mermaid 圖表樣式 */
  .mermaid {
    text-align: center;
    margin: 20px 0;
  }
  
  .mermaid svg {
    max-width: 100%;
    height: auto;
  }
  
  /* 響應式設計 */
  @media (max-width: 768px) {
    .mermaid {
      font-size: 12px;
    }
  }
</style>
```


</details>
<h2 id="4-使用方式">4. 使用方式</h2>
<h3 id="41-基本語法">4.1 基本語法</h3>
<p>在 Markdown 文件中使用 Mermaid 語法：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln">1</span><span class="cl"><span class="s">```mermaid
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="s"></span>graph TD
</span></span><span class="line"><span class="ln">3</span><span class="cl">    A[開始] --&gt; B{判斷條件}
</span></span><span class="line"><span class="ln">4</span><span class="cl">    B --&gt;|是| C[執行動作]
</span></span><span class="line"><span class="ln">5</span><span class="cl">    B --&gt;|否| D[結束]
</span></span><span class="line"><span class="ln">6</span><span class="cl">    C --&gt; D
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="s">```</span></span></span></code></pre></div><h3 id="42-支援的圖表類型">4.2 支援的圖表類型</h3>
<h4 id="421-流程圖-flowchart">4.2.1 流程圖 (Flowchart)</h4>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">graph TD
    A[開始] --&gt; B{判斷條件}
    B --&gt;|是| C[執行動作]
    B --&gt;|否| D[結束]
    C --&gt; D</code></pre><h4 id="422-時序圖-sequence-diagram">4.2.2 時序圖 (Sequence Diagram)</h4>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">sequenceDiagram
    participant A as 用戶
    participant B as 系統
    participant C as 資料庫
    
    A-&gt;&gt;B: 發送請求
    B-&gt;&gt;C: 查詢資料
    C--&gt;&gt;B: 返回結果
    B--&gt;&gt;A: 顯示結果</code></pre><h4 id="423-甘特圖-gantt-chart">4.2.3 甘特圖 (Gantt Chart)</h4>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">gantt
    title 專案時程規劃
    dateFormat  YYYY-MM-DD
    section 第一階段
    需求分析           :a1, 2024-01-01, 30d
    系統設計           :a2, after a1, 20d
    section 第二階段
    程式開發           :a3, after a2, 40d
    測試驗證           :a4, after a3, 15d</code></pre><h4 id="424-類別圖-class-diagram">4.2.4 類別圖 (Class Diagram)</h4>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">classDiagram
    class User {
        +String name
        +String email
        +login()
        +logout()
    }
    
    class Admin {
        +String role
        +manageUsers()
    }
    
    User &lt;|-- Admin</code></pre><h4 id="425-狀態圖-state-diagram">4.2.5 狀態圖 (State Diagram)</h4>





<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">stateDiagram-v2
    [*] --&gt; 待機
    待機 --&gt; 執行中 : 開始任務
    執行中 --&gt; 完成 : 任務完成
    執行中 --&gt; 錯誤 : 發生錯誤
    錯誤 --&gt; 待機 : 重新開始
    完成 --&gt; [*]</code></pre><h2 id="5-自定義配置">5. 自定義配置</h2>
<h3 id="51-主題設定">5.1 主題設定</h3>
<p>Mermaid 支援多種主題，可以在初始化時設定：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">1</span><span class="cl"><span class="nx">mermaid</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="nx">theme</span><span class="o">:</span> <span class="s1">&#39;default&#39;</span><span class="p">,</span> <span class="c1">// 可選: default, dark, forest, neutral
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"></span>  <span class="c1">// ... 其他設定
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"></span><span class="p">});</span></span></span></code></pre></div><h3 id="52-自定義顏色">5.2 自定義顏色</h3>
<p>通過 <code>themeVariables</code> 自定義顏色：</p>


<details>
  <summary>點擊查看自定義顏色程式碼</summary>
  

```javascript
mermaid.initialize({
  themeVariables: {
    primaryColor: '#2d3748',        // 主要顏色
    primaryTextColor: '#2d3748',    // 主要文字顏色
    primaryBorderColor: '#4a5568',  // 主要邊框顏色
    lineColor: '#4a5568',           // 線條顏色
    secondaryColor: '#e2e8f0',      // 次要顏色
    tertiaryColor: '#f7fafc'        // 第三級顏色
  }
});
```


</details>
<h3 id="53-字體設定">5.3 字體設定</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">1</span><span class="cl"><span class="nx">mermaid</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="nx">fontFamily</span><span class="o">:</span> <span class="s1">&#39;Arial, sans-serif&#39;</span><span class="p">,</span> <span class="c1">// 字體家族
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"></span>  <span class="c1">// ... 其他設定
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"></span><span class="p">});</span></span></span></code></pre></div><h2 id="6-響應式設計">6. 響應式設計</h2>
<h3 id="61-桌面版樣式">6.1 桌面版樣式</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">.</span><span class="nc">mermaid</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="k">text-align</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mi">20</span><span class="kt">px</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">.</span><span class="nc">mermaid</span> <span class="nt">svg</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">  <span class="k">max-width</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">  <span class="k">height</span><span class="p">:</span> <span class="kc">auto</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><h3 id="62-手機版適配">6.2 手機版適配</h3>


<details>
  <summary>點擊查看手機版適配 CSS</summary>
  

```css
@media (max-width: 768px) {
  .mermaid {
    font-size: 12px;
    margin: 15px 0;
  }
}
```


</details>
<h2 id="7-進階功能">7. 進階功能</h2>
<h3 id="71-互動式圖表">7.1 互動式圖表</h3>
<p>Mermaid 支援點擊事件和互動功能：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">1</span><span class="cl"><span class="nx">mermaid</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="nx">startOnLoad</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">  <span class="nx">securityLevel</span><span class="o">:</span> <span class="s1">&#39;loose&#39;</span><span class="p">,</span> <span class="c1">// 允許互動功能
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"></span>  <span class="c1">// ... 其他設定
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="c1"></span><span class="p">});</span></span></span></code></pre></div><h3 id="72-自定義樣式">7.2 自定義樣式</h3>
<p>可以通過 CSS 進一步自定義圖表外觀：</p>


<details>
  <summary>點擊查看進階自定義樣式 CSS</summary>
  

```css
.mermaid .node rect {
  fill: #f9f9f9;
  stroke: #333;
  stroke-width: 2px;
}

.mermaid .edgePath .path {
  stroke: #333;
  stroke-width: 2px;
}

.mermaid .edgeLabel {
  background-color: #e8e8e8;
}
```


</details>
<h2 id="8-常見問題與解決方案">8. 常見問題與解決方案</h2>
<h3 id="81-圖表不顯示">8.1 圖表不顯示</h3>
<p><strong>問題</strong>：Mermaid 圖表沒有渲染出來</p>
<p><strong>解決方案</strong>：</p>
<ol>
<li>檢查 JavaScript 是否正確載入</li>
<li>確認 Markdown 語法是否正確</li>
<li>檢查瀏覽器控制台是否有錯誤訊息</li>
</ol>
<h3 id="82-樣式問題">8.2 樣式問題</h3>
<p><strong>問題</strong>：圖表樣式不符合預期</p>
<p><strong>解決方案</strong>：</p>
<ol>
<li>檢查 CSS 樣式是否正確載入</li>
<li>確認 Mermaid 初始化設定</li>
<li>檢查是否有其他 CSS 衝突</li>
</ol>
<h3 id="83-響應式問題">8.3 響應式問題</h3>
<p><strong>問題</strong>：在手機版圖表顯示異常</p>
<p><strong>解決方案</strong>：</p>
<ol>
<li>檢查響應式 CSS 設定</li>
<li>調整字體大小和邊距</li>
<li>測試不同螢幕尺寸</li>
</ol>
<h2 id="9-效能優化">9. 效能優化</h2>
<h3 id="91-延遲載入">9.1 延遲載入</h3>
<p>對於包含大量圖表的頁面，可以考慮延遲載入：</p>


<details>
  <summary>點擊查看延遲載入程式碼</summary>
  

```javascript
// 只在圖表進入視窗時才初始化
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      // 初始化 Mermaid
      mermaid.init(undefined, entry.target);
      observer.unobserve(entry.target);
    }
  });
});

document.querySelectorAll('.mermaid').forEach(el => {
  observer.observe(el);
});
```


</details>
<h3 id="92-快取優化">9.2 快取優化</h3>
<p>使用 CDN 快取 Mermaid.js：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js&#34;</span> 
</span></span><span class="line"><span class="ln">2</span><span class="cl">        <span class="na">integrity</span><span class="o">=</span><span class="s">&#34;sha384-...&#34;</span> 
</span></span><span class="line"><span class="ln">3</span><span class="cl">        <span class="na">crossorigin</span><span class="o">=</span><span class="s">&#34;anonymous&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span></span></span></code></pre></div><h2 id="10-總結">10. 總結</h2>
<p>通過這個實現方案：</p>
<ol>
<li>支援 Mermaid 語法</li>
<li>處理 Hugo Markdown 渲染的格式問題</li>
<li>響應式設計</li>
<li>支援流程圖、時序圖、甘特圖等</li>
<li>可以根據網站主題調整外觀</li>
</ol>
]]></content:encoded></item></channel></rss>