(* Require XMLgen_MC.nb ver >=0.20 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
DebugMode=False;
ThisNo=StringReplace[StringSplit[ NotebookFileName[],"/"][[-1]],{"LA_"->"",".nb"->"","_"->"-"}];
Category="LA/"<>ThisNo<>".";ThisNo

(* Global Options *)
Shuffle="true";Numbering="abc";
(* Numbers of select options and questions *)
SELNUM=4;Single="true";NUM=300;Title="パラメータの分離(1変数)";

TTS[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TTSt[eq_]:=ToString[TeXForm[StandardForm[eq]]];
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]]}];
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
ai2tex[s_]:=StringReplace[TOT[s],Table["\\text{a"<>TOT[i]<>"}"->"{\\mathbf a}_"<>TOT[i],{i,1,5}]];
ci2tex[c_,s_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
TOTci2tex[c_,s_]:=StringReplace[TOT[s],Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
TpStr[L_]:="\\("<>TOT[L[[1]]]<>"\\times"<>TOT[L[[2]]]<>"\\)";
TpTpse[L_]:=If[L=={},{},{L[[2]],L[[1]]}];
PType[A_,B_]:=If[A=={}||B=={},Return[{}],
If[A[[2]]===B[[1]],Return[{A[[1]],B[[2]]}],Return[{}]]];
PTypeL[L_]:=Module[{ct,len,tmp},len=Length[L];
Which[len==0,Return[{}],len==1,Return[L[[1]]],
len==2,Return[PType[L[[1]],L[[2]]]],
True,tmp=L[[1]];For[ct=2,ct≤len,ct++,tmp=PType[tmp,L[[ct]]]];Return[tmp]]];

Clear[p,q,r,s,t,u,v,x,y,z]

(* select pairs of matrices *)
QtList={}; For[ct=1,ct≤300,ct++,
Cn=1;
prm=RandomChoice[{p,q,r,s,t}];
row=RandomChoice[{3,3,3,4,4}];
MA=Table[Table[Rnz[3],2],row];
QtList=Append[QtList,{Cn,{prm,row,MA}}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,pr,pS,row,MA,vv,vS,ct,ret},
{Cn,{pr,row,MA}}=QtList[[mm]];pS=ToString[pr];
vv=MA.{1,pr};vS="\\(\\begin{pmatrix}";
For[ct=1,ct≤row,ct++,
vS=vS<>TTSt[vv[[ct]]];If[ct<row,vS=vS<>"\\\\"]];vS=vS<>"\\end{pmatrix}\\)";
ret="文字"<>pS<>"を成分に含むベクトル"<>vS<>"を"<>pS<>"について整理すると"
<>"\\({\\mathbf a}+"<>pS<>"{\\mathbf b}\\)と書ける. \\({\\mathbf a},{\\mathbf b}\\)"
<>"の組み合わせとして正しいものを選べ\n";
Return[ret]];

CListF[mm_]:=Module[{Cn,pr,row,MA,Va,Vb,fs,ret={}},
{Cn,{pr,row,MA}}=QtList[[mm]];fs="正解です.";
Va=Col[MA,1];Vb=Col[MA,2];
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va]<>",\n{\\mathbf b}="<>TOT[Vb]<>"\\)",fs}];
Return[RandomSample[ret,Cn]]];

CListF[20]

ICListF[mm_]:=Module[{Cn,pr,row,MA,MA1,ct,Va1,Vb1,fs1,fs2,ret={}},
{Cn,{pr,row,MA}}=QtList[[mm]];
fs1="\\(p=0\\)とおいて得られるベクトルが\\({\\mathbf a}\\)です.";
fs2="検算として例えば\\(p=1\\)を代入したものと\\({\\mathbf a}+{\\mathbf b}\\)が一致しているか確かめよう．";
Va1=Col[MA,2];Vb1=Col[MA,1];
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va1]<>",\n{\\mathbf b}="<>TOT[Vb1]<>"\\)",fs1}];
MA1=Flatten[MA];
Va1=Transpose[{Table[MA1[[i]],{i,1,row}]}];
Vb1=Transpose[{Table[MA1[[i+row]],{i,1,row}]}];
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va1]<>",\n{\\mathbf b}="<>TOT[Vb1]<>"\\)",fs2}];
MA1=MA+Table[Table[Rnz[0],2],row];
Va1=Col[MA1,1];Vb1=Col[MA1,2];
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va1]<>",\n{\\mathbf b}="<>TOT[Vb1]<>"\\)",fs2}];
Va1=Col[MA,1];Vb1=Col[MA,2];Vb1=Vb1+Va1;
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va1]<>",\n{\\mathbf b}="<>TOT[Vb1]<>"\\)",fs2}];
Va1=Col[MA,1];Vb1=Col[MA,2];Vb1=Vb1-Va1;
ret=Append[ret,{"\\({\\mathbf a}="<>TOT[Va1]<>",\n{\\mathbf b}="<>TOT[Vb1]<>"\\)",fs2}];
Return[RandomSample[ret,SELNUM-Cn]]];

For[Ct=1,Ct≤NUM,Ct++,QtextF[Ct];CListF[Ct];ICListF[Ct]]; (* Error Check *)

GenerateMCxml[DFname[],Category<>Title<>"(MC1)",Title,NUM,Single,QtextF,CListF,ICListF]

#->Nothing &/@ Permutations[{1,2,3},{2}]