2010-10-15 5 views
7

Wenn Mathematica eine Zelle auswertet, gibt es der Eingabezelle und der Ausgabezelle s In[$Line]:= und Out[$Line]= wobei $ Zeile ein Zähler ist, der an jedem ausgewerteten Eingang inkrementiert wird.Was erzeugt die In/Out CellLabels in Mathematica und wie kann ich ihnen ein automatisches Timing hinzufügen?

Wenn Sie etwas wie TraditionalForm[expr] oder TeXForm[expr] (oder ein anderes * Formular von $OutputForms) eingeben, wird der Name des Formulars auch zum Etikett der Ausgabezelle hinzugefügt. zB Out[1]//TraditionalForm=.

Ich kann keine Möglichkeit finden, diese Etiketten anzupassen.

  • Sie können im Dialogfeld Einstellungen deaktiviert werden.

  • Sie scheinen nicht für Ein- und Ausgangszellen in den Stylesheet-Optionen zu sein - obwohl die Optionen zum CellLabel Verhalten in Bezug sind.

  • Auch in den Notebook-Optionen - obwohl in der Option Inspector: Notebook Optionen> Auswertungsmöglichkeiten> EvaluationCompletionAction kann durch Zugabe eines Timestamp die CellLabels ändern. Es kann auch das Timing in der StatusArea, Bit angezeigt wird es entfernt, sobald etwas anderes dort gedruckt wird.

  • Auch keiner der init.m Typ configuration files.

  • Also, weiß jemand, wo diese CellLabels generiert werden?


    Insbesondere interessiere ich mich für die Timing zum CellLabel für Output-Zellen in hinzufügen.

    +0

    Diese Frage folgt auf meinen Versuch, eine Frage zu beantworten unter http://www.physicsforums.com/showthread.php?t=438079 – Simon

    +0

    Möchten Sie den Stil oder den Inhalt der Etiketten anpassen? –

    +0

    Ich denke Inhalt. Die ursprüngliche Idee war, das Timing in das Label für eine Output-Zelle zu schreiben. – Simon

    Antwort

    6

    OK, die Diskussion über Physics Forums hat zu dieser ganz hackish Lösung führen (jetzt ein wenig aufgeräumt):

    SetAttributes[Timeit, HoldAll] 
    Timeit[x_] := With[{t = Timing[x]}, Module[{out, form}, 
        If[TrueQ[MemberQ[$OutputForms, Head[t[[2]]]]], 
        out = First[t[[2]]]; form = "//" <> ToString[Head[t[[2]]]], 
        out = t[[2]]; form = ""]; 
        If[out === Null, Null, 
        CellPrint[ExpressionCell[t[[2]], "Output", CellLabelAutoDelete -> False, 
         CellLabel -> StringJoin["(", ToString[t[[1]]], ")", 
         "Out[", ToString[$Line], "]", form, "="]]]; 
        Unprotect[Out]; Out[$Line] = out; Protect[Out]; out;]];] 
    $Pre = Timeit; 
    

    Um die CellLabels persistent zu machen, so dass Sie nicht über den Zeitpunkt verlieren, wenn Sie speichern und Laden Sie das Notizbuch, Sie können das Stylesheet so ändern, dass die Ausgabezellen die Option CellLabelAutoDelete -> True haben. (Bearbeiten: Jetzt zum Befehl CellPrint hinzugefügt.)

    Alle besseren Lösungen sind mehr als willkommen.

    +0

    +1 für nicht "Out" am Ende zu schützen. Nein, ernsthaft ... glaubst du, dass das ein paar Veröffentlichungen überleben wird? Es ist verlockend ... –

    +0

    Ich glaube, ich habe nur versucht, es zum Laufen zu bringen - dachte nicht wirklich über Robustheit nach. Ich sehe keinen Grund, dass dies in zukünftigen Versionen nicht funktionieren würde. Der CellLabel-Mechanismus usw. ist seit V3 da gewesen. Trotzdem muss es einen schöneren Weg geben. – Simon

    +0

    @Simon Ich denke, ich werde es versuchen ... Timing alles scheint eine nette Idee! Andere Dinge wie automatische // MatrixForm für einfache Listen könnten ebenfalls mit Vorsicht implementiert werden. –

    6

    Eine andere Möglichkeit wäre das Setzen von EvaluationCompletionAction -> "ShowTiming", die nach jeder Auswertung Timing-Informationen in der Statusleiste des Notebook-Fensters anzeigt.

    alt text

    +0

    Danke Ragfield. Obwohl ich das in dem Physik-Foren-Thread erwähnt habe, der oben verlinkt ist. Das Hauptproblem bei dieser Lösung ist, dass das Timing nur dort bleibt, bis etwas anderes in die Statusleiste gedruckt wird. – Simon

    +0

    Cooler Trick! Überrascht habe ich diese Option noch nie zuvor gesehen. Wundert mich, was sonst noch mit EvaluationCompletionAction möglich wäre ... – telefunkenvf14

    2

    Es ist möglich, Auswertung Zeitstempel zu Mathematica Zelle Etiketten hinzufügen, indem Sie „AddTimeStamp“ im Options Inspektor Einstellungen für EvaluationCompletionAction auswählen. Darüber hinaus kann eine Liste von Optionen durch Bearbeiten des Eintrags angegeben werden, so dass {{ShowTiming}, "AddTimeStamp"} verwendet wird. Ich erhalte sowohl eine Evaluierungsdauer in der Statusleiste als auch Eingabe- und Ausgabezeitstempel in den Zellbeschriftungen.