我想替换字符串变量中的重音字符,但我不是在 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}
获得该术语的扩展。