\def\mylstwd{.55em} \lstdefinelanguage{expkv}[primitive]{TeX} { ,moretexcs=[2]% e-TeX { expanded, numexpr, protected, unexpanded, ifdefined, detokenize, } ,moretexcs=[3]% plain/LaTeX/ConTeXt { approx, begin,end, cdot, emph,empty, item, LaTeX, makeatletter,makeatother,multicolumn, newcommand,renewcommand,newdimen,newif,newcount,NewDocumentCommand, usepackage,RequirePackage,ProvidesPackage, raggedright, rule, space,stop, smallskip,medskip,bigskip, TeX, textit,texttt, usepackage, usemodule, @gobble,@gobbletwo,@firstofone,@empty, ExplSyntaxOn,ExplSyntaxOff, } ,moretexcs=[4]% used packages { % xfp fpeval, % keyval setkeys, % kvsetkeys kvsetkeys, % color textcolor, % yax defactiveparameter,storevalue,setparameterlist, % graphics includegraphics, } ,moretexcs=[5]% expkv macros { ekvdef,ekvdefNoVal,% ekvlet,ekvletNoVal,ekvletkv,ekvletkvNoVal,% ekvdefunknown,ekvdefunknownNoVal,% ekvletunknown,ekvletunknownNoVal,% ekvredirectunknown,ekvredirectunknownNoVal,% ekvset,ekvsetSneaked,% ekvsetdef,ekvsetSneakeddef,ekvsetdefSneaked,% ekvcompile,% ekvparse,% ekvVersion,ekvDate,% ekvifdefined,ekvifdefinedNoVal,ekvifdefinedset,% ekvbreak,ekvbreakPreSneak,ekvbreakPostSneak,% ekvsneak,ekvsneakPre,% ekvchangeset,% ekvmorekv,% ekvoptarg,ekvoptargTF,% ekvcsvloop,% ekverr,% ekv@name,% } ,moretexcs=[6]% expkv-cs macros { ekvcSecondaryKeys,% ekvcSplit,ekvcSplitAndForward,ekvcSplitAndUse,% ekvcHash,ekvcHashAndForward,ekvcHashAndUse,% ekvcValue,ekvcValueFast,ekvcValueSplit,ekvcValueSplitFast,% ekvcChange,% ekvcPass,% } ,moretexcs=[7]% expkv-def macros { ekvdefinekeys } ,moretexcs=[8]% expkv-pop macros { ekvpNewParser, ekvpDefType, ekvpDefPrefix,ekvpDefAutoPrefix,ekvpDefPrefixStore,ekvpDefPrefixLet, ekvpLet, ekvpValueAlwaysRequired,ekvpDefNoValue,ekvpUseNoValueMarker, ekvpDefNoValuePrefix,ekvpDefNoType,ekvpDefNoValue, ekvpEOP,ekvpGobbleP,ekvpEOT,ekvpGobbleT,ekvpEOA,ekvpGobbleA, ekvpIfNoVal, ekvpAssertIf,ekvpAssertIfNot,ekvpAssertTF,ekvpAssertTFNot, ekvpAssertValue,ekvpAssertNoValue, ekvpAssertOneValue,ekvpAssertTwoValues, ekvpParse, } ,moretexcs=[9]% expkv-opt macros { ekvoProcessOptions,% ekvoProcessLocalOptions,ekvoProcessGlobalOptions,% ekvoProcessFutureOptions,ekvoProcessOptionsList,% ekvoUseUnknownHandlers,% ekvoVersion,ekvoDate,% } ,alsoletter={_:} ,moretexcs=[10]% expl3 { cs_new_eq:NN, tl_count_tokens:n, } } \colorlet{codeparam}{cyan!65!black} \lstdefinestyle{expkv} { texcsstyle=*[5]{\bfseries\color{ekvred}} % expkv ,texcsstyle=*[6]{\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\color{ekvred}} % expkv-opt } \lstdefinestyle{expkv-cs} { texcsstyle=*[5]{\color{ekvred}} % expkv ,texcsstyle=*[6]{\bfseries\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\color{ekvred}} % expkv-opt } \lstdefinestyle{expkv-def} { texcsstyle=*[5]{\color{ekvred}} % expkv ,texcsstyle=*[6]{\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\bfseries\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\color{ekvred}} % expkv-opt } \lstdefinestyle{expkv-pop} { texcsstyle=*[5]{\color{ekvred}} % expkv ,texcsstyle=*[6]{\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\bfseries\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\color{ekvred}} % expkv-opt } \lstdefinestyle{expkv-opt} { texcsstyle=*[5]{\color{ekvred}} % expkv ,texcsstyle=*[6]{\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\bfseries\color{ekvred}} % expkv-opt } \lstdefinestyle{expkv-all} { texcsstyle=*[5]{\bfseries\color{ekvred}} % expkv ,texcsstyle=*[6]{\bfseries\color{ekvred}} % expkv-cs ,texcsstyle=*[7]{\bfseries\color{ekvred}} % expkv-def ,texcsstyle=*[8]{\bfseries\color{ekvred}} % expkv-pop ,texcsstyle=*[9]{\bfseries\color{ekvred}} % expkv-opt } \lstset { ,language=expkv ,style=expkv ,flexiblecolumns=false ,basewidth=\mylstwd %,basicstyle=\fontfamily{lmtt}\selectfont %,basicstyle=\fontfamily{GoMono-TLF}\selectfont%\itshape %,basicstyle=\fontfamily{jkp}\selectfont%\itshape %,basicstyle=\fontfamily{jkptt}\selectfont%\itshape ,basicstyle=\fontfamily{txtt}\selectfont%\itshape ,texcsstyle=*[1]{\bfseries\color{ekvgrey}} % primitives ,texcsstyle=*[2]{\bfseries\color{ekvgrey}} % e-TeX ,texcsstyle=*[3]{\bfseries\color{ekvgrey}} % plain/LaTeX macros ,texcsstyle=*[4]{\bfseries\color{ekvgrey}} % macros of other packages ,texcsstyle=*[10]{\bfseries\color{ekvgrey}} % macros of expl3 ,commentstyle=\color[gray]{0.4} ,literate= {\{} {{\CodeUpBf\{}}{1} {\}} {{\CodeUpBf\}}}{1} {$} {{\CodeUpBf\$}}{1} {[} {{\CodeUp[}}{1} {]} {{\CodeUp]}}{1} {(} {{\CodeUp(}}{1} {)} {{\CodeUp)}}{1} {*} {{$*$}}{1} {1} {{\CodeUp{1}}}{1} {2} {{\CodeUp{2}}}{1} {3} {{\CodeUp{3}}}{1} {4} {{\CodeUp{4}}}{1} {5} {{\CodeUp{5}}}{1} {6} {{\CodeUp{6}}}{1} {7} {{\CodeUp{7}}}{1} {8} {{\CodeUp{8}}}{1} {9} {{\CodeUp{9}}}{1} {0} {{\CodeUp{0}}}{1} {##} {{\CodeColored{codeparam}{1}{\#}}}{1} {##1}{{\CodeColored{codeparam}{2}{\#1}}}{2} {##2}{{\CodeColored{codeparam}{2}{\#2}}}{2} {##3}{{\CodeColored{codeparam}{2}{\#3}}}{2} {##4}{{\CodeColored{codeparam}{2}{\#4}}}{2} {##5}{{\CodeColored{codeparam}{2}{\#5}}}{2} {##6}{{\CodeColored{codeparam}{2}{\#6}}}{2} {##7}{{\CodeColored{codeparam}{2}{\#7}}}{2} {##8}{{\CodeColored{codeparam}{2}{\#8}}}{2} {##9}{{\CodeColored{codeparam}{2}{\#9}}}{2} {}{{$\langle$}key{$\rangle$}}{5} {}{{$\langle$}set{$\rangle$}}{5} {}{{$\langle$}set1{$\rangle$}}{6} {}{{$\langle$}set2{$\rangle$}}{6} %,literate=*{}{\key}{4}{}{\set}{4} } \newcommand*\CodeColored[3]{\textcolor{#1}{\makebox[\dimexpr\mylstwd*#2]{#3}}} \newcommand*\CodeUpBf[1]{\makebox[\mylstwd]{\textup{\textbf{#1}}}} \newcommand*\CodeUp[1]{\makebox[\mylstwd]{\textup{#1}}}