如何在列表关键字中使用冒号?

如何在列表关键字中使用冒号?

对于 CSS 代码的使用我定义了以下样式:

\lstdefinelanguage{CSS}{
    sensitive=true,
    alsodigit={-},
    keywords={transform, transition-property, transition-duration, transition-timing-functio},              
    morecomment=[l]{//},
    morecomment=[s]{/*}{*/},
    morestring=[b]',
    morestring=[b]"
}

在 CSS3 中,transform可以是关键字,也可以是属性。因此,在我的文档中,两种变体都显示为蓝色。

截屏:

s

关键字总是以冒号结尾。此规则可用于防止属性被标记为关键字吗?

梅威瑟:

\documentclass{article}

\usepackage{listings}
\usepackage{color}

\definecolor{lightgray}{rgb}{0.95, 0.95, 0.95}
\definecolor{darkgray}{rgb}{0.4, 0.4, 0.4}
\definecolor{purple}{rgb}{0.65, 0.12, 0.82}

\lstdefinelanguage{CSS}{
    keywords={color,background-image,margin,padding,font,weight,display,position,top,left,right,bottom,list,style,border,size,white,space,min,width, transform, transition, transition-property, transition-duration, transition-timing-function},
    alsodigit={-},
    sensitive=true,
    morecomment=[l]{//},
    morecomment=[s]{/*}{*/},
    morestring=[b]',
    morestring=[b]"
}

\lstset{%
    % General design
    backgroundcolor=\color{lightgray},
    basicstyle={\small\ttfamily},   
    frame=l,
    % Code design
    identifierstyle=\color{black},
    keywordstyle=\color{blue}\bfseries,
    ndkeywordstyle=\color{greenCode}\bfseries,
    stringstyle=\color{ocherCode}\ttfamily,
    commentstyle=\color{darkgray}\ttfamily,
    % Code
    language={CSS},
    tabsize=2,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    extendedchars=true,
    breaklines=true,
    % line-numbers
    xleftmargin={0.75cm},
    numbers=left,
    stepnumber=1,
    firstnumber=1,
    numberfirstline=true,
}

\begin{document}
  \begin{lstlisting}
        #box {
            transition-property: transform;
            transition-duration: 2s;
            transition-timing-function: linear;
      }
  \end{lstlisting}
\end{document}

答案1

我当前的解决方案是在末尾添加一个冒号所有关键字并使用alsoletter={-}alsodigit={:}

例子:

\lstdefinelanguage{CSS}{
    keywords={transform:, transition-property:, transition-duration:, transition-timing-function:},
    sensitive=true,
    morecomment=[l]{//},
    morecomment=[s]{/*}{*/},
    morestring=[b]',
    morestring=[b]",        
    alsoletter={-},
    alsodigit={:}
}

这很烦人,但确实有效。如果能将所有内容定义为空格和冒号之间的关键字,那就更好了。

答案2

更新

根据建议奎伯比尔贝尔,你的问题的答案是是的。使用moredelim=[s][]{:}{;}应该可以解决问题,并且不再需要更改代码中的任何内容。这样, 和 之间的所有内容(包括:和 );都以黑色排版。

原始帖子

您可以使用moredelim=[is][\bfseries]{/@}{@/}in\lstdefinelanguage\lstset。这里,分隔符 /@@/被使用。(您可以使用语言中未使用的字符或字符组合来更改它们。)它们不会出现在输出中,但会将它们之间的任何字符排版为粗体。

代码

以下是完整的代码,其中包含我插入的带注释的部分。

\documentclass{article}

\usepackage{listings}
\usepackage{color}

\definecolor{lightgray}{rgb}{0.95, 0.95, 0.95}
\definecolor{darkgray}{rgb}{0.4, 0.4, 0.4}
\definecolor{purple}{rgb}{0.65, 0.12, 0.82}

\lstdefinelanguage{CSS}{
    keywords={color,background-image,margin,padding,font,weight,display,position,top,left,right,bottom,list,style,border,size,white,space,min,width, transform, transition, transition-property, transition-duration, transition-timing-function},
    alsodigit={-},
    sensitive=true,
    morecomment=[l]{//},
    morecomment=[s]{/*}{*/},
    morestring=[b]',
    morestring=[b]",
    moredelim=[is][\bfseries]{/@}{@/}, % Typesets characters between /@ and @/ delimeters in boldface.
}

\lstset{%
    % General design
    backgroundcolor=\color{lightgray},
    basicstyle={\small\ttfamily},   
    frame=l,
    % Code design
    identifierstyle=\color{black},
    keywordstyle=\color{blue}\bfseries,
    ndkeywordstyle=\color{greenCode}\bfseries,
    stringstyle=\color{ocherCode}\ttfamily,
    commentstyle=\color{darkgray}\ttfamily,
    % Code
    language={CSS},
    tabsize=2,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    extendedchars=true,
    breaklines=true,
    % line-numbers
    xleftmargin={0.75cm},
    numbers=left,
    stepnumber=1,
    firstnumber=1,
    numberfirstline=true,
}

% See how the delimeters are used below.
\begin{document}
  \begin{lstlisting}
        #box {
            transition-property: /@transform@/;
            transition-duration: 2s;
            transition-timing-function: linear;
      }
  \end{lstlisting}
\end{document}

输出

在此处输入图片描述

相关内容