補遺

補遺

tikz で次の結果を達成したいと思います。 ここに画像の説明を入力してください

ただし、ドット積や等号などの数学演算を行わない行列のみを描画できます (括弧の高さが同じであることはプラスです)。以下に、コードの一部と、これまでの到達点を添付します。

ご協力いただければ幸いです

ありがとう

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
    \usetikzlibrary{arrows.meta}
    \usetikzlibrary{decorations.pathreplacing}
    \usetikzlibrary{fit, calc, matrix, positioning, arrows.meta, intersections, through, backgrounds, patterns}
\usepackage{pgfplots}
    \pgfplotsset{compat = newest}
    \pgfplotsset{overwrite option/.style args={#1 with #2}{#1=#2,#1/.code=}}


\begin{frame}{MATRIX MULTIPLICATION}
    More graphically:
    
    \begin{tikzpicture}
    \scriptsize
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        
    \begin{scope}[xshift=95pt]
        
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);
    \end{scope}
    \begin{scope}[xshift=200pt]
        
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);
    \end{scope}    
    \end{tikzpicture}
\end{frame}

ここに画像の説明を入力してください

答え1

まず、positioningライブラリを使用して行列を隣り合わせに配置します。そうすれば、適切な を判断する必要はありません。(の代わりにxshiftを実行することもできます。)\matrix (m2) at (95pt,0) ...scope

行列にm、 、という名前を付けるm2m3、例えば次のようにすることができます。

\path (m) -- node {$\cdot$} (m2)
      (m2) -- node {$=$} (m3);

シンボルをそれらの中間に配置します。

ここに画像の説明を入力してください

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, matrix}
\begin{document}
\begin{tikzpicture}
    \scriptsize
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        

        
        \matrix (m2) [
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=),
        right=of m
        ] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);

        
        \matrix (m3)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=),
        right=of m2
        ] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);

        \path (m) -- node {$\cdot$} (m2)
              (m2) -- node {$=$} (m3);
    \end{tikzpicture}
\end{document}

補遺

ではbeamer行列を直接使用できないことに注意してください。fragileフレームまたは を使用する必要がありますampersand replacement。例を参照してください。Beamer で tikz マトリックスを使用すると、「間違った catcode で単一のアンパサンドが使用されています」というエラーが発生する

以下にフレームを作成しましたfragile。また、すべてのマトリックスに適用する新しいスタイルを作成しpmat、実際にフレームに収まるように少し変更しました。

ここに画像の説明を入力してください

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
    \usetikzlibrary{arrows.meta}
    \usetikzlibrary{decorations.pathreplacing}
    \usetikzlibrary{fit, calc, matrix, positioning, arrows.meta, intersections, through, backgrounds, patterns}
\usepackage{pgfplots}
    \pgfplotsset{compat = newest}
    \pgfplotsset{overwrite option/.style args={#1 with #2}{#1=#2,#1/.code=}}
\begin{document}

\begin{frame}[fragile]{MATRIX MULTIPLICATION}
    More graphically:
    
 \begin{tikzpicture}[
    pmat/.style={
       matrix of math nodes,
       nodes={font=\footnotesize\strut, inner sep=1.5pt},
       left delimiter=(,
       right delimiter=),
       }
       ]

        \matrix (m)[pmat] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        
        
        \matrix (m2) [pmat,right=of m] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);

        
        \matrix (m3)[pmat,right=of m2] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);

        \path (m) -- node {$\cdot$} (m2)
              (m2) -- node {$=$} (m3);
    \end{tikzpicture}
\end{frame}
\end{document}

答え2

ここに画像の説明を入力してください

\vphantom{b_{ij}}最初と最後の行列の変数を含む各行の先頭を使用します。

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                backgrounds, 
                calc, 
                decorations.pathreplacing,
                fit, 
                intersections, 
                matrix, 
                positioning, patterns,
                through
                }

\begin{document}
\begin{frame}[fragile]
\frametitle{MATRIX MULTIPLICATION}

    More graphically:
    
