如何查找非花括号的字符?如果我使用此模式,"[^}]"
则会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}