Me gustaría reemplazar caracteres acentuados en una variable de cadena pero no soy un experto en programar mis propias macros en Latex. Entonces, encontré una macro aquí:https://openclassrooms.com/forum/sujet/latex-supprimer-des-accents-96612que puede mostrar una oración sin tilde después de reemplazarlas. Sin embargo, cuando intento usar una variable como argumento de la función, en lugar de escribir directamente la oración, ya no funciona. Publico aquí un ejemplo mínimo:
\documentclass[11pt]{article}
\usepackage{luatextra}
\usepackage[french]{babel}
\usepackage{xstring}
\makeatletter
\def\delaccent[#1]#2{% #1=liste des substitutions
\begingroup
\expandarg\exploregroups\def\temp{#2}%
\delaccent@i#1\delaccent@i\delaccent@i
\expandafter\temp\endgroup}
\def\delaccent@i#1#2{\ifx\delaccent@i#1\else\StrSubstitute\temp{\noexpand#1}{\noexpand#2}[\temp]\expandafter\delaccent@i\fi}
\makeatother
\newcommand{\name}{Michaël}
\newcommand{\nameSA}{\delaccent[{à}{a}{é}{e}{è}{e}{ë}{e}{ê}{e}{ï}{i}{ô}{o}{ù}{u}]{\name}}
\begin{document}
Name : \name
Try 1 : \delaccent[{à}{a}{é}{e}{è}{e}{ë}{e}{ê}{e}{ï}{i}{ô}{o}{ù}{u}]{Michaël}
Try 2 : \delaccent[{à}{a}{é}{e}{è}{e}{ë}{e}{ê}{e}{ï}{i}{ô}{o}{ù}{u}]{\name}
Try 3 : \nameSA
\end{document}
El resultado está aquí:
El intento 1 funciona bien, pero no entiendo por qué el intento 2 y el intento 3 no funcionan, me dan la palabra con los caracteres acentuados. Mi objetivo es que Try 3 funcione. Lo necesito para usarlo en un documento más completo. Agradecería mucho si alguien pudiera ayudarme a resolver este problema.
Gracias de antemano.
Respuesta1
Establece el modo de expansión para \expandarg
que solo se expanda \temp
una vez. Cuando \temp
es una cuerda que está bien. Cuando es una macro, no se produce ninguna expansión adicional, la macro simplemente se devuelve.
En su código de ejemplo, podría simplemente reemplazar por \def\temp{#2}
para \edef\temp{#2}
obtener la expansión de este término.