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:
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, \expandarg
der nur \temp
einmal erweitert wird. Wenn \temp
es 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.