(* 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);
SELNUM=6;NUM=100;

RandomChoice[{2,2,2,3,3,3,4,4}]

(* Select matrices satisfying some mapping conditions *)
E3=IdentityMatrix[3];E3a={E3[[2]],E3[[1]],E3[[3]]};
E3b={E3[[1]],E3[[3]],E3[[2]]};
cnList={2,2,2,3,3,3,3,3,4,4};
QtList={}; For[ct=1,ct≤300,ct++,
Tmp={{Rnz[3],0,Rnz[3]},{Rnz[3],Rnz[3],Rnz[3]},{Rnz[3],Rnz[3],0}};
Tmp={E3,E3a,E3b}[[RandomInteger[2]+1]].Tmp;
QtList=Append[QtList,{RandomChoice[cnList],Tmp}]];
QtList=DeleteDuplicates[QtList];
RndST[]:={RandomChoice[{-3,-2,-2,-1,-1,-1,0,1,1,2,2,3,3}],RandomChoice[{-2,-1,-1,1,1,2,2,2}]};

QtextF[mm_]:=Module[{M,a,u,v},M=QtList[[mm,2]];
a=Col[M,1];u=Col[M,2];v=Col[M,3];
Return["パラメータ表示\\(\\begin{pmatrix}x\\\\y\\\\z\\end{pmatrix}="<>
TOT[a]<>"+s"<>TOT[u]<>"+t"<>TOT[v]<>"\\)を持つ平面上にある点をすべて選びなさい."]];
CListF[mm_]:=Module[{M,a,u,v,stList={},ct,cn,ret={}},{cn,M}=QtList[[mm]];
a=Col[M,1];u=Col[M,2];v=Col[M,3];
While[Length[stList]<3,stList=Append[stList,RndSt[]];stList=DeleteDuplicates[stList]];


at1={{{a,Rnz[9]},{c,Rnz[9]}},{{Rnz[9],b},{Rnz[9],d}}}[[e12]];
ret=Append[ret,{"\\("<>TOT[Mat1]<>"\\)","正解です."}];
Mat2={{{a,Rnz[9]},{c,Rnz[9]}},{{Rnz[9],b},{Rnz[9],d}}}[[e12]];
While[Mat2==Mat1,Mat2={{{a,Rnz[9]},{c,Rnz[9]}},{{Rnz[9],b},{Rnz[9],d}}}[[e12]]];
ret=Append[ret,{"\\("<>TOT[Mat2]<>"\\)","正解です."}];
Return[ret]];
ICListF[mm_]:=Module[{e12,a,b,c,d,Mat,c1,b1,EansL={},FbML={},Ei,FEi},
{e12,a,b,c,d}=QtList[[mm]];
(* size mismatch *)
Mat={{{a,c},{Rnz[4],Rnz[4]},{Rnz[4],Rnz[4]}},
{{Rnz[4],Rnz[4]},{b,d},{Rnz[4],Rnz[4]}}}[[e12]];
EansL=Append[EansL,{"\\("<>TOT[Mat]<>"\\)",
"\\(A\\)との積により平面のベクトルは空間(\\({\\mathbb R}^3\\)のベクトルに変換され, "
<>"\\(A\\)の定める写像は平面の1次変換になりません."}];
Mat={{{a,Rnz[4],Rnz[4]},{c,Rnz[4],Rnz[4]}},
{{Rnz[4],b,Rnz[4]},{Rnz[4],d,Rnz[4]}}}[[e12]];
EansL=Append[EansL,{"\\("<>TOT[Mat]<>"\\)",
"\\(A\\)と平面のベクトルとは積が計算できません."
<>"\\(A\\)の定める写像は空間から平面への写像で平面の1次変換になりません."}];
c1=Rnz[9];While[c1==c,c1=Rnz[9]];
b1=Rnz[9];While[b1==b,b1=Rnz[9]];
Mat={{{a,c},{c1,Rnz[9]}},{{Rnz[9],b1},{b,d}}}[[e12]];
Ei={{{1},{0}},{{0},{1}}}[[e12]];
FEi=Mat.Ei;
EansL=Append[EansL,{"\\("<>TOT[Mat]<>"\\)",
"\\(A\\)は平面の1次変換を定めますが, \\("<>TOT[Ei]<>"\\)を\\("
<>TOT[FEi]<>"\\)に写し, 条件を満たしません."}];
Return[EansL]];

GenerateMCxml[DFname[],"LA/06-001.パラメータ表示された平面上の点","パラメータ表示された平面上の点",NUM,"false",QtextF,CListF,ICListF]

? GenerateMCxml

QtList[[38]]

QtextF[100]

CListF[100]

ICListF[100]

E3=IdentityMatrix[3];

? Permutations

QtList[[20]]

RandomSample[{1,2,3,4,5},3]

RandomChoice[{1,2,3,4,5},3]