Re: demobox マクロ

名前: 寒川
日時: 2004-07-08 19:53:23
IPアドレス: 203.141.89.*

>>30187 ありがとうございました.お蔭さまで目的の文書をかけそうです. TeX Q & A を利用したのが今回が初めてです.とても感激しました. 調子にのってもう一つマクロの質問をさせてください. 可変サイズの表を組めると便利ですが,アライメントタブ & の扱いが厄介で, \edef の中では & が展開されないことと,\let を使って書いてみました. 例題は魔方陣です.しかし,最初の列の幅が大きくなってしまいます. 改良できないでしょうか? \documentclass{jarticle} % \textheight 235mm \textwidth 158mm \oddsidemargin 0mm \evensidemargin 0mm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcount\K \newcount\J \newcount\I \newcount\N \newcount\NN \newcount\XK \newcount\T \newcount\MN \def\MgcSqrLine#1#2#3#4#5#6{\NN=#1 \K=0% n,c,d,e,f,j \multiply \NN by #1 \edef\ROW{}% {\loop\ifnum\I<#1 %%%%%%%%%%%%%%%%% {\loop\ifnum\K<\NN % for(k=0;k<n*n;k++){ \XK\K \multiply\XK by #2 % xk=c*k \T=\K \divide\T by #1 \multiply\T by #4 % t=(k/n)*e \advance\XK by \T % xk=c*k+(k/n)*e \T=\XK \divide\XK by #1 \multiply\XK by #1 \advance\T by -\XK % (mod n) \ifnum \I=\T % if(xk == i) then \T=#1 \XK=\K \multiply\XK by #3 % xk=d*k \T=\K \divide\T by #1 \multiply\T by #5 % t=(k/n)*f \advance\XK by \T % yk=d*i+(i/n)*f \T=\XK \divide\XK by #1 \multiply\XK by #1 \advance\T by -\XK % (mod n) {\ifnum #6=\T % if(yk == j) then \global\MN=\K \fi} % return MN \fi \advance\K by1 \repeat} %%%%%%%%%%%%%%%%% \ifnum \I=0 \global\edef\ROW{\number\MN}% \global がないと{\loop } の中でしか % \typeout{MN=\the\MN} % \ROW の中身が保存されない \else \global\edef\ROW{\ROW & \number\MN}% \fi \advance\I by1 \repeat} \ROW \\ \hline } \def\MgcSqr#1#2#3#4#5{\J=0% MgcSqr{n}{c}{d}{e}{f} \begin{tabular}{|*{#1}{c|}}\hline% \let\MS\relax% \def\ROWS{}% \loop\ifnum\J<#1 \I=0 \edef\ROWS{\ROWS\MS{#1}{#2}{#3}{#4}{#5}{\number\J}}% \advance\J by1 \repeat \global\let\MS=\MgcSqrLine \ROWS% \end{tabular}}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \begin{document} % End of preamble and beginning of text. % \begin{table} %\MgcSqr{3}{1}{2}{2}{2} \MgcSqr{5}{1}{2}{1}{3} %\MgcSqr{5}{1}{3}{6}{6} %\MgcSqr{7}{3}{2}{4}{3} %\MgcSqr{9}{4}{2}{1}{4} \end{table} % \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)