我希望一些选定的(子)字符串作为关键字突出显示(或强调):
\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}
\lstdefinestyle{MyStyle} {
boxpos=c,%
breaklines=true,%
showlines=false,%
numbers=left, %numbers=none,%
numberstyle=\tiny,%
firstnumber=1,%
numbersep=5pt,%
showstringspaces=false,%
frame=none,%frame=single,%
basicstyle=\footnotesize\ttfamily,
keywordstyle=\underline,%
captionpos=b, %
literate={<-}{{$\leftarrow{}$}}2,
rangeprefix=\#\/\/\ ,
rangesuffix=\ \/\/}
\begin{filecontents*}{src.code}
#// start //
A <- `A` 'a' a:B;
B <- `B` 'b' b:<alnum>;
#// end //
\end{filecontents*}
\begin{document}
\lstset{includerangemarker=false,
style=MyStyle}
\lstinputlisting[linerange=start-end,alsoletter={:},morekeywords={A,B,a:,b:}]{src.code}
\end{document}
我就是搞错了。虽然在示例中,“A”、“B”、“b:”按预期标记(带下划线),但“a:”却没有。希望得到一些提示。
答案1
在列表中,关键字始终是一个完整的单词,因此是最大字母序列。 之后alsoletter={:}
,a:B
是字母序列,不是关键字,因此它不会突出显示为关键字。 您可以通过避免 来解决这个问题alsoletter={:}
,然后:
不再是字母,因此它可以用来分隔单词。 当然,此时您不能再使用morekeywords={a:,b:}
。 该包为此目的\listings
有一个特殊的键:包含包含非字母的关键字。otherkeywords
otherkeywords
例如:
\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}
\begin{filecontents*}{src.code}
#// start //
A <- `A` 'a' a:B;
B <- `B` 'b' b:<alnum>;
#// end //
\end{filecontents*}
\begin{document}
\lstinputlisting[keywordstyle=\underline,morekeywords={A,B,a:,b:},otherkeywords={a:,b:}]{src.code}
\end{document}