hexo-markmap
v2.0.8
Published
A hexo plugin insert mindmap in your hexo blog by markmap (new rebuild).
Readme
[!WARNING] 这是
hexo-markmap@2的文档。如果你正在使用hexo-markmap@1,请查看 这里。如果你想升级到
hexo-markmap@2,请查看 这里。
hexo-markmap
在你的 Hexo 博客中插入思维导图,使用 markmap。
安装
pnpm add hexo-markmap -Dnpm install hexo-markmap --save-devyarn add hexo-markmap -D[!TIP] 试试我们的新 VS Code 扩展 markmap-universe,直接预览你的
hexo-markmap思维导图。
使用
{% markmap %}
---
markmap:
colorFreezeLevel: 2
---
# Markdown
# Syntax
{% endmarkmap %}独立选项
你可以在 markmap 标签中自定义每个思维导图。
Frontmatter 选项
就像你在 Hexo 中的 Markdown 文件中使用 frontmatter 一样,你可以在 markmap 标签中使用 frontmatter 来自定义你的思维导图!
所有 frontmatter 选项都是可选的。
id:用于定义markmap-wrap元素的 ID。markmap/options:对应 markmap 项目中的IMarkmapJSONOptions。有关更多详细信息,请参考jsonOptions。- 别名:
options(向后兼容)
- 别名:
[!TIP]
markmap和options的区别
markmap(来自 markmap-lib)
JSON Options 会被预处理(例如,将字符串转换为数组或数字),并优先覆盖options。
- 例如,
color: 'red'会被转换为color: ['red'],只有后者在markmap-view中有效。- ✅ 推荐使用,以保持与
markmap一致。options(来自 markmap-universe) 会被直接传递给 markmap-view。
- ❌ 不推荐使用,仅为向后兼容而保留。
标签选项
你还可以直接在标签中指定思维导图的高度,默认情况下会根据内容进行计算。
{% markmap 300px %}
# Markdown
# Syntax
{% endmarkmap %}height: 用于指定思维导图的高度。
配置
将相应内容追加到 config.yml 中。
约定大于配置,如果你不需要以下某个功能,那么无需添加该配置项。
默认情况下即可正常工作。每个选项都有默认值。
默认配置
hexo_markmap:
darkThemeCssSelector: '.dark'
CDN: 'fastly'
customCDN: 'https://fastly.jsdelivr.net/npm/'darkThemeCssSelector: 用于指定暗黑主题的CSS选择器。CDN: 用于指定 Markmap 的 CDN。目前支持的值有fastly、jsdelivr、unpkg。- 如果设置为
custom,则customCDN的值将被用作 CDN 的前缀。
- 如果设置为
customCDN: 为 Markmap 定义自定义 CDN URL。这必须是一个有效的 URL。globalOptions: 用于为所有思维导图定义全局选项。- 对应于前面提到的 frontmatter 中的
options。
- 对应于前面提到的 frontmatter 中的
升级到 hexo-markmap@2
hexo-markmap@2 是由 @coderxi1 与 @maxchang3 全新重构的版本。该版本升级至最新的 Markmap,引入了更多自定义选项,具体改进包括:
- 可在单个 Markmap 标签中,通过 frontmatter 自定义:
- CSS 样式(实现自定义高度、宽度、响应式布局等)
- 自 v2.0.5 起,不再支持在 frontmatter 中设置样式。但你可以结合
id选项直接在<style>标签中定义样式。
- 自 v2.0.5 起,不再支持在 frontmatter 中设置样式。但你可以结合
- Markmap 的 JSON Options
- CSS 样式(实现自定义高度、宽度、响应式布局等)
- 利用 Markmap 内置的 URL Builder 自动生成 CDN 地址
- 根据语法自动生成相应的 CDN 标签
- 支持深色模式与全屏按钮
- 使用 TypeScript 重构,并覆盖了测试用例
需要注意的是,由于部分实现细节已与 hexo-markmap@1 不同,如对上述新功能没有强烈需求,仍可继续使用 hexo-markmap@1。
若需升级至 hexo-markmap@2,请参考以下步骤:
使用你喜欢的包管理器安装
hexo-markmap@2:pnpm add hexo-markmap@2 -Dnpm install hexo-markmap@2 --save-devyarn add hexo-markmap@2 -D根据需要修改
config.yml中的配置:以下配置项已不再支持:
hexo_markmap: - pjax: false - katex: false - prism: false - lockView: false - fixSVGAttrNaN: false- 当前版本已放弃对
pjax的兼容性; - KaTeX 与 Prism.js 现可自动检测并生成相应的 CDN 标签;
- 通过 frontmatter 中的
options设置pan与zoom为false即可实现lockView效果。
- 当前版本已放弃对
CDN配置逻辑也有所调整:hexo_markmap: - userCDN: - d3_js: https://fastly.jsdelivr.net/npm/d3@6 - markmap_view_js: https://fastly.jsdelivr.net/npm/[email protected] - katex_css: https://fastly.jsdelivr.net/npm/[email protected]/dist/katex.min.css - prism_css: https://fastly.jsdelivr.net/npm/[email protected]/themes/prism.css + CDN: 'custom' + customCDN: 'https://fastly.jsdelivr.net/npm/'- 现在的
CDN配置支持fastly、jsdelivr、unpkg三个选项以及custom自定义选项; - 如果选择
custom,则customCDN的值将作为 CDN 前缀使用。
- 现在的
此外,之前可传入的
depth参数以指定折叠深度已移除,你可以在 frontmatter 中使用options配置initialExpandLevel。
更新你的 Markdown 文件中的
markmap标签:
现在
markmap标签支持 frontmatter 选项。你可以直接在标签中指定选项,例如:{% markmap %} --- markmap: colorFreezeLevel: 2 --- # Markdown # Syntax {% endmarkmap %}你仍然可以直接在标签中自定义思维导图的高度,但默认情况下会根据内容进行计算:
- {% markmap 300px %} + {% markmap %} # Markdown # Syntax {% endmarkmap %}
- 最后,重新生成你的博客。
示例
{% markmap %}
---
options:
colorFreezeLevel: 2
---
## Links
- [Website](https://markmap.js.org/)
- [GitHub](https://github.com/gera2ld/markmap)
## Related Projects
- [coc-markmap](https://github.com/gera2ld/coc-markmap) for Neovim
- [markmap-vscode](https://marketplace.visualstudio.com/items?itemName=gera2ld.markmap-vscode) for VSCode
- [eaf-markmap](https://github.com/emacs-eaf/eaf-markmap) for Emacs
## Features
Note that if blocks and lists appear at the same level, the lists will be ignored.
### Lists
- **strong** ~~del~~ *italic* ==highlight==
- `inline code`
- [x] checkbox
- Katex: $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$ <!-- markmap: fold -->
- [More Katex Examples](#?d=gist:af76a4c245b302206b16aec503dbe07b:katex.md)
- Now we can wrap very very very very long text based on `maxWidth` option
- Ordered list
1. item 1
2. item 2
### Blocks
<!-- 为了避免 hexo 将以下内容视为代码块,我们需要使用列表 -->
- ```js
console.log('hello, JavaScript')
```
- | Products | Price |
|-|-|
| Apple | 4 |
| Banana | 2 |
- 贡献者
感谢所有的贡献者🥰!
Credits
- 如果没有 markmap,这个项目不可能存在。
- 最初受到了 hexo-simple-mindmap 的启发。
- 感谢 @coderxi1 对最初 2.0 版本的构思和实现!
