我正在使用 listings 包编写一些代码,我需要检测以数字符号 ( ) 开头的单词#
并应用某种样式。例如,如果我有以下代码:
something #foo anotherThing
我想将‘#foo’变为蓝色。
到目前为止我已经:
\lstset{
....
identifierstyle=\idstyle,
}
进而:
\makeatletter
\newcommand*\idstyle{%
\expandafter\id@style\the\lst@token\relax
}
\def\id@style#1#2\relax{%
\ifcat#1\relax\else
\ifnum`#1=\uccode`#1%
\small\ttfamily\color{red!100!black}
\fi
\ifnum\pdfstrcmp{#1}{\#}=0
\small\ttfamily\color{blue!100!black}
\fi
\ifnum`#1= 35%
\small\ttfamily\color{blue!100!black}
\fi
\fi
}
\makeatother
因此,我尝试将以 开头的单词设置为蓝色#
。第一次尝试(使用\pdfstrcmp
)对其他类型的字符有效,但对 无效#
。我无法对其进行 scape。我尝试使用 、 、 等多种方式进行 scape ,但#
均无效。\#
\#\
|\verb#|
第二次尝试时,我尝试通过比较unicode值来进行,但也没有成功。
还要注意的是,我想同时为以大写字母开头的单词添加颜色(不同的颜色)。那么我怎样才能同时拥有这两种颜色(为以大写字母开头的单词和以 开头的单词设置不同的颜色\#
?
抱歉,我问了这个问题,但是我是 Latex 的新手...
有什么想法我该如何获得它?
答案1
我会尽力回答你的问题。符号#
是一个特定的字符,也在内listings
。要检测标识符样式中的符号,您必须将其声明#
为字母。默认情况下,它被声明为“其他”。表 2:标准字符表伟大的文献显示默认设置。因此您可以执行以下操作:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
alsoletter=\#,
identifierstyle=\idstyle,
}
\makeatletter
\newcommand*\idstyle[1]{%
\expandafter\id@style\the\lst@token{#1}\relax%
}
\def\id@style#1#2\relax{%
\ifnum\pdfstrcmp{#1}{\#}=0%
\small\ttfamily\color{blue!100!black} \the\lst@token%
\else%
\edef\tempa{\uccode`#1}%
\edef\tempb{`#1}%
\ifnum\tempa=\tempb%
\small\ttfamily\color{red!100!black} \the\lst@token%
\else%
\the\lst@token%
\fi%
\fi%
}
\makeatother
\begin{document}
\begin{lstlisting}
something #foo another Thing
\end{lstlisting}
\end{document}
答案2
您可以使用 来keywordsprefix=\#
指定以以下开头的任何内容都#
将被视为关键字:
笔记:
- 请参阅与此相关的限制,记录在列表语言定义关键字后缀。
代码:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
backgroundcolor=\color{yellow!20},%
basicstyle=\small\ttfamily,%
keywordstyle=\color{blue}\bfseries,%
language=Java,%
keywordsprefix=\#,%
alsoletter=\#,% if you also want the "#" to be highlighted
}%
\begin{document}
\begin{lstlisting}
something #foo anotherThing
\end{lstlisting}
\end{document}