%% %%% 行列の入力を助けるマクロ %%% shige %%% 07/24 1999 ver 1.0 %%% 06/05 2000 ver 1.1 %%% 04/22 2001 ver 1.2 %%% 01/27 2005 ver 1.3 %%% 08/27 2005 ver 1.4 %%% 12/06 2006 ver 1.5 %%% mymatrix.sty %%% %%% \matrixR[1]: 行を主に行列を入力する %%% #1: 行列の要素 (a11,a12,...,a1n:a21,a22,...) %%% 例: \matrixR{1,2,3:4,5,6} %%% ==> %%% [ 1 2 3 ] %%% [ 4 5 6 ] %%% %%% \matrixC[1]: 列を主に行列を入力する %%% #1: 行列の要素 (a11,a21,...,an1:a12,a22,...) %%% 例: \matrixC{1,2,3:4,5,6} %%% [ 1 4 ] %%% [ 2 5 ] %%% [ 3 6 ] %%% %%% \行列丸括弧: \matrix{R,C} の括弧を丸括弧にする %%% \行列角括弧: \matrix{R,C} の括弧を角括弧にする (default) %%% %%% \marumatrix{R,C}[1]: 丸括弧の行列 (上と同様) %%% \kakumatrix{R,C}[1]: 角括弧の行列 (上と同様) %%% \nomatrix{R,C}[1] : 括弧なしの行列 (上と同様) %%% \determ{R,C}[1] : 行列式 (上と同様) %%% %%% \行列左合: 行列の要素を左に合わせる %%% \行列右合: 行列の要素を右に合わせる %%% \行列中合: 行列の要素を中央に寄せる %%% \DefArrayFormatUnit[1]: 上を l,r,c で指定 %%% %%% \行列改行幅[1] : 行列の行の改行幅を変更 (default: 0pt) %%% %%% 07/24 1999 %%% 1) まずは、\matrixR{3}{1,2,3, 4,5,6} のように、主として指定するも %%% のの size を指定し、すべて def の matching 機能を利用して要素を %%% 分割するものを作った (ver 0.5)。しかし、これだと要素の数が 9 個 %%% 以下でないと使えないという制限があった。この後、':' 用の \@for %%% を、藤田眞作「LaTeX マクロの八街」p53 で見つけて、それを使うこ %%% とでこの制限をはずし、要素のみ書くようにした。 %%% 06/05 2000 %%% 2) array の c を変更できるようにした。 %%% \行列左合: 行列の要素を左に合わせる %%% \行列右合: 行列の要素を右に合わせる %%% \行列中合: 行列の要素を中央に寄せる %%% \DefArrayFormatUnit[1]: 上を l,r,c で指定 %%% さらに、format 文字列を manual で書けるようにしてもいいかも知れ %%% ない。\@Setoneline 後にそれを指定してやればいいのだからそう面倒 %%% でもないやろ。また、default は r の方が見やすそうなのでそれに変 %%% える。 %%% 04/22 2001 %%% 3) 行列要素の改行幅を変えれるようにした。行列の要素が分数の場合は %%% \displaystyle も必要になるが、それは使う方でやってもらうことに %%% するか。 %%% 01/27 2005 %%% 4) bug fix. %%% 08/27 2005 %%% 5) amopn とともに使う場合の不具合の修正 (\edef -> \protected@edef %%% ただし多分 LaTeX2e 専用)。Thanks . さん (TeX QandA 3767{1,2}) %%% 12/06 2006 %%% 6) 括弧のない行列要素を定義。 %%% %%%%%%%%%% main %%%%%%%%%% %%% %%% test %%% % \documentstyle{jarticle} % \tracingmacros=1 % \makeatletter \newif\if@ParentKaku \@ParentKakutrue \def\@行列丸括弧#1{\left(#1\right)} \def\@行列角括弧#1{\left[#1\right]} \def\@行列式括弧#1{\left|#1\right|} \def\@DefaultParent#1{ \if@ParentKaku\@行列角括弧{#1}\else\@行列丸括弧{#1}\fi} \def\@行列改行幅{0pt} %%% %%% \@for for : %%% cf. 藤田眞作「LaTeX マクロの八街」p53 %%% %\def\@Colonfor#1:=#2\do#3{\edef\@fortmp{#2}\ifx\@fortmp\@empty \else \def\@Colonfor#1:=#2\do#3{\protected@edef\@fortmp{#2}\ifx\@fortmp\@empty \else \expandafter\@Colonforloop#2:\@nil:\@nil\@@#1{#3}\fi} \def\@Colonforloop#1:#2:#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else #5\def#4{#2}\ifx #4\@nnil \else#5\@Coloniforloop #3\@@#4{#5}\fi\fi} \def\@Coloniforloop#1:#2\@@#3#4{\def#3{#1}\ifx #3\@nnil \let\@nextwhile=\@fornoop \else #4\relax\let\@nextwhile=\@Coloniforloop\fi\@nextwhile#2\@@#3{#4}} %% %% 行と列を数える %% R (横に見る) ==> 行の数 == (: fields) %% 列の数 == ((, fields)-1)/(: fields)+1 %% C (縦に見る) ==> 行の数 == ((, fields)-1)/(: fields)+1 %% 列の数 == (: fields) %% #1 ==> : fields %% #2 ==> ((, fields)-1)/(: fields)+1 %% \newcount{\@CommaCount} \newcount{\@ColonCount} \def\@MyMatrixSize#1#2#3{ \@ColonCount=0 \@Colonfor\S:=#3\do{\advance\@ColonCount by 1} % \edef#1{\the\@ColonCount} \protected@edef#1{\the\@ColonCount} \@CommaCount=-1 \@for\S:=#3\do{\advance\@CommaCount by 1} \divide\@CommaCount by \@ColonCount \advance\@CommaCount by 1 % \edef#2{\the\@CommaCount} \protected@edef#2{\the\@CommaCount} } %%% %%% array 用の定義 %%% %%% \@Oneline #1,#2,...,#(n+1): ==> #2&...#(n+1) (#1 は読み捨て) %%% \@Onelinejust #1,#2,...,#n: ==> #1&...#n %%% \@ArrayFormat ==> cc...c (n 個) %%% %\def\@DefaultArrayFormatUnit{c} \def\@DefaultArrayFormatUnit{r} \gdef\@AFU{\@DefaultArrayFormatUnit} \def\@Setoneline#1{% \ifnum#1=1 \def\@Oneline##1,##2:{##2} \def\@Onelinejust##1:{##1} %\def\@ArrayFormat{c} \def\@ArrayFormat{\@AFU} \fi \ifnum#1=2 \def\@Oneline##1,##2,##3:{##2&##3} \def\@Onelinejust##1,##2:{##1&##2} %\def\@ArrayFormat{cc} \def\@ArrayFormat{\@AFU\@AFU} \fi \ifnum#1=3 \def\@Oneline##1,##2,##3,##4:{##2&##3&##4} \def\@Onelinejust##1,##2,##3:{##1&##2&##3} %\def\@ArrayFormat{ccc} \def\@ArrayFormat{\@AFU\@AFU\@AFU} \fi \ifnum#1=4 \def\@Oneline##1,##2,##3,##4,##5:{##2&##3&##4&##5} \def\@Onelinejust##1,##2,##3,##4:{##1&##2&##3&##4} %\def\@ArrayFormat{cccc} \def\@ArrayFormat{\@AFU\@AFU\@AFU\@AFU} \fi \ifnum#1=5 \def\@Oneline##1,##2,##3,##4,##5,##6:{##2&##3&##4&##5&##6} \def\@Onelinejust##1,##2,##3,##4,##5:{##1&##2&##3&##4&##5} %\def\@ArrayFormat{ccccc} \def\@ArrayFormat{\@AFU\@AFU\@AFU\@AFU\@AFU} \fi \ifnum#1=6 \def\@Oneline##1,##2,##3,##4,##5,##6,##7:{##2&##3&##4&##5&##6&##7} \def\@Onelinejust##1,##2,##3,##4,##5,##6:{##1&##2&##3&##4&##5&##6} %\def\@ArrayFormat{cccccc} \def\@ArrayFormat{\@AFU\@AFU\@AFU\@AFU\@AFU\@AFU} \fi } %%% %%% 1*X ==> not yet %%% % 1*X C \def\@MymainsizeiC#1;{ \let\@tmpi\empty % \gdef\@myspliti##1:{\edef\@tmpi{\@tmpi,##1}} % \@Colonfor\@Row:=#1\do{\expandafter\@myspliti\@Row:} % \@Colonfor\@Row:=#1\do{\edef\@tmpi{\@tmpi,\@Row}} \@Colonfor\@Row:=#1\do{\protected@edef\@tmpi{\@tmpi,\@Row}} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi: \end{array} } % 1*X R \def\@MymainsizeiR#1;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1: \end{array} } %%% %%% 2*X %%% % 2*X C \def\@MymainsizeiiC#1;{ \let\@tmpi\empty\let\@tmpii\empty \gdef\@mysplitii##1,##2:{% % \edef\@tmpi{\@tmpi,##1}\edef\@tmpii{\@tmpii,##2}} \protected@edef\@tmpi{\@tmpi,##1}\protected@edef\@tmpii{\@tmpii,##2}} \@Colonfor\@Row:=#1\do{\expandafter\@mysplitii\@Row:} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi:\\[\@行列改行幅] \expandafter\@Oneline\@tmpii: \end{array} } % 2*X R \def\@MymainsizeiiR#1:#2;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1:\\[\@行列改行幅] \@Onelinejust #2: \end{array} } %%% %%% 3*X %%% % 3*X C \def\@MymainsizeiiiC#1;{ \let\@tmpi\empty\let\@tmpii\empty\let\@tmpiii\empty \gdef\@mysplitiii##1,##2,##3:{% % \edef\@tmpi{\@tmpi,##1}\edef\@tmpii{\@tmpii,##2} % \edef\@tmpiii{\@tmpiii,##3}} \protected@edef\@tmpi{\@tmpi,##1}\protected@edef\@tmpii{\@tmpii,##2} \protected@edef\@tmpiii{\@tmpiii,##3}} \@Colonfor\@Row:=#1\do{\expandafter\@mysplitiii\@Row:} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi:\\[\@行列改行幅] \expandafter\@Oneline\@tmpii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiii: \end{array} } % 3*X R \def\@MymainsizeiiiR#1:#2:#3;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1:\\[\@行列改行幅] \@Onelinejust #2:\\[\@行列改行幅] \@Onelinejust #3: \end{array} } %%% %%% 4*X %%% % 4*X C \def\@MymainsizeivC#1;{ \let\@tmpi\empty\let\@tmpii\empty\let\@tmpiii\empty\let\@tmpiv\empty \gdef\@mysplitiv##1,##2,##3,##4:{% % \edef\@tmpi{\@tmpi,##1}\edef\@tmpii{\@tmpii,##2} % \edef\@tmpiii{\@tmpiii,##3}\edef\@tmpiv{\@tmpiv,##4}} \protected@edef\@tmpi{\@tmpi,##1}\protected@edef\@tmpii{\@tmpii,##2} \protected@edef\@tmpiii{\@tmpiii,##3}\protected@edef\@tmpiv{\@tmpiv,##4}} \@Colonfor\@Row:=#1\do{\expandafter\@mysplitiv\@Row:} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi:\\[\@行列改行幅] \expandafter\@Oneline\@tmpii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiv: \end{array} } % 4*X R \def\@MymainsizeivR#1:#2:#3:#4;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1:\\[\@行列改行幅] \@Onelinejust #2:\\[\@行列改行幅] \@Onelinejust #3:\\[\@行列改行幅] \@Onelinejust #4: \end{array} } %%% %%% 5*X %%% % 5*X C \def\@MymainsizevC#1;{ \let\@tmpi\empty\let\@tmpii\empty\let\@tmpiii\empty\let\@tmpiv\empty \let\@tmpv\empty \gdef\@mysplitv##1,##2,##3,##4,##5:{% % \edef\@tmpi{\@tmpi,##1}\edef\@tmpii{\@tmpii,##2} % \edef\@tmpiii{\@tmpiii,##3}\edef\@tmpiv{\@tmpiv,##4} % \edef\@tmpv{\@tmpv,##5}} \protected@edef\@tmpi{\@tmpi,##1}\protected@edef\@tmpii{\@tmpii,##2} \protected@edef\@tmpiii{\@tmpiii,##3}\protected@edef\@tmpiv{\@tmpiv,##4} \protected@edef\@tmpv{\@tmpv,##5}} \@Colonfor\@Row:=#1\do{\expandafter\@mysplitv\@Row:} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi:\\[\@行列改行幅] \expandafter\@Oneline\@tmpii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiv:\\[\@行列改行幅] \expandafter\@Oneline\@tmpv: \end{array} } % 5*X R \def\@MymainsizevR#1:#2:#3:#4:#5;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1:\\[\@行列改行幅] \@Onelinejust #2:\\[\@行列改行幅] \@Onelinejust #3:\\[\@行列改行幅] \@Onelinejust #4:\\[\@行列改行幅] \@Onelinejust #5: \end{array} } %%% %%% 6*X %%% % 6*X C \def\@MymainsizeviC#1;{ \let\@tmpi\empty\let\@tmpii\empty\let\@tmpiii\empty\let\@tmpiv\empty \let\@tmpv\empty\let\@tmpvi\empty \gdef\@mysplitvi##1,##2,##3,##4,##5,##6:{% % \edef\@tmpi{\@tmpi,##1}\edef\@tmpii{\@tmpii,##2} % \edef\@tmpiii{\@tmpiii,##3}\edef\@tmpiv{\@tmpiv,##4} % \edef\@tmpv{\@tmpv,##5}\edef\@tmpvi{\@tmpvi,##6}} \protected@edef\@tmpi{\@tmpi,##1}\protected@edef\@tmpii{\@tmpii,##2} \protected@edef\@tmpiii{\@tmpiii,##3}\protected@edef\@tmpiv{\@tmpiv,##4} \protected@edef\@tmpv{\@tmpv,##5}\protected@edef\@tmpvi{\@tmpvi,##6}} \@Colonfor\@Row:=#1\do{\expandafter\@mysplitvi\@Row:} \begin{array}{\@ArrayFormat} \expandafter\@Oneline\@tmpi:\\[\@行列改行幅] \expandafter\@Oneline\@tmpii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiii:\\[\@行列改行幅] \expandafter\@Oneline\@tmpiv:\\[\@行列改行幅] \expandafter\@Oneline\@tmpv:\\[\@行列改行幅] \expandafter\@Oneline\@tmpvi: \end{array} } % 6*X R \def\@MymainsizeviR#1:#2:#3:#4:#5:#6;{ \begin{array}{\@ArrayFormat} \@Onelinejust #1:\\[\@行列改行幅] \@Onelinejust #2:\\[\@行列改行幅] \@Onelinejust #3:\\[\@行列改行幅] \@Onelinejust #4:\\[\@行列改行幅] \@Onelinejust #5:\\[\@行列改行幅] \@Onelinejust #6: \end{array} } %%% %%% \@mymatrix{R,C} %%% \def\@mymatrixR#1{% \@MyMatrixSize{\@Rows}{\@Columns}{#1} \@Setoneline{\@Columns} \ifnum\@Rows=1 \@MymainsizeiR #1;\fi \ifnum\@Rows=2 \@MymainsizeiiR #1;\fi \ifnum\@Rows=3 \@MymainsizeiiiR #1;\fi \ifnum\@Rows=4 \@MymainsizeivR #1;\fi \ifnum\@Rows=5 \@MymainsizevR #1;\fi \ifnum\@Rows=6 \@MymainsizeviR #1;\fi } \def\@mymatrixC#1{ \@MyMatrixSize{\@Columns}{\@Rows}{#1} \@Setoneline{\@Columns} \ifnum\@Rows=1 \@MymainsizeiC #1;\fi \ifnum\@Rows=2 \@MymainsizeiiC #1;\fi \ifnum\@Rows=3 \@MymainsizeiiiC #1;\fi \ifnum\@Rows=4 \@MymainsizeivC #1;\fi \ifnum\@Rows=5 \@MymainsizevC #1;\fi \ifnum\@Rows=6 \@MymainsizeviC #1;\fi } %%% %%% \matrix{R,C} %%% \marumatrix{R,C} %%% \kakumatrix{R,C} %%% \nomatrix{R,C} %%% \determ{R,C} %%% \default{kaku,maru}kakko %%% \def\matrixR#1{\@DefaultParent{\@mymatrixR{#1}}} \def\matrixC#1{\@DefaultParent{\@mymatrixC{#1}}} \def\marumatrixR#1{\@行列丸括弧{\@mymatrixR{#1}}} \def\marumatrixC#1{\@行列丸括弧{\@mymatrixC{#1}}} \def\kakumatrixR#1{\@行列角括弧{\@mymatrixR{#1}}} \def\kakumatrixC#1{\@行列角括弧{\@mymatrixC{#1}}} \def\nomatrixR#1{\@mymatrixR{#1}} \def\nomatrixC#1{\@mymatrixC{#1}} \def\determR#1{\@行列式括弧{\@mymatrixR{#1}}} \def\determC#1{\@行列式括弧{\@mymatrixC{#1}}} \def\行列角括弧{\@ParentKakutrue} \def\行列丸括弧{\@ParentKakufalse} \def\defaultkakukakko{\@ParentKakutrue} \def\defaultmarukakko{\@ParentKakufalse} \def\行列左合{\gdef\@AFU{l}} \def\行列右合{\gdef\@AFU{r}} \def\行列中合{\gdef\@AFU{c}} \def\DefArrayFormatUnit#1{\gdef\@AFU{#1}} \def\行列改行幅#1{\gdef\@行列改行幅{#1}} %%% %%% test %%% %\begin{document} %\[ %\@MymainsizeivC 1,2,3,4:5,6,7,8:9,10,11,12:13,14,15,16:17,18,19,20; %\] %\@Setoneline{5} %\[ %\@MymainsizeivR 1,2,3,4,5:6,7,8,9,10:11,12,13,14,15:16,17,18,19,20; %\] %\edef\L{1,2,3,4,5:6,7,8,9,10:11,12,13,14,15:16,17,18,19,20} %\@MyMatrixSize{\F}{\S}{\L} %\typeout{\L ==> \F,\S} %\edef\L{1,2} %\@MyMatrixSize{\F}{\S}{\L} %\typeout{\L ==> \F,\S} %\edef\L{1:2} %\@MyMatrixSize{\F}{\S}{\L} %\typeout{\L ==> \F,\S} %\[ %\matrixR{1,2,3,4,5:6,7,8,9,10:11,12,13,14,15:16,17,18,19,20} %\matrixC{1,2,3,4,5:6,7,8,9,10:11,12,13,14,15:16,17,18,19,20} %\] %\makeatother %\end{document} %%% Local Variables: %%% TeX-command-default: "jLaTeX" %%% TeX-master: t %%% End: