2011-11-07 9 views
8

Często kopiuję kod Mathematica ze stron internetowych (takich jak SO) do notatnika. Kod jest zwykle wklejany jako pojedyncza komórka wejściowa. Szukam prostego sposobu wklejenia go jako kilku komórek wejściowych dla wygodnej oceny krok po kroku.Wklej kod Mathematica, aby został podzielony na osobne komórki wejściowe

Przykładowo

a = 2; 
f[x_] := x^a 

Plot[f[x], {x,0,2}] 

będzie idealnie wkleić w dwóch komórek wejściowych. Ręczne formatowanie (tj. Oryginalne znaki nowej linii) powinno również być zachowane (tak nie jest w przypadku domyślnego wklejania).

Ogólnie, jeśli wybierze się wszystkie komórki wejściowe (kliknięcie ALT), skopiuje je do edytora tekstu, a następnie skopiuje otrzymany tekst z powrotem do notatnika, należy uzyskać bliski odpowiednik oryginalnych komórek, które zostały skopiowane.

Odpowiedz

15

Lub .... możesz j ust Hit Ctrl + Shift + D w miejscu, w którym chcesz podzielić swoją pojedynczą komórkę na dwie osobne komórki. Czasami korzystne jest grupowanie wielu operacji w jedną komórkę (lub raczej nie dzielenie ich na początek). Aby cofnąć taki podział, zaznacz obie komórki (lub więcej niż 2, jeżeli chcesz) i kliknij Ctrl + SHIFT + M aby połączyć je w jedno.

+2

+1, Nie znałem tego skrótu – Szabolcs

+1

@Szabolcs w tym przypadku nic dziwnego, że zadałeś to pytanie. To byłoby dość denerwujące! –

+0

+1, nie wiedziałem też o tym skrócie. Po prostu żyłem z tym i założyłem, że nic nie można zrobić. – rcollyer

0

Jest to prosta implementacja (Chciałbym również docenić przegląd kodu, nie jestem dobry w programowaniu przedniej):

(* This converts a sequence of expressions into boxes *) 
Clear[makeManyBoxes] 
SetAttributes[makeManyBoxes, HoldAllComplete]; 
makeManyBoxes[e__] := [email protected][MakeBoxes /@ HoldComplete[e]] 

(* Split a list at separator *) 
split[list_, sep_] := 
DeleteCases[Split[list, #1 =!= sep && #2 =!= sep &], {sep}] 

wr[e_] := NotebookWrite[InputNotebook[], Cell[BoxData[e], "Input"]] 

[email protected]["Paste!", 
    Module[{clipboard}, 
    clipboard = NotebookGet[ClipboardNotebook[]][[1, 1, 1]]; 
    If[StringQ[clipboard], 

    wr /@ 
    split[ToExpression[clipboard, InputForm, makeManyBoxes], "Null"] 
    ] 
    ] 
    ] 

Łamie komórek przy pustych linii. W tym celu musimy najpierw przeanalizować wyrażenie (co, jeśli pusta linia pojawi się w środku długiego Module?). Jednak sama analiza spowoduje kilka problemów.

Problemy z tej realizacji:

  • usuwa komentarze
  • nie może obsłużyć niepoprawne wejść
  • , że nie zachowuje formatowanie (nowa linia)
  • tam jestem pewny musi być kilka innych rzeczy, które mogą się nie udać
+2

Teraz potrzebujemy czegoś, co pozwoli na wyodrębnienie notebooka i wygenerowanie postu SO, przeplatanie komórek wejściowych i wyjściowych, w tym grafiki i komentowanie komórek wyjściowych ... –

+0

@belisarius Dobrym początkiem byłoby narzędzie do przesyłania imgur. imgur [g] powinien zrasteryzować argument (do PNG) na odpowiednią szerokość dla SO, przesłać go do imgur, a następnie zwinąć oznaczenie gotowe do wklejenia: '[mma] (http://i.imgur.com/ZENa4. jpg) 'To powinien być dobry punkt wyjścia, ale nie udało mi się go dostosować: http://stackoverflow.com/q/5853134/695132 ** EDIT: ** Myślę, że zrobię to pytanie – Szabolcs

Powiązane problemy