Pandoc:有哪些可用的语法高亮器?

49

http://pandoc.org/demos.html#examples的18号要点展示了如何通过给--highlight-style参数添加参数来更改语法高亮。例如:

pandoc code.text -s --highlight-style pygments -o example18a.html
pandoc code.text -s --highlight-style kate -o example18b.html
pandoc code.text -s --highlight-style monochrome -o example18c.html
pandoc code.text -s --highlight-style espresso -o example18d.html
pandoc code.text -s --highlight-style haddock -o example18e.html
pandoc code.text -s --highlight-style tango -o example18f.html
pandoc code.text -s --highlight-style zenburn -o example18g.html

我在想这些是否是唯一可用的配色方案。如果不是,我该如何加载其他的语法高亮器?我可以定义自己的吗?


1
使用pandoc现在可以轻松编辑.theme文件,参见我的回答。我相信这是回答你问题中“我能自定义吗?”部分最愉快的方式。 - Clément
4个回答

45
pandoc 2.0.5版本起,您还可以使用--print-highlight-style选项输出一个theme文件并进行编辑。
对我来说,使用这个选项的最佳方式是:
  1. 选择一个令人愉悦的可用样式
  2. 输出其theme文件
  3. 编辑theme文件
  4. 使用它!

1. 可用样式

在已有的样式中选择您的风格:

breezedark

monochrome

kate

zenburn

espresso

haddock

tango

2. 输出其 主题 文件

一旦您确定哪种样式最接近您的需求,您可以输出其 主题 文件,例如对于默认样式pygments

pandoc --print-highlight-style pygments

这样你就可以将这个样式存储在一个文件中,例如使用

pandoc --print-highlight-style pygments > my_style.theme

对于某些 shell,特别是在 Windows 上,使用重定向输出可能会导致编码问题。如果出现这种情况,请改用以下方法:

pandoc -o my_style.theme --print-highlight-style pygments

3. 编辑文件

根据您的需求/口味,使用Skylighting JSON Themes指南编辑文件。

4. 使用文件

在正确的文件夹中,只需使用

pandoc my_file.md --highlight-style my_style.theme -o doc.html

2
这是个天赐之物。我一直在寻找这样的东西。谢谢! - ken
1
谢谢你,Clément!我之前不知道这个新功能。我给你点赞! - Kurt Pfeifle
相关链接:https://dev59.com/iafja4cB1Zd3GeqPpxHH#67335392 - Clément
非常感谢编辑,@tarleb。我刚刚注意到了您的修改,它们真的很大程度上改善了我的回答! - Clément

28
如果你的 pandoc --version 版本号为 1.15.1 (发布日期为 2015 年 10 月 15 日)或更新版本,则可以尝试使用 --bash-completion 参数,以获取所有可用内置高亮样式的完整列表。
运行:
pandoc --bash-completion

如果它运行成功,你会看到大量输出。而且它将远远超出上面的原始问题而有用...
如果--bash-completion可行,则将此行放在您的${HOME}/.bashrc文件末尾(在Mac OS X或Linux上 - 尚未在Windows上工作)。
eval "$(pandoc --bash-completion)"

打开新终端后,您可以使用pandoc命令,并配合"tab completion"使用:

pandoc --h[tab]

会产生
--help     --highlight-style  --html-q-tags

pandoc --hi[tab]

将会产生
pandoc --highlight-style

原问题的答案:

现在再按一次[tab]键,你会看到

espresso   haddock   kate   monochrome  pygments    tango    zenburn

以下是所有可用的语法高亮器列表。为了简化操作,您也可以输入
pandoc --hi[tab][tab]

带有相同结果的方法。

Pandoc的标签补全功能的实用性超越了最初的问题:

Pandoc的bash标签补全功能也适用于所有其他命令行开关:

pandoc -h[tab]

这会显示所有可能的命令行参数列表:
Display all 108 possibilities? (y or n)
--ascii                    --indented-code-classes    --template
--asciimathml              --jsmath                   --title-prefix
--atx-headers              --katex                    --to
--base-header-level        --katex-stylesheet         --toc
--bash-completion          --latex-engine             --toc-depth
--biblatex                 --latex-engine-opt         --trace
--bibliography             --latexmathml              --track-changes
--chapters                 --listings                 --variable
--citation-abbreviations   --mathjax                  --verbose
--columns                  --mathml                   --version
--csl                      --metadata                 --webtex
--css                      --mimetex                  --wrap
--data-dir                 --natbib                   --write
--default-image-extension  --no-highlight             -A
--dpi                      --no-tex-ligatures         -B
--dump-args                --no-wrap                  -D
--email-obfuscation        --normalize                -F
--epub-chapter-level       --number-offset            -H
--epub-cover-image         --number-sections          -M
--epub-embed-font          --old-dashes               -N
--epub-metadata            --output                   -R
--epub-stylesheet          --parse-raw                -S
--extract-media            --preserve-tabs            -T
--file-scope               --print-default-data-file  -V
--filter                   --print-default-template   -c
--from                     --read                     -f
--gladtex                  --reference-docx           -h
--help                     --reference-links          -i
--highlight-style          --reference-odt            -m
--html-q-tags              --section-divs             -o
--id-prefix                --self-contained           -p
--ignore-args              --slide-level              -r
--include-after-body       --smart                    -s
--include-before-body      --standalone               -t
--include-in-header        --tab-stop                 -v
--incremental              --table-of-contents        -w

Pandoc的自动补全功能有一个有趣的应用场景:

pandoc --print-default-d[tab][tab]

显示 pandoc --print-default-data-file 的输出列表。这个列表让您独特地了解到在 Pandoc 执行工作时,它将加载哪些数据文件。例如,您可以像这样调查 Pandoc 默认的 ODT(OpenDocument 文本文件)输出样式的细节:

pandoc --print-default-data-file odt/content.xml \
 | tr " " "\n" \
 | tr "<" "\n" \
 | grep --color "style"

26

根据Pandoc README:

--highlight-style=STYLE|FILE

指定要在突出显示的源代码中使用的着色样式。选项包括pygments(默认值),katemonochromebreezeDarkespressozenburnhaddocktango。 有关pandoc中语法高亮的更多信息,请参见下方的 Syntax highlighting。请参阅 --list-highlight-styles

可以提供带有扩展名.theme的JSON文件,而不是STYLE名称。这将被解析为KDE语法突出显示主题,并(如果有效)用作突出显示样式。要查看可以修改的示例主题,请使用pandoc --print-default-data-file default.theme命令。

skylighting(在旧版本中称为highlighting-kate)用于突出显示。如果您不喜欢提供的任何颜色方案,则可以执行以下操作:

  • 按上述方式指定.theme文件,
  • 在导出为HTML时,会生成<span>标记,您可以使用自定义CSS样式化,或
  • 在导出到LaTeX/PDF时,您需要使用自定义的Pandoc LaTeX 模板,并替换$highlighting-macros$部分为您的自定义颜色定义,如此问题所述。

16

如果您正在使用Pandoc 1.18版(于2016年10月发布)或更高版本,则有一个新答案:

  pandoc --list-highlight-languages

  pandoc --list-highlight-styles

我会给你所有你所询问的信息。

v1.18中添加的其他新的命令行参数如下:

  pandoc --list-input-formats
  pandoc --list-output-formats
  pandoc --list-extensions

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