2011-11-07 18 views
8

Tôi thường sao chép mã Mathematica từ các trang web (chẳng hạn như SO) vào sổ ghi chép. Mã thường được dán dưới dạng một ô nhập duy nhất. Tôi đang tìm một cách đơn giản để dán nó như một số ô nhập liệu để đánh giá từng bước thuận tiện.Dán mã Mathematica để nó được chia thành các ô nhập riêng biệt

Ví dụ,

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

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

sẽ lý tưởng dán như hai ô nhập liệu. Định dạng thủ công (tức là các dòng mới ban đầu) cũng nên được giữ nguyên (đây không phải là trường hợp có dán mặc định).

Nói chung, nếu chọn tất cả ô nhập (nhấn ALT), sao chép chúng vào trình soạn thảo văn bản, sau đó sao chép văn bản kết quả trở lại sổ ghi chép, một văn bản sẽ tương đương gần với ô gốc đã sao chép.

Trả lời

15

Hoặc .... bạn có thể j ust Nhấn Ctrl + Shift + D tại thời điểm bạn muốn chia ô đơn lẻ thành 2 ô riêng biệt. Một số lần thuận lợi để nhóm nhiều hoạt động vào một ô đơn lẻ (hoặc không chia nhỏ chúng để bắt đầu). Để hoàn tác việc chia tách này, hãy chọn cả hai ô (hoặc nhiều hơn 2 ô nếu bạn muốn) và nhấp vào Ctrl + Shift + M để hợp nhất chúng thành một.

+2

+1, Tôi không biết lối tắt này – Szabolcs

+1

@ Szabolcs trong trường hợp đó không có gì lạ khi bạn hỏi câu hỏi này. Điều đó sẽ khá khó chịu! –

+0

+1, tôi cũng không biết về phím tắt đó. Tôi đã sống với nó, và cho rằng không có gì để làm. – rcollyer

0

Đây là một thực hiện đơn giản (Tôi cũng đánh giá cao một xem xét mã, tôi không giỏi trong chương trình kết thúc trước):

(* 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"] 
    ] 
    ] 
    ] 

Nó phá vỡ các tế bào ở dòng trống. Đối với điều này, chúng ta cần phải phân tích cú pháp biểu thức đầu tiên (nếu một dòng trống xuất hiện ở giữa một số dài Module?). Nhưng phân tích cú pháp một mình sẽ gây ra một số vấn đề.

Vấn đề với thực hiện điều này:

  • nó loại bỏ ý kiến ​​
  • nó không thể xử lý đầu vào không chính xác
  • nó không duy trì định dạng (dòng mới)
  • Tôi chắc rằng có phải là một số thứ khác có thể sai
+2

Bây giờ chúng ta cần thứ gì đó có thể trích xuất sổ ghi chép và tạo một bài SO, xen kẽ các ô nhập và xuất, bao gồm đồ họa và nhận xét các ô đầu ra ... –

+0

@belisarius Một khởi đầu tốt sẽ là một trình tải lên tuyệt vời. imgur [g] sẽ rasterize đối số (thành PNG) ở độ rộng thích hợp cho SO, tải nó lên imgur và trả về đánh dấu sẵn sàng để dán: '[mma] (http://i.imgur.com/ZENa4. jpg) 'Điều này nên là một điểm khởi đầu tốt, nhưng tôi đã thất bại trong việc thích ứng với nó: http://stackoverflow.com/q/5853134/695132 ** EDIT: ** Tôi nghĩ tôi sẽ làm cho một câu hỏi – Szabolcs

Các vấn đề liên quan