2010-10-15 20 views
7

Lorsque Mathematica évalue une cellule, il donne à la cellule d'entrée et à la cellule de sortie CellLabel s In[$Line]:= et Out[$Line]= où $ Line est un compteur qui s'incrémente sur chaque entrée évaluée.Qu'est-ce qui génère les étiquettes de cellules d'entrée/de sortie dans Mathematica et comment puis-je leur ajouter une synchronisation automatique?

Si vous quelque chose comme entrée TraditionalForm[expr] ou TeXForm[expr] (ou toute autre forme * de $OutputForms), le nom du formulaire est également ajouté à l'étiquette de la cellule de sortie. par exemple Out[1]//TraditionalForm=.

Je ne trouve aucun moyen de personnaliser ces étiquettes.

  • Ils peuvent être désactivés dans la boîte de dialogue Préférences.

  • Ils ne semblent pas être dans les options StyleSheet pour l'entrée et cellules de sortie - bien que les options concernant le comportement de CellLabel sont là.

  • ni dans les options pour ordinateur portable - bien que dans l'option Inspecteur: Options d'ordinateur portable> Options d'évaluation> EvaluationCompletionAction peut modifier les CellLabels en ajoutant un TimeStamp. Il peut également afficher le Timing dans le StatusArea, bit il est supprimé dès que quelque chose d'autre imprime là.

  • Aucun des init.m de type configuration files.

Alors, quelqu'un sait-il où ces CellLabels sont générés?


En particulier, je suis intéressé à ajouter le Timing au CellLabel pour les cellules de sortie.

+0

Cette question fait suite à ma tentative de répondre à une question à http://www.physicsforums.com/showthread.php?t=438079 – Simon

+0

Voulez-vous personnaliser le style ou le contenu des étiquettes? –

+0

Je suppose que le contenu. L'idée originale était de mettre le Timing dans l'étiquette pour une cellule de sortie. – Simon

Répondre

6

OK, la discussion sur Physics Forums a conduit à cette solution tout à fait hackish (maintenant nettoyé un peu):

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; 

Pour rendre les CellLabels persistants afin que vous ne perdez pas le moment où vous enregistrez et Chargez le cahier, vous pouvez modifier la feuille de style afin que les cellules de sortie ont l'option CellLabelAutoDelete -> True. (Edit: Maintenant ajouté à la commande CellPrint.)

Toutes les meilleures solutions sont les bienvenues.

+0

+1 pour ne pas protéger "Out" à la fin. Non, sérieusement ... croyez-vous que cela survivra à quelques sorties? C'est tentant ... –

+0

Je suppose que j'essayais juste de le faire fonctionner - je ne pensais pas vraiment à la robustesse. Je ne vois pas pourquoi cela ne fonctionnerait pas dans les prochaines versions. Le mécanisme CellLabel etc a été là depuis V3. Pourtant, il doit y avoir une meilleure façon. – Simon

+0

@Simon Je pense que je vais essayer ... chronométrer tout semble une bonne idée! d'autres choses comme automatique // MatrixForm pour les listes simples peuvent être implémentées avec soin. –

6

Une autre manière de procéder consiste à définir EvaluationCompletionAction -> "ShowTiming" qui affichera les informations de synchronisation dans la barre d'état de la fenêtre du cahier après chaque évaluation.

alt text

+0

Merci ragfield. Bien que je l'ai mentionné dans le forum des forums de physique lié à ci-dessus. Le principal problème avec cette solution est que le Timing ne reste là que jusqu'à ce que quelque chose d'autre imprime dans la barre d'état. – Simon

+0

Truc sympa! Surpris, je n'ai jamais rencontré cette option auparavant. Je me demande à quoi d'autre EvaluationCompletionAction pourrait être utilisé pour ... – telefunkenvf14

2

Il est possible d'ajouter l'évaluation horodatages aux étiquettes cellulaires Mathematica en sélectionnant « AddTimeStamp » dans les paramètres de l'inspecteur des options pour EvaluationCompletionAction. De plus, une liste d'options peut être donnée en éditant l'entrée, ainsi en utilisant {"ShowTiming", "AddTimeStamp"} j'obtiens à la fois une durée d'évaluation dans la barre d'état et des horodatages d'entrée et de sortie dans les cellules.