Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I want to store the argument of a macro in a temporary variable, but I know in advance that some people will incorrectly enclose the argument in parentheses as well as braces (long story). Specifically, some users will say something like

 \bernard{abc}

while others will say

\bernard{(abc)}

I want the macro \bernardto store the string abc in the temporary variable in both cases. How do I achieve this?

share|improve this question
    
Is Bernard the person? :-D –  Matthew Leingang Mar 2 '11 at 0:40
    
@Matthew - sadly not. Their name is Legion, for they are many. –  Ian Thompson Mar 2 '11 at 16:13

1 Answer 1

up vote 8 down vote accepted
\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}
share|improve this answer
    
Thanks Herbert. –  Ian Thompson Mar 1 '11 at 15:19
1  
Nice. Maybe Ian needs a \newbernard macro that defines a command that takes Bernard-style arguments. –  Matthew Leingang Mar 2 '11 at 18:12

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.