Ersetzen von Akzentzeichen in einer Variablen

Ersetzen von Akzentzeichen in einer Variablen

Ich möchte akzentuierte Buchstaben in einer String-Variable ersetzen, bin aber kein Experte im Programmieren eigener Makros in Latex. Daher habe ich hier ein Makro gefunden:https://openclassrooms.com/forum/sujet/latex-supprimer-des-accents-96612das nach dem Ersetzen der Akzente einen Satz ohne Akzente anzeigen kann. Wenn ich jedoch versuche, eine Variable als Argument der Funktion zu verwenden, anstatt den Satz direkt zu schreiben, funktioniert es nicht mehr. Ich poste hier ein Minimalbeispiel:

\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}

Das Ergebnis ist hier:

Bildbeschreibung hier eingeben

Versuch 1 funktioniert einwandfrei, aber ich verstehe nicht, warum Versuch 2 und Versuch 3 nicht funktionieren. Sie geben mir das Wort mit den hervorgehobenen Buchstaben. Mein Ziel ist, dass Versuch 3 funktioniert. Ich brauche ihn, um ihn in einem vollständigeren Dokument verwenden zu können. Ich wäre sehr dankbar, wenn mir jemand bei der Lösung dieses Problems helfen könnte.

Vielen Dank im Voraus.

Antwort1

Sie legen den Erweiterungsmodus fest, \expandargder nur \tempeinmal erweitert wird. Wenn \tempes sich um eine Zeichenfolge handelt, ist das in Ordnung. Wenn es sich um ein Makro handelt, erfolgt keine weitere Erweiterung, das Makro wird einfach zurückgegeben.

In Ihrem Beispielcode könnten Sie einfach „ \def\temp{#2}by“ ersetzen \edef\temp{#2}, um die Erweiterung dieses Begriffs zu erhalten.

verwandte Informationen