(* 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"];
SELNUM=5;NUM=100;

(* Select matrices satisfying some mapping conditions *)
Rnz[m_]:=(RandomInteger[m]+1)*(2*RandomInteger[1]-1); (* \\pm 1,\pm2,...,\pm(m+1) *)
Rpos[m_]:=RandomInteger[m]+1; (* 1,2,...,m+1 *)
QtList={}; For[ct=1,ct≤300,ct++,
e12=RandomInteger[1]+1; (* (1,0) or (0,1) ? *)
a=Rnz[9];b=Rnz[9];c=Rnz[9];d=Rnz[9];
QtList=Append[QtList,{e12,a,b,c,d}]];QtList=DeleteDuplicates[QtList];

Length[QtList]

QtextF[mm_]:=Module[{e12,a,b,c,d,Ei,FEi},{e12,a,b,c,d}=QtList[[mm]];
Ei={{{1},{0}},{{0},{1}}}[[e12]];
FEi={{{a},{c}},{{b},{d}}}[[e12]];
Return["次の行列のうち平面の1次変換を定めかつ\\("<>TOT[Ei]<>"\\)を\\("<>TOT[FEi]<>
"\\)に写すものをすべて選びなさい."]];
CListF[mm_]:=Module[{e12,a,b,c,d,Mat1,Mat2,ret={}},{e12,a,b,c,d}=QtList[[mm]];
Mat1={{{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/15.行列と1次変換/01.e_iの像","平面の1次変換と基本ベクトルの像",NUM,"false",QtextF,CListF,ICListF]

? GenerateMCxml

QtextF[100]

CListF[100]

ICListF[100]