Pasar el carácter anterior a un comando LuaLaTeX

Pasar el carácter anterior a un comando LuaLaTeX

Quiero hacer que un carácter sea activo/sensible y pasar su carácter anterior como argumento de algún comando. Podría hacerlo usando el motor y luacodeel paquete LuaLaTeX. Gracias aesteyestecorreo.

% !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}

pero esto parece no funcionar con caracteres diacríticos dependientes. Vea el siguiente ejemplo:

% !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}

Probablemente el signo diacrítico dependiente no se interpreta de la misma manera que un carácter normal. ¿Alguien puede explicarme qué es exactamente lo que está mal en el segundo código? Quiero que el resultado de ambos códigos sea idéntico, es decir, aaque el segundo aesté en negrita.

Respuesta1

Los caracteres diacríticos dependientes son algo especiales; Asumiré que nunca aparecen dentro de los nombres de los comandos y entornos de LaTeX. Si esta suposición es correcta, no es necesario el procedimiento gsub de dos etapas empleado en su código.

El siguiente código supone que el carácter inmediatamente anterior al carácter diacrítico dependiente es un carácter alfabético ( %a).

ingrese la descripción de la imagen aquí

% !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}

información relacionada