如何把Obsidian中的mermaid图片导出成图片

请仔细说明自己遇到的问题,以下是参考模板。这里不要求非得按模板发帖,但内容中包含相关要素能让大家更好地帮助你。


遇到的问题

使用mermaid写的流程图,可以在Obsidian中正常显示,但是使用pandoc导出成docx文件时,mermaid流程图并没有转换成图片。

预期的效果

希望使用pandoc导出时直接讲mermaid流程图转换成图片

已尝试的解决方案

第一种方法:
尝试npm install --global mermaid-filter,但是似乎是受代理的影响,一直无法安装成功,下载源码npm install也失败了。

第二种方法:
尝试pip install pandoc-mermaid-filter',在pandoc的导出命令里也加入了–filter pandoc-mermaid-filter’,也把pandoc-mermaid-filter文件夹的路径加入了系统环境变量中,但是执行时提示
image

要不先去把mermaid导出照片插进来?
曲线救国

我发现这里面全是坑…

我主要用的 python 版的, 最终目标是想要成功执行下面这句:

pandoc "test_mermaid_导出word.md" -o test_mermaid_导出word.docx --filter pandoc-mermaid --verbose

过程中遇到的问题有

  1. pandoc_mermaid_filter.py 要求系统里有 环境变量 MERMAID_BINos.environ.get('MERMAID_BIN', 'mermaid') ref

一般这种情况, 可以不设变量用它默认 'mermaid' 就完了呗? 但我发现在我这里 mermaid 主程序叫 mmdc (见 “2.”), 最后还是得在 Windows 里把这环境变量手动加上


2. 系统里需要 mermaid cli cnpm install -g @mermaid-js/mermaid-cli 而前者依赖 cnpm install -g puppeteer 总之我都安装了一通

想 pandoc 导出成功, 至少得先做到 cmd 里能成功运行 mmdc --help


3. pandoc_mermaid_filter.py 开子进程可能报错

我这里不是必现, 但好几次都挂在下面这里

File "......   \site-packages\pandoc_mermaid_filter.py", line 34, in mermaid
    subprocess.check_call([MERMAID_BIN, "-i", src, "-o", dest])

# 再往下是 subprocess 的 traceback 这里不太可能出错
 File "......   \anaconda3\Lib\subprocess.py", line 1538, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError

实际这句 subprocess.check_call([MERMAID_BIN, "-i", src, "-o", dest]) ref 干的事就是拼个命令行, 把 mermaid 语法 *.mmd 给转个图片出来

我是先给改成了 os.system(' '.join([MERMAID_BIN, "-i", src, "-o", dest])) 让它先跑起来再说


折腾完这一堆后, 终于能把含 mermaid 语法的 md 转 docx 了, 它会先造个 mermaid-images 子目录, 把 mermaid 代码都转图片缓存着, 最后统一给搁在 docx 里


要不先去把mermaid导出照片插进来?

图片数量少且急用的话, 我也觉得别折腾了…
等有时间再慢慢研究