在 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}