懶惰是一種美德
handoutform[command_String] := Block[{text},
(*判斷語法是否多行*)
text = StringSplit[command, "\n"];
(*輸出Mathematica計算結果*)
Print@ToExpression[command];
(*若程式僅一行,TeX直接跳到下一列;若程式兩行,第一行換行第二行跳列;若三行中間行僅換行*)
StringReplace["\\begin{mathenv}\n\\memo{}\n" <>
Which[
Length[text] == 1,
"\\mathin\n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\\\\n" ,
Length[text] == 2,
"\\mathin \n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\newline \n\\verb|" <> StringReplace[text[[2]], " " -> ""] <>
"|\\\\\n" ,
Length[text] >= 3,
"\\mathin \n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\newline\n\\verb|" <>
StringJoin[
StringReplace[#, " " -> ""] <> "|\\newline\n\\verb|" & /@
text[[2 ;; -2]]] <> StringReplace[text[[-1]], " " -> ""] <>
"|\\\\\n"]
<> "\\mathout $" <> ToString[TeXForm[ToExpression[command]]] <>
"$\n\\end{mathenv}", {"e^" -> "\\ex^"}]
];
(*設定圖形目錄*)
SetDirectory[];
handoutplotform[command_String, figurename_String] := Block[{text},
text = StringSplit[command, "\n"];
Print@ToExpression[command];
(*輸出圖形至指定目錄*)
Export[figurename <> ".eps", ToExpression[command]];
"\\begin{mathenv}\n\\memo{}\n" <>
Which[
Length[text] == 1,
"\\mathin \n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\\\\n" ,
Length[text] == 2,
"\\mathin \n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\newline\n\\verb|" <> StringReplace[text[[2]], " " -> ""] <>
"|\\\\\n" ,
Length[text] >= 3,
"\\mathin \n\\verb|" <> StringReplace[text[[1]], " " -> ""] <>
"|\\newline\n\\verb|" <>
StringJoin[
StringReplace[#, " " -> ""] <> "|\\newline\n\\verb|" & /@
text[[2 ;; -2]]] <> StringReplace[text[[-1]], " " -> ""] <>
"|\\\\\n"]
<> "\\mathplot{" <> figurename <> "}\n\\end{mathenv}"
]
(*Example*)
handoutplotform["Plot[Sin[x],{x,0,2Pi}]", "test"]
handoutform["Integrate[24*x*y,{x,0,0.5},{y,1-x,1}]+
Integrate[24*x*y,{x,0.5,1},{y,1-x,1.5-x}]"]
handoutform["PDF[NormalDistribution[],x]"]
Version 2.
Options[handoutform]={"Method"->"unList"};
handoutform[command_String,OptionsPattern[]]:=
Block[{myout,text,outputtex,arraytext,a,b,x,newlinepos,
newlinesign,listtex,method},
(*選項*)
Options[handoutform]={"Method"->"unList"};
method=OptionValue["Method"];
(*判斷語法是否多行*)
myout=ToExpression[command];
text=StringSplit[command,"\n"];
(*輸出Mathematica計算結果*)
outputtex=ToString@TeXForm[StandardForm@ToExpression[command]];
arraytext=
"{l"<>StringReplace[
StringCases[outputtex,"\\begin{array}{c"~~x__~~"c}"->x],
"c"->"l"]<>"l}";
listtex=If[method=="List",
newlinepos=StringPosition[outputtex,"\\}"];
newlinepos=
1+Accumulate[
Length/@
NestWhileList[
Cases[newlinepos,{a_,b_}/;#[[-1,2]]<
b<#[[-1,2]]+95]&,{{0,0}},#[[-1,2]]!=
newlinepos[[All,2]][[-1]]&][[2;;-2]]];
Print@myout;
TeXForm[Insert[myout,newlinesign,Partition[newlinepos,1]]],
Print@myout];
listtex=
StringReplace[ToString@listtex,
",\\text{newlinesign},"->"$,\\newline\n$"];
(*若程式僅一行,TeX直接跳到下一列;若程式兩行,第一行換行第二行跳列;若三行中間行僅換行*)
StringReplace[
"\\begin{mathenv}\n\\memo{}\n"<>
Which[Length[text]==1,
"\\mathin\n\\verb|"<>StringReplace[text[[1]],""->""]<>
"|\\\\\n",Length[text]==2,
"\\mathin\n\\verb|"<>StringReplace[text[[1]],""->""]<>
"|\\newline\n\\verb|"<>StringReplace[text[[2]],""->""]<>
"|\\\\\n",Length[text]>=3,
"\\mathin\n\\verb|"<>StringReplace[text[[1]],""->""]<>
"|\\newline\n\\verb|"<>
StringJoin[
StringReplace[#,""->""]<>"|\\newline\n\\verb|"&/@
text[[2;;-2]]]<>StringReplace[text[[-1]],""->""]<>
"|\\\\\n"]<>"\\mathout\n$"<>
If[method=="List",listtex,outputtex]<>"$\n\\end{mathenv}",
(*取代字串*)
{"e^"->"\\ex^",
"dx$"->"\\dx$",
"dy$"->"\\dy$",
"dz$"->"\\dz$",
"du$"->"\\du$",
"dv$"->"\\dv$",
"\\text{"~~ShortestMatch[a___]~~"}"->a,
"{c"~~ShortestMatch[b___]~~"c}"->arraytext,
"$\\begin{array}"->"\\matharray{\n\\begin{array}",
"\\end{array}$"->"\\end{array}\n}"}]];
(* Example *)
handoutform["N@Table[{x,Sin[x]},{x,0,2Pi,Pi/10}]"]
handoutform["N@Table[{x,Sin[x]},{x,0,2Pi,Pi/10}]","Method"->"List"]

讀者回應 ( 0 意見 )
訂閱發佈留言 (Atom)
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~