그러나 행렬 사이의 수학적 연산, 즉 내적과 등호(괄호의 높이가 같은 것은 플러스입니다) 없이만 행렬을 그릴 수 있습니다. 아래에는 내 코드의 일부와 지금까지 도달한 정도가 첨부되어 있습니다.
어떤 도움이라도 주시면 감사하겠습니다.
감사해요
\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
, m2
및 로 지정하면 m3
예를 들어 다음을 수행할 수 있습니다.
\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
. 예를 참조하세요.비머에서 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}