(* 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 *)
Rbtw[m_]:=RandomInteger[2m]-m;
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=100;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤300,ct++,
Wn={Rnz[2],Rnz[2],Rnz[2]};
{Wu1,Wv1}=NullSpace[{Wn}];
GM2={{Rnz[1],Rnz[2]},{Rnz[1],Rnz[1]}};
While[Det[GM2]≠1,GM2={{Rnz[1],Rnz[2]},{Rnz[2],Rnz[1]}}];
{Wu,Wv}=GM2.{Wu1,Wv1};
QtList=Append[QtList,{RandomInteger[1]+1,{Wn,Wu,Wv}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

QtextF[mm_]:=Module[{Cn,Wx,Wn,Wu,Wv,Wp},
{Cn,{Wn,Wu,Wv}}=QtList[[mm]];
Wp={RandomInteger[9]-4,RandomInteger[9]-5,RandomInteger[8]-4};
Wx={x,y,z};
Return["パラメータ表示\\("<>TOTT[{Wx}]<>"="<>TOTT[{Wp}]<>"+s"
<>TOTT[{Wu}]<>"+t"<>TOTT[{Wv}]<>"\\)を持つ平面の法線ベクトルとして"
<>"正しいものをすべて選びなさい."]];

CListF[mm_]:=Module[{Cn,Wn,Wa,Wu,Wv,k1,k2,fs,ret={}},
{Cn,{Wn,Wu,Wv}}=QtList[[mm]];
fs="正解です.";
k1=RandomInteger[1]+2;k2=-RandomInteger[2]-1;
ret=Append[ret,{"\\("<>TOTT[{Wn}]<>"\\)",fs}];
ret=Append[ret,{"\\("<>TOTT[{k1*Wn}]<>"\\)",fs}];
ret=Append[ret,{"\\("<>TOTT[{k2*Wn}]<>"\\)",fs}];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,Wn,WaL={},Wa,Iu,Iv,Wu,Wv,k1,k2,fs1,fs2,fs3,fs4,fs0,ret={}},
{Cn,{Wn,Wu,Wv}}=QtList[[mm]];
fs1="は平面に平行なベクトルで垂直ではありません.";
fs2="と\\("<>TOTT[{Wv}]<>"\\)とは直交しますが,\\("<>TOTT[{Wu}]<>"\\)との内積は"; (* Wv とは直交するケース *)
fs3="と\\("<>TOTT[{Wu}]<>"\\)とは直交しますが,\\("<>TOTT[{Wv}]<>"\\)との内積は"; (* Wu とは直交するケース *)
fs0="であって\\(0\\)ではありません.";
fs4="と\\("<>TOTT[{Wu}]<>","<>TOTT[{Wv}]<>"\\)との内積はいずれも0ではありません.";
k1=Rnz[1];k2=Rnz[1];
ret=Append[ret,{"\\("<>TOTT[{k1*Wu}]<>"\\)",fs1}];
ret=Append[ret,{"\\("<>TOTT[{k2*Wv}]<>"\\)",fs1}];
(* case fs2 *)
WaL=NullSpace[{Wv}];Wa=WaL[[1]]*Rbtw[3]+WaL[[2]]*Rbtw[3];
While[(Iv=Wa.Wu)==0||Wa.Wa>300,Wa=WaL[[1]]*Rbtw[3]+WaL[[2]]*Rbtw[3]];
ret=Append[ret,{"\\("<>TOTT[{Wa}]<>"\\)",
"\\("<>TOTT[{Wa}]<>"\\)"<>fs2<>ToString[Iv]<>fs0}];
(* case fs3 *)
WaL=NullSpace[{Wu}];Wa=WaL[[1]]*Rbtw[3]+WaL[[2]]*Rbtw[3];
While[(Iv=Wa.Wv)==0||Wa.Wa>300,Wa=WaL[[1]]*Rbtw[3]+WaL[[2]]*Rbtw[3]];
ret=Append[ret,{"\\("<>TOTT[{Wa}]<>"\\)",
"\\("<>TOTT[{Wa}]<>"\\)"<>fs3<>ToString[Iv]<>fs0}];
(* case fs4 *)
Wa=Rbtw[3]*Wn+Rbtw[3]*Wu+Rbtw[3]*Wv;
While[((Iu=Wa.Wu)==0&&(Iv=Wa.Wv)==0)||Wa.Wa>300,Wa=Rbtw[3]*Wn+Rbtw[3]*Wu+Rbtw[3]*Wv];
ret=Append[ret,{"\\("<>TOTT[{Wa}]<>"\\)","\\("<>TOTT[{Wa}]<>"\\)"<>fs4<>"それぞれ\\("<>ToString[Iu]<>","<>ToString[Iv]<>"\\)"}];
Return[RandomSample[ret,SELNUM-Cn]]];

GenerateMCxml[DFname[],"LA/06-04.平面(パラメータ表示)の法線ベクトル/MC100-2","パラメータ表示された平面の法線ベクトル",NUM,"false",QtextF,CListF,ICListF]