<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E6%80%8E%E6%A0%B7%E8%AE%A9_MediaWiki_%E7%94%9F%E6%88%90%E5%AE%8C%E7%BE%8E%E7%9A%84%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE</id>
	<title>怎样让 MediaWiki 生成完美的思维导图 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E6%80%8E%E6%A0%B7%E8%AE%A9_MediaWiki_%E7%94%9F%E6%88%90%E5%AE%8C%E7%BE%8E%E7%9A%84%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE"/>
	<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E6%80%8E%E6%A0%B7%E8%AE%A9_MediaWiki_%E7%94%9F%E6%88%90%E5%AE%8C%E7%BE%8E%E7%9A%84%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE&amp;action=history"/>
	<updated>2026-08-07T07:42:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://qingliezhiquan.com/mediawiki/index.php?title=%E6%80%8E%E6%A0%B7%E8%AE%A9_MediaWiki_%E7%94%9F%E6%88%90%E5%AE%8C%E7%BE%8E%E7%9A%84%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE&amp;diff=8307&amp;oldid=prev</id>
		<title>Mwroot: Created page with &quot;在 MediaWiki 里原生生成思维导图，一直是我的梦想。没想到，它实现了。  == 外部 == 不论采用外部哪个思维导图，生成的图，都得多一个上传的过程，烦不胜烦，所以只有从 MediaWiki 内部解决。  == Diagrams == MediaWiki 的 Diagrams 拓展，提供了四种能力：&lt;graphviz&gt;, &lt;mscgen&gt;, &lt;uml&gt;, and &lt;mermaid&gt;。  &lt;graphviz&gt; 可谓理科思维导图。默认样式几乎没有。要定义节点，给节点连线，...&quot;</title>
		<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E6%80%8E%E6%A0%B7%E8%AE%A9_MediaWiki_%E7%94%9F%E6%88%90%E5%AE%8C%E7%BE%8E%E7%9A%84%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE&amp;diff=8307&amp;oldid=prev"/>
		<updated>2025-09-29T05:52:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;在 MediaWiki 里原生生成思维导图，一直是我的梦想。没想到，它实现了。  == 外部 == 不论采用外部哪个思维导图，生成的图，都得多一个上传的过程，烦不胜烦，所以只有从 MediaWiki 内部解决。  == Diagrams == MediaWiki 的 Diagrams 拓展，提供了四种能力：&amp;lt;graphviz&amp;gt;, &amp;lt;mscgen&amp;gt;, &amp;lt;uml&amp;gt;, and &amp;lt;mermaid&amp;gt;。  &amp;lt;graphviz&amp;gt; 可谓理科思维导图。默认样式几乎没有。要定义节点，给节点连线，...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;在 MediaWiki 里原生生成思维导图，一直是我的梦想。没想到，它实现了。&lt;br /&gt;
