
文字をアクティブ/センシティブにして、その前の文字を何らかのコマンドの引数として渡したいのですが、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")}
aæ
bæ
\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}