Передать предыдущий символ команде LuaLaTeX

Передать предыдущий символ команде LuaLaTeX

Я хочу сделать символ активным/чувствительным и передать его предшествующий символ как аргумент некоторой команды. Я мог бы сделать это с помощью движка и luacodeпакета LuaLaTeX. Спасибоэтотиэтотпочта.

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

Связанный контент