我正在尝试画出图片上的内容:
我怎样才能绘制椭圆?
母语:
\documentclass{article}
\usepackage{mathtools}
\usepackage{blkarray, bigstrut}
\begin{document}
\begin{table}
\begin{tabular}{ccc}
& & V1 & V2 & V3 \\ \hline
U1& 6 & 2 & 2 \\ \hline
U2& 8 & 3& 5 \\ \hline
U3& 4 & 2 & 6 \\
\hline
\end{tabular}
\end{table}
=
\begin{table}[]
\begin{tabular}{ccc}
& Comedy & Tragedy \\
2 & & \\ \hline
3 & & \\ \hline
2 & & \hline
\end{tabular}
\end{table}
\times
\begin{table}
\begin{tabular}{cccc}
& V1 &V2 &V3 \\ \hline
Comedy & 3 & 1 &1 \\ \hline
Tragedy & 1 & 0 &-2 \hline
\end{tabular}
\end{table}
\end{document}
答案1
使用该nicematrix
包,设计为未编号的方程式:
\documentclass{article}
\usepackage{mathtools}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit,shapes.geometric}
\tikzset{highlight/.style={ellipse, draw=red, semithick, inner sep=1pt}}
\begin{document}
\[
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
U1 & 6 & 2 & 2 \\
U2 & 8 & 3 & 5 \\
U3 & 4 & 2 & 6 \\
\end{NiceMatrix}
\quad=\quad
\begin{NiceMatrix}[hvlines]
& \text{Comedy}
& \text{Tragedy}\\
U1 & 6 & 2 \\
U2 & 8 & -1 \\
U3 & 4 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(4-1) (4-3),
label=below:User Features Vector] {} ;
\end{NiceMatrix}
\quad\times\quad
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
\text{Comedy}
& 3 & 1 & 1 \\
\text{Tragedy}
& 1 & 0 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(1-2) (3-2),
label=below:Item Features Vector] {};
\end{NiceMatrix}
\]
\end{document}
注意:为了显示结果,您需要至少编译 MWE 两次!
附录:*
- 从您的评论可以看出,您喜欢使用文档
standalone
类在文档中使用此类解决方案。不幸的是,此文档类无法很好地支持基于remember picture
和overlay
选项的图像或书写方程式(据我所知)。 - 另一方面,不清楚预期有一个方程式(与
tikz
图纸结合,形式为nicematrix
或例如与tikzmark
节点结合)会带来什么好处。将其作为pdf
或png
可以简单缩放的文件包含? - 理由是,你可以将其包含在其他环境中,例如在 float 中,这并不令人信服。这可以直接完成。例如在
figure
float 中:
\documentclass{article}
\usepackage{geometry}
\usepackage{mathtools}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit,shapes.geometric}
\tikzset{highlight/.style={ellipse, draw=red, semithick, inner sep=1pt}}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{figure}[htb]
\[
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
U1 & 6 & 2 & 2 \\
U2 & 8 & 3 & 5 \\
U3 & 4 & 2 & 6 \\
\end{NiceMatrix}
\quad=\quad
\begin{NiceMatrix}[hvlines]
& \text{Comedy}
& \text{Tragedy}\\
U1 & 6 & 2 \\
U2 & 8 & -1 \\
U3 & 4 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(4-1) (4-3),
label=below:User Features Vector] {} ;
\end{NiceMatrix}
\quad\times\quad
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
\text{Comedy}
& 3 & 1 & 1 \\
\text{Tragedy}
& 1 & 0 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(1-2) (3-2),
label=below:Item Features Vector] {} ;
\end{NiceMatrix}
\]
\caption{For some reason this equation is present as figure}
\label{fig:nicematrix}
\end{figure}
\lipsum[2]
\end{document}
这使:
- 如果等式太大(现在,它比
article
文档类定义的默认文本宽度更宽),您可以使用较小的字体或包\medmath
中定义的宏nccmath
:
\documentclass{article}
\usepackage{geometry}
\usepackage{mathtools, nccmath}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit,
shapes.geometric}
\tikzset{highlight/.style={ellipse, draw=red, semithick, inner sep=1pt}}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{equation}\medmath{
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
U1 & 6 & 2 & 2 \\
U2 & 8 & 3 & 5 \\
U3 & 4 & 2 & 6 \\
\end{NiceMatrix}
\quad=\quad
\begin{NiceMatrix}[hvlines]
& \text{Comedy}
& \text{Tragedy}\\
U1 & 6 & 2 \\
U2 & 8 & -1 \\
U3 & 4 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(4-1) (4-3),
label=below:User Features Vector] {} ;
\end{NiceMatrix}
\quad\times\quad
\begin{NiceMatrix}[hvlines]
& V1 & V2 & V3 \\
\text{Comedy}
& 3 & 1 & 1 \\
\text{Tragedy}
& 1 & 0 & -2 \\
\CodeAfter
\tikz \node [highlight, fit=(1-2) (3-2),
label=below:Item Features Vector] {} ;
\end{NiceMatrix}
}
\medskip
\end{equation}
\lipsum[2]
\end{document}
如果你出于某种原因想要在文档中多次重新输入此方程式,则可以将方程式代码存储在文件中,然后简单地调用它,例如
\input{equations/nicematrix-1}
其中,是存储在文档文件夹子文件夹
nicematrix-1
中的包含方程代码的文件的名称。equations
如果仍有理由将此方程式作为文档,那么解决方案可能是使用库
standalone
直接绘制它。此类图像的代码可能“略微”复杂一些(参见我的第二个答案)。tikz
matrix
答案2
您的方程式如图所示tikz
。使用的是standalone
您在评论中请求的文档类:
\documentclass[tikz, margin=1pt]{standalone}
\usetikzlibrary{fit,
matrix,
positioning,
shapes.geometric}
\tikzset{
highlight/.style args={#1/#2}{ellipse, draw=red, semithick,
inner xsep=#1, inner ysep=#2},
mymatrix/.style={matrix of nodes,
nodes in empty cells,
nodes={minimum height=3ex, minimum width=2em,
inner sep=2pt, outer sep=0pt, anchor=center,
draw},
column sep=-\pgflinewidth,
row sep=-\pgflinewidth
}
}
\begin{document}
\begin{tikzpicture}[node distance=0pt]
\matrix (m1) [mymatrix]
{
& V1 & V2 & V3 \\
U1 & 6 & 2 & 2 \\
U2 & 8 & 3 & 5 \\
U3 & 4 & 2 & 6 \\
};
\node (times) [right=of m1] {$\times$};
\matrix (m2) [mymatrix,
column 2/.style={nodes={minimum width=4em}},
column 3/.style={nodes={minimum width=4em}},
right=of times]
{
& Comedy & Tragedy \\
U1 & 6 & 2 \\
U2 & 8 & $-1$ \\
U3 & 4 & $-2$ \\
};
\node (equal) [right=of m2] {$=$};
\matrix (m3) [mymatrix,
column 1/.style={nodes={minimum width=4em}},
right=of equal]
{
& V1 & V2 & V3 \\
Comedy & 3 & 1 & 1 \\
Tragedy & 1 & 0 & $-2$ \\
};
\node[highlight=-9pt/0pt, fit=(m2-4-1) (m2-4-3),
label=below:User Features Vector] {};
\node[highlight=0pt/-3pt, fit=(m3-1-2) (m3-3-2),
label=below:Item Features Vector] {};
\end{tikzpicture}
\end{document}
nodes in empty cells,
或者如果你删除样式定义中的行mymatrix
: