
Quiero hacer que un carácter sea activo/sensible y pasar su carácter anterior como argumento de algún comando. Podría hacerlo usando el motor y luacode
el paquete LuaLaTeX. Gracias aesteyestecorreo.
% !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}
pero esto parece no funcionar con caracteres diacríticos dependientes. Vea el siguiente ejemplo:
% !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}
Probablemente el signo diacrítico dependiente no se interpreta de la misma manera que un carácter normal. ¿Alguien puede explicarme qué es exactamente lo que está mal en el segundo código? Quiero que el resultado de ambos códigos sea idéntico, es decir, aa
que el segundo a
esté en negrita.
Respuesta1
Los caracteres diacríticos dependientes son algo especiales; Asumiré que nunca aparecen dentro de los nombres de los comandos y entornos de LaTeX. Si esta suposición es correcta, no es necesario el procedimiento gsub de dos etapas empleado en su código.
El siguiente código supone que el carácter inmediatamente anterior al carácter diacrítico dependiente es un carácter 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}