(* Require XMLgen_MC.nb ver >=0.04 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
TTS[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TOC[mt_,c_]:=TOTT[{Transpose[mt][[c]]}];
TTD[r_]:=StringReplace[TT[r],"\\frac"->"\\dfrac"];
Rnz[m_]:=(RandomInteger[m]+1)*(2*RandomInteger[1]-1); (* \\pm 1,\pm2,...,\pm(m+1) *)
Rpos[m_]:=RandomInteger[m]+1; (* 1,2,...,m+1 *)
TTC[A_,n_]:=TOTT[{(Transpose[A])[[n]]}];
Col[A_,n_]:=Transpose[{A[[Range[Length[A]],n]]}];
ColCat[CL_]:=Join@@@(Transpose@CL);
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
Title="パラメータ表示で与えられた平面上の点";
SELNUM=5;NUM=200;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤1000,ct++,
Tmp={{Rnz[3],Rnz[2],Rnz[3]},{Rnz[3],Rnz[3],Rnz[3]},{Rnz[3],Rnz[3],0}};
While [Det[Tmp]==0,Tmp={{Rnz[3],Rnz[2],Rnz[3]},{Rnz[3],Rnz[3],Rnz[3]},{Rnz[3],Rnz[3],0}}];
Tmp2={Tmp[[1]],Tmp[[2]]-Tmp[[1]],Tmp[[3]]-Tmp[[1]]};
QtList=Append[QtList,{RandomInteger[1]+1,Tmp2}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];

QtList[[3]]

QtextF[mm_]:=Module[{Cn,wx,p,u,v},{Cn,{p,u,v}}=QtList[[mm]];
wx=TOTT[{{x,y,z}}];
Return["パラメータ表示\\("<>wx<>"="<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)で与えられる平面上にある点(の位置ベクトル)をすべて選びなさい."]];

CListF[mm_]:=Module[{Cn,p,u,v,GM2,A,s,t,Wx,fs,fst,ret={}},
{Cn,{p,u,v}}=QtList[[mm]];Wx=TOTT[{{x,y,z}}];fs="正解です.";
{s,t}={0,0};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
{s,t}={0,1};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
{s,t}={1,0};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
{s,t}={1,1};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
{s,t}={Rnz[1],-1};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
{s,t}={Rnz[1],-2};A=p+s*u+t*v;fst=TOT[s]<>","<>TOT[t]<>"\\)ですね.";
ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs<>"\\((s,t)="<>fst}];
Return[RandomSample[ret,Cn]]];
QtextF[3]
CListF[3]

ICListF[mm_]:=Module[{Cn,p,u,v,GM2,A,s,t,Wx,fs1,fs2,ret={}},
{Cn,{p,u,v}}=QtList[[mm]];Wx=TOTT[{{x,y,z}}];
fs1="\\(x=p+su+tv\\)において, u, v は平面上の点ではなく,平面に平行なベクトルです.";
fs2="\\(x=p+su+tv\\)において, "<>"\\((s,t)\\)に何か値を代入して得られる点が平面上の点です.そのような\\((s,t)\\)が存在しません.";
(* pattern fs1 *)
A=u+v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs1}];
A=u;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs1}];
A=v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs1}];
A=2*p+u+v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
A=2*p+u;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
A=2*p+v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
A=-p+u+v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
A=-p+u;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
A=-p+v;ret=Append[ret,{"\\("<>TOTT[{A}]<>"\\)",fs2}];
Return[RandomSample[ret,SELNUM-Cn]]];

ICListF[5]

GenerateMCxml[DFname[],"LA/06-02."<>Title<>"(MC1)",Title,NUM,"false",QtextF,CListF,ICListF]