我想替換字串變數中的重音字符,但我不是在 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}
by\edef\temp{#2}
即可擴展該術語。