Я хотел бы заменить акцентированные символы в строковой переменной, но я не эксперт в программировании собственных макросов в 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}
Результат здесь:
Try 1 работает нормально, но я не понимаю, почему Try 2 и Try 3 не работают, они дают мне слово с акцентированными символами. Моя цель в том, чтобы Try 3 работал. Мне нужно использовать его в более полном документе. Я был бы очень признателен, если бы кто-нибудь помог мне решить эту проблему.
Заранее спасибо.
решение1
Вы устанавливаете режим расширения, в \expandarg
который расширяется только \temp
один раз. Когда \temp
это строка, это нормально. Когда это макрос, дальнейшее расширение не происходит, макрос просто возвращается.
В вашем примере кода вы могли бы просто заменить \def\temp{#2}
by \edef\temp{#2}
, чтобы получить расширение этого термина.