使用 minted 突出显示 JSON 代码片段

使用 minted 突出显示 JSON 代码片段

我有一个 JSON 代码片段,我想将其包含到我的 LaTeX 文档中:

"builders": [
    {
        "type": "test",
        "image": "ubuntu:latest",
        "changes": [
            "EXPOSE 123 456",
            "CMD [\"/tmp/entrypoint.sh\"]"
        ],
        "commit": true
    }
]

我想以类似于 Visual Studio Code 突出显示的方式突出显示它:

  • 关键字颜色相同
  • 压痕量相同
  • 如果可能的话最好使用这些垂直线
  • 左侧的行号(图中未显示)
  • 围绕最终代码块的单帧
  • 显然没有黑色背景颜色

VSCode 示例

我听说过,minted因为它似乎是完成这项任务的不错选择。然而,我的尝试看起来很糟糕,与图片完全不符。

我在以不同方式突出显示键和值时遇到了很多问题,因为它们似乎都被解释为字符串 - 因此当指定字符串颜色时会以相同的颜色突出显示。

另外,我不想把右侧的每个值都写成关键字……一定有一种方法可以根据某种逻辑自动以不同的方式突出显示键和值。另外,我对垂直线一无所知。也无法使行号正常工作。此外,字体看起来完全不同,有没有办法使用看起来相似的字体?

由于我无法使用 minted 包获得正确的结果,因此我也尝试了一下该listings包,但效果仍然不太好。这是我目前得到的结果:

\definecolor{keycolor}{HTML}{569CD6}
\definecolor{valuecolor}{HTML}{FF0000}

\lstdefinelanguage{js}{
  keywords={type,image,changes, CMD, WORKDIR, EXPOSE, builders, commit},
  keywordstyle=\color{keycolor}\bfseries,
  keywords=[2]{test},
  keywordstyle=[2]\color{valuecolor}\bfseries,
  sensitive=false,
  morecomment=[s]{/*}{*/}
}

\lstset{
   language=js,
   frame=single,
   extendedchars=true,
   basicstyle=\footnotesize\ttfamily,
   showstringspaces=false,
   showspaces=false,
   tabsize=2,
   breaklines=true,
   showtabs=false
}

进而:

\begin{lstlisting}
"builders": [
    {
        "type": "test",
        "image": "ubuntu:latest",
        "changes": [
            "EXPOSE 123 456",
            "CMD [\"/tmp/entrypoint.sh\"]"
        ],
        "commit": true
    }
]
\end{lstlisting}

看起来像这样:

我的尝试

我怎样才能使它尽可能接近 VSCode 示例?我可以使用最适合此任务的任何包。

相关内容