&lt;br /&gt;
== 外部 ==&lt;br /&gt;
不论采用外部哪个思维导图，生成的图，都得多一个上传的过程，烦不胜烦，所以只有从 MediaWiki 内部解决。&lt;br /&gt;
&lt;br /&gt;
== Diagrams ==&lt;br /&gt;
MediaWiki 的 Diagrams 拓展，提供了四种能力：&amp;lt;graphviz&amp;gt;, &amp;lt;mscgen&amp;gt;, &amp;lt;uml&amp;gt;, and &amp;lt;mermaid&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graphviz&amp;gt; 可谓理科思维导图。默认样式几乎没有。要定义节点，给节点连线，非常繁琐，只适合少图精调，不适合批量多图。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mscgen&amp;gt; 我尚未用过。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uml&amp;gt; 是我的最终方案。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mermaid&amp;gt; 可谓“文科思维导图”。默认样式漂亮。要定义节点，给节点连线，非常繁琐，只适合少图精调，不适合批量多图。&lt;br /&gt;
&lt;br /&gt;
Diagrams 里的 mermaid，目前版本为 9.1.x，太老旧了，没有 mindmap 直接写节点的能力。于是我尝试单独的 Mermaid 拓展。&lt;br /&gt;
&lt;br /&gt;
但最终发现，单独的 Mermaid 拓展，虽然 mermaid 版本较新，但也没支持 mindmap 直接写节点的能力。&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;uml&amp;gt; ==&lt;br /&gt;
=== 中文乱码 ===&lt;br /&gt;
用 Diagrams 的 &amp;lt;uml&amp;gt; 能力生图，发现中文是乱码。网上有人叫在 &amp;lt;uml&amp;gt; 内部设置中文字体，测了一会儿字体，改了一会儿字体名，均无效。&lt;br /&gt;
&lt;br /&gt;
用下面的命令可以查看 &amp;lt;uml&amp;gt; 支持的字体。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
@startuml&lt;br /&gt;
listfonts&lt;br /&gt;
@enduml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
后来发现原因在于，Diagrams 调用 plantuml 时，没有继承到正确的 charset 设置，ChatGPT 多次提醒我改变 plantuml 的环境参数，我不知如何下手，我以为要动 Diagrams 的源码。&lt;br /&gt;
&lt;br /&gt;
ChatGPT 又建议我做一个 plantuml-wrapper，把 plantuml 的二进制文件包裹一层环境参数，看着也挺麻烦，既要新建 plantuml-wrapper，又要改权限，还要同时去 LocalSettings.php 更改设置，我认为流程过于繁琐，不利于未来维护，于是放弃用 wrapper。&lt;br /&gt;
&lt;br /&gt;
经过坚持不懈地翻找，我终于找到 plantuml 官方，里面有提到 utf-8 相关设置，而且我把 [https://www.mediawiki.org/wiki/Extension:Diagrams Diagrams 拓展的文档界面] 发给 ChatGPT，叫它找找线索。细心的 ChatGPT 明确说，在 Diagrams 拓展的文档界面，明确说明可以自定义 plantuml 的本地环境参数。这并不是对 Diagrams 源码的入侵，而是官方提供的接口，我终于细心看了一下文档，才发现在文档底部明确写着可以自定义本地环境参数。终于，在 LocalSettings.php 里用&amp;lt;code&amp;gt;-Dfile.encoding=UTF-8&amp;lt;/code&amp;gt;自定义一下 utf-8 就解决了中文乱码的问题。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
$wgDiagramsLocalCommands = [&lt;br /&gt;
    &amp;#039;plantuml&amp;#039; =&amp;gt; &amp;#039;/usr/bin/java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dplantuml.include.path=&amp;quot;/path/to/wiki/extensions/Diagrams/styles&amp;quot; -jar /usr/share/plantuml/plantuml.jar&amp;#039;,&lt;br /&gt;
];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 样式复用 ===&lt;br /&gt;
解决了中文乱码问题，好不容易调试出了一个文科思维导图，界面非常优美，又遇到了每次生图都需要带同样的样式参数的问题，于是查找到 plantuml 具有 !include 的能力，于是引入，但发现总是在 !include 行报错。&lt;br /&gt;
&lt;br /&gt;
[https://plantuml.com/preprocessing plantuml 官网]明晃晃写着支持 !include，但是却不生效。ChatGPT 教了一个巨有用的调试技巧，用 www-data 用户查看文本内容，看是否存在权限问题：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
sudo -u www-data cat styles/light.puml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果能查看内容，证明权限无误。如果不能查看内容，证明权限有误。light.puml 是一个自己调的思维导图样式。&lt;br /&gt;
&lt;br /&gt;
测试 ChatGPT 建议的，用 !includeurl https://xxxx/light.puml 引入，直接杜绝了权限问题，发现立即可以实现想要的效果了，于是可以推测出不是 Diagrams 不支持 !include，而是用路径引用时，权限有问题。&lt;br /&gt;
# 路径必须是 plantuml 能找到的路径，所以在 LocalSettings.php 里用&amp;lt;code&amp;gt;-Dplantuml.include.path=&amp;quot;/path/to/wiki/extensions/Diagrams/styles&amp;quot;&amp;lt;/code&amp;gt;加入路径变量，能解决路径问题&lt;br /&gt;
# 权限可以是：文件夹 750，文件 640。若文件夹限缩至 640 则 light.puml 可能无法被访问。总之要确保 www-data 用户有 r 权限。&lt;br /&gt;
# 另外，某些默认文本编辑器，复制粘贴较长行时，会产生不恰当断行，我就在 extensions 被不恰当断行上栽过半小时，一定要明确复制的参数正确地写入了&lt;br /&gt;
&lt;br /&gt;
== #tag ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#tag:tagname&lt;br /&gt;
|content&lt;br /&gt;
|attribute1=value1&lt;br /&gt;
|attribute2=value2&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在解决了 uml 中文乱码、 样式复用的问题后，就想用模板解决重复输入的问题。但发现，uml 一见到 {{{1}}} 模板参数就报错，原因在于 &amp;lt;uml&amp;gt; 标签无法先展开参数、再渲染生图。核心就是怎么样让 {{{1}}} 参数先展开，再交给 &amp;lt;uml&amp;gt; 处理，而 #tag 解释器刚好解决了这个问题。#tag 的本质是parser function，能确保参数先被 MediaWiki 展开，再交给扩展处理&lt;br /&gt;
&lt;br /&gt;
最终模板如下：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- Template:Swdt --&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#tag:uml&lt;br /&gt;
|@startmindmap&lt;br /&gt;
!include light.puml&lt;br /&gt;
&lt;br /&gt;
{{{1}}}&lt;br /&gt;
@endmindmap&lt;br /&gt;
|format=svg}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
“思维导图”模板用法：&lt;br /&gt;
{{Swdt|&lt;br /&gt;
* ChatGPT&lt;br /&gt;
** 冷静&lt;br /&gt;
*** 耐心&lt;br /&gt;
*** 强大&lt;br /&gt;
** 博学&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 最终效果 ==&lt;br /&gt;
成功用以下内容：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Swdt|&lt;br /&gt;
* ChatGPT&lt;br /&gt;
** 冷静&lt;br /&gt;
*** 耐心&lt;br /&gt;
*** 强大&lt;br /&gt;
** 博学&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
生成以下思维导图：&lt;br /&gt;
{{Swdt|&lt;br /&gt;
* ChatGPT&lt;br /&gt;
** 冷静&lt;br /&gt;
*** 耐心&lt;br /&gt;
*** 强大&lt;br /&gt;
** 博学&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mwroot</name></author>
	</entry>
</feed>