Im unten angegebenen Code wollte ich, dass die Klammern der \blkarray
Matrix mit denen der ursprünglichen Matrix in Gleichung (1) übereinstimmen.
Das Problem ist, dass die Klammern zu kurz sind, wenn ich sie verwende, \blkarray
und nicht so elegant aussehen wie in der Originalmatrix. Kann das behoben werden? Danke.
Hier ist der Code, der elegant entwickelt wurde voncfr:
\documentclass[11pt]{book}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{xcolor}
\definecolor{ocre}{RGB}{0,173,239}
\usepackage{blkarray}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\usepackage{tikz}
\usetikzlibrary{arrows,matrix,positioning,fit,arrows.meta,}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=ocre!50,draw,
fill opacity=0.5,thick,inner sep=0pt}
}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,
baseline=(#1.base)] \node (#1) {#2};}
%
\newcommand{\Highlight}[1][submatrix]{%
\tikz[overlay,remember picture]{
\node[highlight,fit=(left.north west) (right.south east)] (#1) {};}
}
\newcommand{\mytikzmark}[2]{\tikz[overlay,remember picture, baseline=(#1.base)] \node (#1) {#2};}
\begin{document}
Original Matrix:
\begin{equation}
\begin{bmatrix}[cccc|c]
1 & 0 & -1 & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & 0 & 1 & 0
\end{bmatrix}\\
\end{equation}
Updated Matrix:
\begin{equation}
\begin{blockarray}{ccccc}
x_{1} & x_{2} & x_{3} & x_{4} & \\
\begin{block}{[cccc|c]}
1 & 0 & \mytikzmark{left}{-1} & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & \mytikzmark{right}{0} & 1 & 0 \\
\end{block}
\end{blockarray}
\Highlight[new1]
\end{equation}
\tikz[remember picture,overlay]{%
\draw [LaTeX-] (new1.south) ++(0,-2.5pt) [out=-90,in=160] to ++(5mm,-10mm) node [right, xshift=-2.5mm, font=\itshape, text=red, align=center] {free\\variable};
}
\end{document}
Antwort1
Sie können verwenden \bbordermatrix
von\bordermatrix mit Klammern [ ] statt runden Klammern ( )
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{etoolbox}
\usetikzlibrary{arrows,matrix,positioning,fit,arrows.meta,}
\definecolor{ocre}{RGB}{0,173,239}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=ocre!50,draw,
fill opacity=0.5,thick,inner sep=0pt}
}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,
baseline=(#1.base)] \node (#1) {#2};}
%
\newcommand{\Highlight}[1][submatrix]{%
\tikz[overlay,remember picture]{
\node[highlight,fit=(left.north west) (right.south east)] (#1) {};}
}
\newcommand{\mytikzmark}[2]{\tikz[overlay,remember picture, baseline=(#1.base)] \node (#1) {#2};}
\let\bbordermatrix\bordermatrix
\patchcmd{\bbordermatrix}{8.75}{4.75}{}{}
\patchcmd{\bbordermatrix}{\left(}{\left[}{}{}
\patchcmd{\bbordermatrix}{\right)}{\right]}{}{}
\newcommand{\wall}[2]{%
\smash{%
\vrule height \dimexpr\ht\strutbox+#1 depth \dimexpr\dp\strutbox+#2\relax
}%
}
\begin{document}
\begin{equation}
\bbordermatrix{
& x_{1} & x_{2} & x_{3} & x_{4} & & \cr
& 1 & 0 & \mytikzmark{left}{-1} & 0 & \wall{0pt}{3pt} & 0 \cr
& 0 & 1 & 2 & 0 & \wall{3pt}{3pt} & 0 \cr
& 0 & 0 & \mytikzmark{right}{0} & 1 & \wall{3pt}{0pt} & 0 \cr
}
\Highlight[new1]
\end{equation}
\tikz[remember picture,overlay]{%
\draw [LaTeX-] (new1.south) ++(0,-2.5pt) [out=-90,in=160] to ++(5mm,-10mm) node [right, xshift=-2.5mm, font=\itshape, text=red, align=center] {free\\variable};
}
\end{document}
Antwort2
Dies kommt dem erneuten Stellen derselben Frage ziemlich nahe. Wenn Sie jedoch eine Spalte im ersten Array und nicht im zweiten hervorheben möchten, setzen Sie die Markierungen einfach dort.
Oder egreg will, dass ich das mache
\documentclass[11pt]{book}
\documentclass[11pt]{book}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{xcolor}
\definecolor{ocre}{RGB}{0,173,239}
\usepackage{blkarray}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\usepackage{tikz}
\usetikzlibrary{arrows,matrix,positioning,fit,arrows.meta,}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=ocre!50,draw,
fill opacity=0.5,thick,inner sep=0pt}
}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,
baseline=(#1.base)] \node (#1) {#2};}
%
\newcommand{\Highlight}[1][submatrix]{%
\tikz[overlay,remember picture]{
\node[highlight,fit=(left.north west) (right.south east)] (#1) {};}
}
\newcommand{\mytikzmark}[2]{\tikz[overlay,remember picture, baseline=(#1.base)] \node (#1) {#2};}
\begin{document}
Original Matrix:
\bigskip
\begin{equation}
\begin{bmatrix}[cccc|c]
\noalign{\vskip-1.5\normalbaselineskip}
x_{1} & x_{2} & x_{3} &\multicolumn{1}{c}{ x_{4}} & \\
\noalign{\vskip.5\normalbaselineskip}
1 & 0 & \mytikzmark{left}{-1} & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & \mytikzmark{right}{0} & 1 & 0
\end{bmatrix}\\
\end{equation}
\Highlight[new1]
\tikz[remember picture,overlay]{%
\draw [LaTeX-] (new1.south) ++(0,-2.5pt) [out=-90,in=160] to ++(5mm,-10mm) node [right, xshift=-2.5mm, font=\itshape, text=red, align=center] {free\\variable};
}
\end{document}
Antwort3
Bei {bNiceArray}
von nicematrix
verwenden Sie die gleichen Klammern wie {array}
bei und {bmatrix}
. Die Umgebung {bNiceArray}
verfügt über einen Schlüssel, first-row
um über der Matrix eine Zeile mit Beschriftungen hinzuzufügen.
\documentclass[11pt]{book}
\usepackage{xcolor}
\definecolor{ocre}{RGB}{0,173,239}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta}
\begin{document}
Original Matrix:
\begin{equation}
\left[\begin{array}{@{}cccc|c@{}}
1 & 0 & -1 & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & 0 & 1 & 0
\end{array}\right]
\end{equation}
Updated Matrix:
\begin{equation}
\begin{bNiceArray}{cccc|c}[first-row]
x_1 & x_2 & x_3 & x_4 \\
1 & 0 & \Block[draw,fill=ocre!50,rounded-corners]{3-1}{}
-1 & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & 0 & 1 & 0 \\
\CodeAfter
\tikz \draw [LaTeX-] (3-3.south) ++(0,-4.5pt) [out=-90,in=160] to ++(5mm,-10mm)
node [right, xshift=-2.5mm, font=\itshape, text=red, align=center] {free\\variable};
\end{bNiceArray}
\end{equation}
\end{document}