(* 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],{"{"->"(","}"->")"}];
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];

QtextF[mm_]:=Module[{Cn,p,u,v},{Cn,{p,u,v}}=QtList[[mm]];
Return["3点A("<>PtString[A]<>",B"<>PtString[B]<>",C"<>PtString[C]<>"を通る平面のパラメータ表示として正しいものをすべて選びなさい."]];

CListF[mm_]:=Module[{Cn,p,u,v,GM2,p,u0,v0,u1,v1,Wx,fs,ret={}},{Cn,{p,u,v}}=QtList[[mm]];
Wx=TOTT[{{x,y,z}}];
fs="正解です.";
{p,u0,v0}=RandomChoice[{{A,B-A,C-A},{B,A-B,C-B},{C,A-C,B-C}}];
GM2={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}};
While[Det[GM2]!=1,GM2={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}}];
{u1,v1}=GM2.{u0,v0};
{u,v}=RandomChoice[{{u0,v0},{u1,v1}}];
ret=Append[ret,{"\\("<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs}];
ret=Append[ret,{"\\("<>TOTT[{p}]<>"+s"<>TOTT[{v}]<>"+t"<>TOTT[{u}]<>"\\)",fs}];
{p,u0,v0}=RandomChoice[{{A,B-A,C-A},{B,A-B,C-B},{C,A-C,B-C}}];
GM2={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}};
While[Det[GM2]!=1,GM2={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}}];
{u1,v1}=GM2.{u0,v0};
{u,v}=RandomChoice[{{u0,v0},{u1,v1}}];
ret=Append[ret,{"\\("<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs}];
ret=Append[ret,{"\\("<>TOTT[{p}]<>"+s"<>TOTT[{v}]<>"+t"<>TOTT[{u}]<>"\\)",fs}];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,A,B,C,GM2,Wx,p,zv,u0,v0,u1,v1,u,v,fs1,fs2,fs3,fs4,ret={}},
Wx=TOTT[{{x,y,z}}];
fs1="\\(x=p+su+tv\\)において,\\(u\\),\\(v\\)は\\(0\\)であってはいけません(直線になる).";
fs2="\\(x=p+su+tv\\)において,\\(u\\),\\(v\\)が平行だと直線しか表しません.";
fs3="\\(x=p+su+tv\\)において,\\(u\\),\\(v\\)は通る点ではなく平面に平行なベクトルでなければなりません.";
fs4="\\(x=p+su+tv\\)において,\\(s=t=0\\)のときの\\(p\\)は平面上の点である必要があります.";
{Cn,{A,B,C}}=QtList[[mm]];
(* pattern fs1 *)
{p,u}=RandomChoice[{{A,B-A},{A,C-A},{B,A-B},{B,C-B},{C,A-C},{C,B-C}}];
v={{0,0,0}};{u,v}=RandomChoice[{{u,v},{v,u}}];
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs1}];
(* pattern fs2 *)
{p,u}=RandomChoice[{{A,B-A},{A,C-A},{B,A-B},{B,C-B},{C,A-C},{C,B-C}}];
v=RandomChoice[{1,1,1,2,3}]*u;u=RandomChoice[{u,-u}];
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs2}];
(* pattern fs3 *)
{p,u,v}=RandomChoice[{{A,B,C},{A,C,B},{B,A,C},{B,C,A},{C,A,B},{C,B,A}}];
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs3}];
(* pattern fs4 *)
p=RandomChoice[{2*A,2*B,2*C,3*A-B,3*B-C,3*C-A}];p=RandomChoice[{p,-p}];
{u,v}=RandomChoice[{{B-A,C-A},{B-C,A-C},{C-B,A-B}}];
{u,v}=RandomChoice[{{u,v},{v,u}}];
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{p}]<>"+s"<>TOTT[{u}]<>"+t"<>TOTT[{v}]<>"\\)",fs4}];
Return[RandomSample[ret,SELNUM-Cn]]];

ICListF[5]

GenerateMCxml[DFname[],"LA/06-01.3点で定まる平面のパラメータ表示","3点で定まる平面のパラメータ表示",NUM,"false",QtextF,CListF,ICListF]