3
$\begingroup$

This question already has an answer here:

I like to annotate output, using something like the following:

annotStyle[t_] := Text@Style[t, Darker@Blue, Larger]
Format[annot[t_][x_]] := Row[{annotStyle[t], annotStyle[":  "], x}]

(data = Array[RandomReal, 10]) // annot@"Ten random numbers"
{Min@data, Max@data} // annot@Range
Mean@data // annot@μ
Median@data // annot@Median
Variance@data // annot@Variance
Sqrt@%[[1]] // annot@"Standard deviation"

The downside is that annotating changes the value of the output. Is there some way of avoiding this, so that, for example, in the first line of the example I don't need parentheses and in the last line of the example, I don't need to use [[1]]?

Specifically, if possible, I'd like

x // annot@t

to display as t: x, but have the value of x, for any expression x.

As I've put this question together, I've realised that

annot[t_][x_] := (Print[annotStyle[t], annotStyle[":  "], x]; x;)

almost does what I want and is better than my previous attempt. Is there a way of getting exactly what I want?

$\endgroup$

marked as duplicate by ybeltukov, MarcoB, m_goldberg, user9660, Community Nov 13 '15 at 21:55

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

0
$\begingroup$

Based on an answer to the duplicate question, the following, using $PreRead and $PrePrint, meets my needs, interpreting both x // "t" or x; "t" for annotations.

 annotStyle[t_] := Text@Style[Style[t, Darker@Blue, Larger], Larger]
 annotLine[t_, x_] := If[Characters[t][[-1]] == " ", {annotStyle[t], x}, 
   {annotStyle[t], annotStyle[Style[":  ", Bold]], x}]
 $PreRead = 
Replace[#, RowBox[{body__, ";" | "//", note_String?(StringMatchQ[#, "\"*\""] &)}] :> 
  ($note = note; RowBox[{body}])] &;
 $PrePrint = 
If[$note =!= Null, # &[Row[annotLine[ToExpression[$note], Pane@#]], 
  $note = Null], #] &;

 data = Array[RandomReal, 10]; "The random data is  "
 {Min@data, Max@data} // "Range"
 Mean@data // "μ"
 Median@data // "Median"
 Variance@data // "Variance"
 Sqrt@%[[1]] // "Standard deviation"
$\endgroup$

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