Gostaria de substituir caracteres acentuados em uma variável de string, mas não sou especialista em programar minhas próprias macros em Latex. Então, encontrei uma macro aqui:https://openclassrooms.com/forum/sujet/latex-supprimer-des-accents-96612que pode exibir uma frase sem acento após substituí-los. Porém, quando tento usar uma variável como argumento da função, ao invés de escrever diretamente a frase, não funciona mais. Posto aqui um exemplo 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}
O resultado está aqui:
Try 1 funciona bem, mas não entendo porque Try 2 e Try 3 não funcionam, eles me dão a palavra com caracteres acentuados. Meu objetivo é que o Try 3 funcione. Preciso dele para utilizá-lo em um documento mais completo. Eu apreciaria muito se alguém pudesse me ajudar a resolver este problema.
Agradeço antecipadamente.
Responder1
Você define o modo de expansão para \expandarg
o qual expande apenas \temp
uma vez. Quando \temp
é uma string, tudo bem. Quando é uma macro, nenhuma expansão adicional ocorre, a macro apenas é retornada.
No seu código de exemplo, você poderia simplesmente substituir \def\temp{#2}
by \edef\temp{#2}
para obter a expansão deste termo.