
Я хочу сделать символ активным/чувствительным и передать его предшествующий символ как аргумент некоторой команды. Я мог бы сделать это с помощью движка и 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")}
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}
Вероятно, зависимый диакритический знак не интерпретируется так же, как обычный символ. Может ли кто-нибудь объяснить мне, что именно не так во втором коде? Я хочу, чтобы вывод обоих этих кодов был идентичным, т. е. 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}