Pandoc 美人鱼滤镜

问题描述 投票:0回答:2

我正在尝试使用 this 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 家庭版 潘多克 2.14.0.1

谢谢

html filter markdown pandoc mermaid
2个回答
6
投票

不是解决问题,而是提供一种不同的方法来实现相同的目标,以防它对到达这里的其他人有用:

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

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
(我一开始错过了这一点并且非常困惑)

© www.soinside.com 2019 - 2024. All rights reserved.