轻量级语法高亮:无需使用内联列表即可高亮关键字

轻量级语法高亮:无需使用内联列表即可高亮关键字

我正在寻找一种轻量级的替代内联代码列表的方法,能够使关键字加粗。我设想了类似以下内容的方法:

\declarekeywords{if,then,else}
\declarestylecommand\textbf
The expression \texttt{\stylekeywords{if a then b else c}} evaluates to ...

应扩展为:

The expression \texttt{\textbf{if} a \textbf{then} b \textbf{else} c} evaluates to ...

这个想法是,这个命令可以适应在许多不同的环境中工作,例如数学模式:

\stylekeywords{let $x = a + b$ in $f(x)$}

答案1

expl3 中的正则表达式可以添加格式:

正则表达式高亮

平均能量损失

\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}

\ExplSyntaxOn

\tl_new:N \l_mykeywords_tl

\NewDocumentCommand { \stylekeywords } { m } {%
\tl_set:Nn 
     \l_mykeywords_tl 
     { #1 }
\dostylekeywords
}

\newcommand{\simplehl}[1]{
\regex_replace_all:nnN 
       { (#1) } 
       { 
            \c{textcolor} \cB\{ blue \cE\} \cB\} 
                   \c{textbf} \cB\{ \0 \cE\} 
            \cE\} 
            } 
       \l_mykeywords_tl

}

\newcommand{\dostylekeywords}{
    \simplehl{[tT]hen}
    \simplehl{[eE]lse}
    \simplehl{let}
    \simplehl{[iI]f}
    \simplehl{in}

    \tl_use:N 
       \l_mykeywords_tl
}

\ExplSyntaxOff

\begin{document}

The expression \texttt{\stylekeywords{if a then b else c}} evaluates to ...

\stylekeywords{let $x = a + b$ in $f(x)$}

\end{document}

相关内容