如何检测列表包中以 # 开头的单词?

如何检测列表包中以 # 开头的单词?

我正在使用 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}

相关内容