Here is the formatting command that does this: pvB /: MakeBoxes[pvB[n1_, n2_, x_, s_, m0_, m1_], TraditionalForm] := RowBox[{SubscriptBox["B", RowBox[{Sequence @@ Riffle[Table["0", {n1}], "\[ThinSpace]"], "\[ThinSpace]", Sequence @@ Riffle[Table["1", {n2 - n1}], "\[ThinSpace]"]}]], "(", Sequence @@ Riffle[Map[ToBoxes, {x, s, m0, m1}], ","], ")"}] For example: pvB[2, 4, x, s, m0, m1] // TraditionalForm > $B_{0\,0\,1\,1}(s,m0,m1)$ The `\[ThinSpace]` will display as a small empty string, but is useful to insure that the indices are separated by just a tiny bit. **Edit: why use MakeBoxes?** I prefer to use `MakeBoxes` to define output formats, even though there is the function `Format` too. The reason my default choice is `MakeBoxes` is described in [this post](https://stackoverflow.com/a/4119830/915703). Essentially, this becomes important if you want to be able to re-use your formatted output as input in later computations.