前の文字をコマンドに渡す 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}

おそらく、従属分音記号は通常の文字と同じようには解釈されません。2 番目のコードのどこが間違っているのか、誰か説明してもらえますか? これら 2 つのコードの出力が同一になるようにしたいのですが、aaつまり、2 番目のコードaは太字にしたいのです。

答え1

従属分音記号文字はやや特殊です。LaTeX コマンドや環境の名前の中には決して現れないと仮定します。この仮定が正しければ、コードで使用されている 2 段階の 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}

関連情報