文字列変数内のアクセント付き文字を置き換えたいのですが、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 が動作しない理由がわかりません。試行 2 と試行 3 では、アクセント記号付きの文字を含む単語が表示されます。私の目標は、試行 3 が動作することです。より完全なドキュメントで使用するために、試行 3 が必要です。誰かがこの問題を解決するのを手伝ってくれると大変ありがたいです。
よろしくお願いします。
答え1
\expandarg
一度だけ展開する展開モードを設定します\temp
。\temp
が文字列の場合は問題ありません。 マクロの場合は、それ以上の展開は行われず、マクロが返されるだけです。
サンプルコードでは、この用語の展開を取得するために、を置き換える\def\temp{#2}
だけで済みます。\edef\temp{#2}