我有一个列表,需要用字母和数字突出显示关键字。按照这个问题我使用了 来otherkeywords
定义包含数字的关键字。这适用于仅包含字母的关键字(例如FOO
)和仅包含数字的关键字(例如1234
),但不适用于同时包含字母和数字的关键字(例如1234FOO
)。
以下是一个示例文档:
\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{listings}
\renewcommand{\ttdefault}{pcr}
\definecolor{Black}{gray}{0.0}
\definecolor{Blue}{rgb}{0.12,0.29,0.53}
\lstset{
basicstyle=\color{Black}\ttfamily, %
keywordstyle=[1]\color{Blue}\ttfamily\bfseries, %
}
\lstdefinelanguage{mylang}{ %
keywords={FOO,BAR,BAZ,ARG}, %
otherkeywords={1234,XYZ1234,XYZ1234HelloWorld}, %
}
\begin{document}
\begin{lstlisting}[numbers=none,breaklines=true,caption={},language=mylang]
FOO
BAR
BAZ
ARG
1234
XYZ1234
XYZ1234HelloWorld
\end{lstlisting}
\end{document}
生成的 PDF 如下所示:
在此示例中,关键字XYZ1234
和XYZ1234HelloWorld
应该突出显示,但前三个字母(XYZ
)与关键字的其余部分样式不一致。我如何更改语言定义以使突出显示一致?
答案1
这里最简单的做法是将所有数字声明为“字母”,并keywords
仅用键定义所有关键字,otherkeywords
完全避开键:
\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{listings}
\renewcommand{\ttdefault}{pcr}
\definecolor{Black}{gray}{0.0}
\definecolor{Blue}{rgb}{0.12,0.29,0.53}
\lstset{
basicstyle=\color{Black}\ttfamily, %
keywordstyle=[1]\color{Blue}\ttfamily\bfseries, %
}
\lstdefinelanguage{mylang}{ %
alsoletter=0123456789,
keywords={FOO,BAR,BAZ,ARG,1234,XYZ1234,XYZ1234HelloWorld}, %
}
\begin{document}
\begin{lstlisting}[numbers=none,breaklines=true,caption={},language=mylang]
FOO
BAR
BAZ
ARG
1234
XYZ1234
XYZ1234HelloWorld
\end{lstlisting}
\end{document}