对于 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
可以是关键字,也可以是属性。因此,在我的文档中,两种变体都显示为蓝色。
截屏:
关键字总是以冒号结尾。此规则可用于防止属性被标记为关键字吗?
梅威瑟:
\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}