在 minted 中强调某个关键词

在 minted 中强调某个关键词

在 minted 中,如何通过加粗来突出显示特定关键字集。例如,考虑 MWE,

\documentclass[a4paper , 12pt]{article}
\usepackage{minted}
\usemintedstyle{manni}
\begin{document}
\begin{minted}{java}
class Test
{
    public static void main(String args[])
    {
        System.out.println("Hello World");
    }
}
\end{minted}
\end{document} 

以上代码生成了以下内容:
在此处输入图片描述
现在,每当我使用关键字时class,它都应该以粗体显示。我该怎么做呢?

答案1

据我所知,没有这样的选项minted。但使用起来listings很容易。你可以使用

escapechar=!,   %% use any character as you wish

或者

moredelim=[is][\bfseries\color{magenta}]{`}{`},   %% same as above

或者

escapeinside={*@}{@*}     %% Use as *@ \bfseries class @*

ETC。

以下是一些示例:

\documentclass[a4paper,11pt]{article}
\usepackage{xcolor}
\usepackage{courier}
\usepackage{listings} % for code snippets

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=single,
  framerule=0pt,
  backgroundcolor=\color{olive!10},
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=fullflexible,
  basicstyle={\footnotesize\ttfamily},
  numbers=left,
  numbersep=10pt,
  numberstyle=\scriptsize\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  escapechar=!,
  moredelim=[is][\bfseries\color{magenta}]{`}{`},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=2
}

\begin{document}
\begin{lstlisting}[escapechar=!,]
!\bfseries\color{blue} class! Test
{
    public static void main(String args[])
    {
        System.out.println("Hello World");
    }
}
`class`
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

关键字class已以粗体打印。问题是默认的 Computer Modern Typewriter 没有粗体变体,请参阅将 \ttfamily 与 \bfseries 结合使用(或如何在等宽字体中启用粗体)了解详情。

事实上,如果我们遵循其中一条建议,示例文件

\documentclass[a4paper , 12pt]{article}
\usepackage[lighttt]{lmodern}
\usepackage{minted}
\usemintedstyle{manni}
\begin{document}
\begin{minted}{java}
class Test
{
    public static void main(String args[])
    {
        System.out.println("Hello World");
    }
}
\end{minted}
\end{document}

将打印

在此处输入图片描述

但是,这里有一组用于覆盖特定关键字样式的宏(感谢 Marco Daniel 提出这个想法)。

\documentclass[a4paper , 12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\usepackage[lighttt]{lmodern}
\usepackage{minted}
\usemintedstyle{manni}

\ExplSyntaxOn
\NewDocumentCommand \AddWordToMinted { m m }
 {
  \prop_gput:Nnn \g_xminted_highlight_prop { #1 } { #2 }
 }
\prop_new:N \g_xminted_highlight_prop

\AtBeginDocument{
  \cs_set_eq:NN \xminted_pydo:nn \PY
  \cs_new_protected:Npn \xminted_newpydo:nn #1 #2
   {
    \xminted_pydo:nn { #1 } { \prop_get:Nn \g_xminted_highlight_prop { #2 } #2 }
   }
  \cs_set_eq:NN \PY \xminted_newpydo:nn
}

\ExplSyntaxOff

%% Just to experiment
\AddWordToMinted{class}{\sffamily}
\AddWordToMinted{void}{\itshape}

\begin{document}

\begin{minted}{java}
class Test
{
    public static void main(String args[])
    {
        System.out.println("Hello World");
    }
}
\end{minted}
\end{document}

在此处输入图片描述

答案3

尝试使用逃出内部2015 年 9 月 9 日最新发布的 v2.1 版本中提供了该选项。请参阅此处的文档http://ctan.mirrorcatalogs.com/macros/latex/contrib/minted/minted.pdf. 文献逃出内部如下所述。

在 (string) 中指定的两个字符之间转义为 LATEX。两个字符之间的所有代码都将被解释为 LATEX 并进行相应的排版。这允许进行额外的格式化。转义字符不必相同。特殊 LATEX 字符用作转义字符时必须进行转义(例如,escapeinside=#\%)。需要 Pygments 2.0+。

\begin{minted}[escapeinside=||]{py}
  def f(x):
     y = x|\colorbox{green}{**}|2
     return y
\end{minted}

导致 在此处输入图片描述

相关内容