# How do I make those nice summary boxes like Dispatch and SparseArray do? [duplicate]

Dispatch and SparseArray have nice output forms that summarise their contents:

The contents even manage to be retained fully on copy/paste. How can I make this happen for my own symbols?

• Oh, now I find that this is a duplicate! – Patrick Stevens Nov 19 '15 at 21:19

If you want to make a nice neat way of displaying a thing with Head head, the following will work (thanks to Sjoerd):

head /: Format[b : head[a_Association]] :=
RawBoxes[
BoxFormArrangeSummaryBox[
b,
Graphics3D[Cone[], ImageSize -> 20],
{BoxFormMakeSummaryItem[{"Summary 1: ", a["sum1"]}, StandardForm],
BoxFormMakeSummaryItem[{"Summary 2: ", a["sum2"]}, StandardForm]},
{BoxFormMakeSummaryItem[{"Expanded thing 1: ", a["sumhidden1"]}, StandardForm],
BoxFormMakeSummaryItem[{"Expanded thing 2: ", a["sumhidden2"]}, StandardForm],
BoxFormMakeSummaryItem[{"Expanded thing 3: ", a["sumhidden3"]}, StandardForm]},
StandardForm]
];


If you give a definition as

head[
<| "sum1" -> 10, "sum2" -> "Hi!",
"sumhidden1" -> 1, "sumhidden2" -> 2, "sumhidden3" -> Pi
|>
]


then the output (shown twice, once non-expanded in the Out cell and once expanded in the next In cell) is:

Moreover, this object has the same FullForm as the original: you can copy and paste it, and it'll still work fine. In particular, though it appears to have Head NiceHeadName, it actually still has Head head, just as required.

• Could you please tell me what role b plays here? – chris Apr 7 at 20:26
• @chris If you FullForm the expression, the relevant chunk is Format[Pattern[b, head[Pattern[a, Blank[Association]]]]]. It's just a pattern name. See the docs for Pattern, and note that b_ is shorthand for b : _. – Patrick Stevens Apr 8 at 7:05
• What is the point of the b in  "NiceHeadName", b,  ? It seems to lead to some recursions in some situation and I do not see its benefit? – chris May 23 at 14:47