
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 luacode
pacote 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")}
aæ
bæ
\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, aa
onde o segundo a
esteja 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
).
% !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}