Pandoc Mermaid 过滤器

3

我正在尝试使用这个 pandoc 过滤器将 markdown 转换为 HTML。这是示例文件:

gantt
        dateFormat  YYYY-MM-DD
        title Adding GANTT diagram functionality to mermaid
        section A section
        Completed task            :done,    des1, 2014-01-06,2014-01-08
        Active task               :active,  des2, 2014-01-09, 3d
        Future task               :         des3, after des2, 5d
        Future task2               :         des4, after des3, 5d
        section Critical tasks
        Completed task in the critical line :crit, done, 2014-01-06,24h
        Implement parser and jison          :crit, done, after des1, 2d
        Create tests for parser             :crit, active, 3d
        Future task in critical line        :crit, 5d
        Create tests for renderer           :2d
        Add to mermaid                      :1d

这是我正在运行的命令:

pandoc file.md -f markdown -o out.html --filter=pandoc-mermaid

这是错误信息:
File "D:\Anaconda3\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:\Anaconda3\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\Anaconda3\Scripts\pandoc-mermaid.exe\__main__.py", line 7, in <module>
  File "D:\Anaconda3\lib\site-packages\pandoc_mermaid_filter.py", line 38, in main
    toJSONFilter(mermaid)
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 130, in toJSONFilter
    toJSONFilters([action])
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 164, in toJSONFilters
    sys.stdout.write(applyJSONFilters(actions, source, format))
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 195, in applyJSONFilters
    altered = walk(altered, action, format, meta)
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 123, in walk
    return {k: walk(v, action, format, meta) for k, v in x.items()}
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 123, in <dictcomp>
    return {k: walk(v, action, format, meta) for k, v in x.items()}
  File "D:\Anaconda3\lib\site-packages\pandocfilters.py", line 110, in walk
    res = action(item['t'],
  File "D:\Anaconda3\lib\site-packages\pandoc_mermaid_filter.py", line 31, in mermaid
    subprocess.check_call([MERMAID_BIN, "-i", src, "-o", dest])
  File "D:\Anaconda3\lib\subprocess.py", line 359, in check_call
    retcode = call(*popenargs, **kwargs)
  File "D:\Anaconda3\lib\subprocess.py", line 340, in call
    with Popen(*popenargs, **kwargs) as p:
  File "D:\Anaconda3\lib\subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "D:\Anaconda3\lib\subprocess.py", line 1311, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] El sistema no puede encontrar el archivo especificado
Error running filter pandoc-mermaid:
Filter returned error status 1

可执行文件所在的文件夹显然被添加到了路径中。有什么想法可以解决吗?

规格: Windows 10家庭版 pandoc 2.14.0.1

谢谢


不确定发生了什么,但你可以尝试使用 Quarto。它基于 pandoc 并附带对 mermaid 的内置支持。尝试使用 quarto render file.md --to=html - tarleb
我一定会的。谢谢! - Pablo
2个回答

5
不是解决问题,而是提供一种不同的方法来实现相同的目标,以便于其他人到达这里时有用:
Mermaid-cli具有该功能,可用作Markdown的预处理器。
因此,您可以执行以下操作:
mkdir build
npx -p @mermaid-js/mermaid-cli mmdc -i file.md -o build/output-svg.md
# Generates lots of output-svg-1.svg files linked from the doc
cd build
pandoc output-svg.md -o output.html

它默认使用SVG图像(通常适用于HTML,但在针对PDF时失败)。它还有一个较少记录的功能,可以强制生成PNG格式。
npx -p @mermaid-js/mermaid-cli mmdc -i file.md --outputFormat=png -o build/output-png.md
# Generates lots of output-png-1.png files linked from the doc
cd build
pandoc output-png.md -o output.pdf

谢谢。这对我来说是一个更好的解决方案。使用mermaid-cli,我现在可以使用最新的mermaid功能,而mermaid-filter则无法实现这一点。 - undefined

5

我在使用NPM库时取得了成功,该库为Pandoc添加了类似的Mermaid过滤器:raghur/mermaid-filter

你应该能够做到:

pandoc file.md -f markdown -o out.html --filter=mermaid-filter

重要提示:在Windows上,您需要将过滤器指定为--filter mermaid-filter.cmd而不是--filter mermaid-filter(我一开始忘了这个,非常困惑)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接