TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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 :)

share|improve this question
Classic LaTeX way uses \func and \func[i] (note [...] instead of {...}). – Paul Gaborit Nov 3 '12 at 15:33
@PaulGaborit - Thanks, I am quite new to latex :) Will change my question – olamundo Nov 3 '12 at 15:34
@PaulGaborit - BTW, can you refer me to an explanation as to when should one use curly braces and when to use square braces? in this example they use curly braces: math.tamu.edu/~boas/courses/math696/math-macros.html – olamundo Nov 3 '12 at 15:48
@noam LaTeX uses [] to delimit the optional argument (always the first) of a command. All other arguments use curly braces. – Paul Gaborit Nov 3 '12 at 15:53
up vote 7 down vote accepted

You can define \func to take an optional argument:






enter image description here

share|improve this answer
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 '12 at 15:37
@Qrrbrbirlbel right; will do so. – Gonzalo Medina Nov 3 '12 at 15:38
@noam please see my updated answer. Is this what you want? – Gonzalo Medina Nov 3 '12 at 15:45
yes! thank you very much! :) – olamundo Nov 3 '12 at 15:47
@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 '12 at 15:48

xparse-based solution





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

share|improve this answer

Your Answer


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.