将前面的字符传递给命令 LuaLaTeX

将前面的字符传递给命令 LuaLaTeX

我想让一个字符变为活动/敏感字符,并将其前面的字符作为某个命令的参数传递。我可以使用 LuaLaTeX 引擎和luacode包来实现。感谢邮政。

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function myligs ( s )
   s = unicode.utf8.gsub ( s , '(\\?)([%a@]+)' , function( backslash, text )
       if backslash=='' then 
           text = unicode.utf8.gsub(text, '(.)(æ)', '%1%\\textbf{%1}' )  
       end
       return backslash .. text
   end)
   return s
end
\end{luacode}

\begin{document}
\directlua{luatexbase.add_to_callback("process_input_buffer", myligs, "myligs")}

\end{document}

但这似乎不适用于从属变音字符。请参见以下示例 -

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function myligs ( s )
   s = unicode.utf8.gsub ( s , '(\\?)([%a@]+)' , function( backslash, text )
       if backslash=='' then 
           text = unicode.utf8.gsub(text, '(.)(◌́)', '%1%\\textbf{%1}' )  
       end
       return backslash .. text
   end)
   return s
end
\end{luacode}

\begin{document}
\directlua{luatexbase.add_to_callback("process_input_buffer", myligs, "myligs")}

a◌́
\end{document}

可能从属变音符号的解释方式与普通字符不同。有人能解释一下第二个代码到底哪里错了吗?我希望这两个代码的输出相同,即aa第二个代码a为粗体。

答案1

从属变音符号有些特殊;我假设它们永远不会出现在 LaTeX 命令和环境的名称中。如果这个假设是正确的,那么你的代码就不需要使用两阶段 gsub 过程了。

以下代码假定从属变音字符之前的字符是字母字符 ( %a)。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{luacode}
function makebold ( s )
   return ( unicode.utf8.gsub ( s , '(%a)◌́' , '%1\\textbf{%1}' ) )
end
\end{luacode}

\begin{document}
a◌́

% Assign 'makebold' to 'process_input_buffer' callback:
\directlua{luatexbase.add_to_callback("process_input_buffer", makebold, "makebold")}

a◌́
\end{document}

相关内容