如何从宏参数中删除虚假的括号?

如何从宏参数中删除虚假的括号?

我想将宏的参数存储在临时变量中,但我事先知道有些人会错误地将参数括在括号和大括号中(说来话长)。具体来说,有些用户会说类似

 \bernard{abc}

而其他人会说

\bernard{(abc)}

我希望宏在两种情况下都\bernard将字符串存储abc在临时变量中。我该如何实现?

答案1

\documentclass{minimal}
\makeatletter
\def\bernard#1{\bernard@i#1\@nil}
\def\bernard@i{\@ifnextchar(\bernard@ii\bernard@iii}
\def\bernard@ii(#1)\@nil{\def\bTemp{#1}}
\def\bernard@iii#1\@nil{\def\bTemp{#1}}
\makeatother

\begin{document} 
\bernard{(abc)} \bTemp
\bernard{abc}   \bTemp
\end{document}

相关内容