![轻量级语法高亮:无需使用内联列表即可高亮关键字](https://linux22.com/image/444741/%E8%BD%BB%E9%87%8F%E7%BA%A7%E8%AF%AD%E6%B3%95%E9%AB%98%E4%BA%AE%EF%BC%9A%E6%97%A0%E9%9C%80%E4%BD%BF%E7%94%A8%E5%86%85%E8%81%94%E5%88%97%E8%A1%A8%E5%8D%B3%E5%8F%AF%E9%AB%98%E4%BA%AE%E5%85%B3%E9%94%AE%E5%AD%97.png)
我正在寻找一种轻量级的替代内联代码列表的方法,能够使关键字加粗。我设想了类似以下内容的方法:
\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}