使用 luacode 的模式语法

使用 luacode 的模式语法

如何查找非花括号的字符?如果我使用此模式,"[^}]" 则会string.gsub出错。

编辑:这是不起作用的代码部分:

\usepackage{luacode}

\begin{luacode}
    function colorize ( s ) 
        s = string.gsub ( s , "K_%w" , "\\textcolor[HTML]{00804d}{%0}" )
        s = string.gsub ( s , "(A)([^}])" , "\\textcolor[HTML]{005ce6}{%1}%2"))         
        return s
    end
\end{luacode}

\newcommand{\colorizeOn}{\directlua{luatexbase.add_to_callback("process_input_buffer", colorize , "colorize" )}}
\newcommand{\colorizeOff}{\directlua{luatexbase.remove_from_callback("process_input_buffer", "colorize" )}}

脚本的第一部分是正常的(它用相同但带有颜色代码的字符替换所有“K_”后跟字母数字字符),当添加第二部分(应该用带有颜色代码的“A”替换所有不带“}”的“A”)时,它会返回以下错误:

Argument of \luacode@grab@lines has an extra }. s = string.gsub ( s , "(A)([^}
Paragraph ended before \luacode@grab@lines was complete. s = string.gsub ( s , "(A)([^}
Extra }, or forgotten \endgroup. s = string.gsub ( s , "(A)([^}
Missing \begin{document}. s = string.gsub ( s , "(A)([^}]
Missing \begin{document}. s = string.gsub ( s , "(A)([^}])" , "\\t

主要问题是帽子字符,事实上,如果我使用这个模式,"[}]"我会得到类似的错误(编译器希望在之前找到相应的“{”),而在我的例子中,我可以使用这个模式轻松修复它"[{}]"。问题是我想要这个模式的否定,应该这样写,但那"[^{}]"不起作用。

编辑2:正是我所期望的。

答案1

我建议您使用luacode*环境而不是luacode环境。

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor,luacode}
\begin{luacode*}
function colorize ( s ) 
    s = string.gsub ( s , "K_%w" , "\\textcolor{red}{%0}" )
    s = string.gsub ( s , "(A)([^{}])" , "\\textcolor{blue}{%1}%2")     
    return s
end
\end{luacode*}

\newcommand{\colorizeOn}{\directlua{ luatexbase.add_to_callback( 
   "process_input_buffer", colorize , "colorize" )}}
\newcommand{\colorizeOff}{\directlua{ luatexbase.remove_from_callback( 
   "process_input_buffer", "colorize" )}}

\begin{document}
$K_b$, Au, A{u}

\colorizeOn
$K_b$, Au, A{u}
\end{document}

相关内容