Passa o caractere anterior para um comando LuaLaTeX

Passa o caractere anterior para um comando LuaLaTeX

Quero tornar um caractere ativo/sensível e passar seu caractere anterior como argumento de algum comando. Eu poderia fazer isso usando o mecanismo e luacodepacote LuaLaTeX. Graças aesseeessepublicar.

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

mas isso parece não funcionar com caracteres diacríticos dependentes. Veja o exemplo a seguir -

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

Provavelmente o diacrítico dependente não é interpretado da mesma forma que um caractere normal. Alguém pode me explicar o que está exatamente errado no segundo código? Quero que a saída de ambos os códigos seja idêntica, ou seja, aaonde o segundo aesteja em negrito.

Responder1

Os caracteres diacríticos dependentes são um tanto especiais; Presumirei que eles nunca ocorrem dentro dos nomes de comandos e ambientes LaTeX. Se essa suposição estiver correta, não há necessidade do procedimento gsub de dois estágios empregado em seu código.

O código a seguir pressupõe que o caractere imediatamente anterior ao caractere diacrítico dependente é um caractere alfabético ( %a).

insira a descrição da imagem aqui

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

informação relacionada