\[
    \begin{tikzpicture}[
every matrix/.style = {matrix of math nodes,
                       nodes in empty cells,
                       nodes = {inner sep=2pt, font=\scriptsize},
                       left delimiter=(,
                       right delimiter=),
                       inner sep=0pt
                       },
                        ]    
\matrix (m1)
    {
\vphantom{b_{ij}}
    a_{11} & \cdots & a_{1k} & \cdots &  a_{1n} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    a_{i1} & \cdots & a_{ik} & \cdots &  a_{in} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    a_{m1} & \cdots & a_{mk} & \cdots &  a_{mn} \\
    } ;
\draw (m1-3-1.south west) rectangle (m1-3-5.north east);
\node (m1a) [right=2mm of m1] {$\cdot$};
\matrix (m2)[right=2mm of m1a] 
    {
    b_{11} & \cdots & b_{1j} & \cdots &  b_{1p} \\
    \vdots &        & \vdots &        & \vdots  \\
    b_{k1} & \cdots & b_{kj} & \cdots &  b_{kp} \\
    \vdots &        & \vdots &        & \vdots  \\
    b_{n1} & \cdots & b_{nj} & \cdots &  b_{np} \\
    } ;
\draw (m2-5-3.south west) rectangle (m2-1-3.north east);
\node (m2a) [right=2mm of m2] {$=$};
\matrix (m3) [right=2mm of m2a] 
    {
\vphantom{b_{ij}}
    c_{11} & \cdots & c_{1j} & \cdots &  c_{1p} \\
    \vdots &        & \vdots &        &\vdots  \\
\vphantom{b_{ij}}
    c_{i1} & \cdots & c_{ij} & \cdots &  c_{ip} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    c_{m1} & \cdots & c_{mj} & \cdots &  c_{mp} \\
    } ;
\draw (m3-3-3.south west) rectangle (m3-3-3.north east);
    \end{tikzpicture}
\]
\end{frame}
\end{document}

答え3

{pNiceMatrix}of を使用するとそれができますnicematrix。この環境は{pmatrix}ofに似ていますamsmathが、配列のセルの下に PGF/Tikz ノードを作成します。これらのノードを使用して、Tikz で長方形を描画するのは簡単です。

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
\usepackage{nicematrix}

\begin{document}

\begin{frame}[fragile]{MATRIX MULTIPLICATION}
    More graphically:

\NiceMatrixOptions{small,create-large-nodes,columns-width=4mm}

$\begin{pNiceArray}{ccccc<{\vphantom{b_{np}}}}
a_{11} & \cdots & a_{1j} & \cdots &  a_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
a_{i1} & \cdots & a_{ij} & \cdots &  a_{ip} \\
\vdots &        & \vdots &        & \vdots  \\
a_{m1} & \cdots & a_{mj} & \cdots &  a_{mp} 
\CodeAfter
\tikz \draw (3-1-large.south west) rectangle (3-5-large.north east);
\end{pNiceArray}
\cdot
\begin{pNiceArray}{ccccc}
b_{11} & \cdots & b_{1j} & \cdots &  b_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
b_{k1} & \cdots & b_{kj} & \cdots &  b_{kp} \\
\vdots &        & \vdots &        & \vdots  \\
b_{n1} & \cdots & b_{nj} & \cdots &  b_{np} 
\CodeAfter
\tikz \draw (5-3-large.south west) rectangle (1-3-large.north east);
\end{pNiceArray}
=
\begin{pNiceArray}{ccccc<{\vphantom{b_{np}}}}
c_{11} & \cdots & c_{1j} & \cdots &  c_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
c_{i1} & \cdots & c_{ij} & \cdots &  c_{ip} \\
\vdots &        & \vdots &        & \vdots  \\
c_{m1} & \cdots & c_{mj} & \cdots &  c_{mp} 
\CodeAfter
\tikz \draw (3-3-large.south west) rectangle (3-3-large.north east);
\end{pNiceArray}$
\end{frame}

\end{document}

上記コードの出力

関連情報