替换变量中的重音字符

替换变量中的重音字符

我想替换字符串变量中的重音字符,但我不是在 Latex 中编写自己的宏的专家。因此,我在这里找到了一个宏:https://openclassrooms.com/forum/sujet/latex-supprimer-des-accents-96612替换后可以显示没有重音的句子。但是,当我尝试使用变量作为函数的参数,而不是直接写句子时,它不再起作用。我在这里发布了一个最小的例子:

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

结果如下:

在此处输入图片描述

尝试 1 可以正常工作,但我不明白为什么尝试 2 和尝试 3 不起作用,它们给我的单词带有重音字符。我的目标是尝试 3 可以工作。我需要它在更完整的文档中使用它。如果有人能帮助我解决这个问题,我将不胜感激。

先感谢您。

答案1

您将扩展模式设置为\expandarg仅扩展\temp一次。当\temp是字符串时,这没问题。当是宏时,不会发生进一步扩展,只会返回宏。

在您的示例代码中,您只需替换\def\temp{#2}即可\edef\temp{#2}获得该术语的扩展。

相关内容