6

I want to define a macro, call it \func, so that \func will output\phi, and \func[i] will output \phi(i).

what is the easiest way to achieve this?

I know there are other questions that address this issue - I guess one of them is exactly my question and I just don't get it :)

5

2 Answers 2

8

You can define \func to take an optional argument:

\documentclass{article}

\newcommand\func[1][]{\phi\ifx\\#1\\\else(#1)\fi}

\begin{document}

$\func\quad\func[i]$

\end{document}

enter image description here

4
  • Thanks! But this just exploits the fact that \phi_{} looks the same as \phi, right? I need a slightly more general solution. I will edit my question to prevent this "loop hole" :)
    – olamundo
    Nov 3, 2012 at 15:37
  • @Qrrbrbirlbel right; will do so. Nov 3, 2012 at 15:38
  • @noam please see my updated answer. Is this what you want? Nov 3, 2012 at 15:45
  • 1
    @GonzaloMedina A subscript (even if it's empty) adds a small space after the symbol; its size is in the parameter \scriptspace, default value 0.5pt. I've also put a better test in the conditional.
    – egreg
    Nov 3, 2012 at 15:48
8

xparse-based solution

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\func}{o}{%
  \phi
  \IfNoValueF{#1}{(#1)}%
}

\begin{document}

$\func\quad\func[i]$

\end{document}

where you want a single optional ('o-type') argument.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .