Im folgenden Code werden die gefundenen LösungenHier, ich versuche, die Optionen \node
und zu verwenden \subnode
, um den Pfeil zu zeichnen, aber ich kann die Datei nicht kompilieren. Können Sie mir helfen, den Code zu korrigieren, damit der Pfeil auf den Text und die hervorgehobene Zelle zeigt, wie hier
Hier ist der Code:
\documentclass{article}
\usepackage{tikz}
\usepackage{blkarray}
\usetikzlibrary{fit,calc,arrows,shapes,decorations.pathreplacing,pgfplots.groupplots, matrix}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=red!15,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) {};}
}
\begin{document}
\[
M = \left(\begin{array}{*5{c}}
\tikzmark{left}{1} & 2 & 3 & 4 & 5 \\
6 & 7 & 8 & 9 & 10 \\
11 & 12 & \tikzmark{right}{13} & 14 & 15 \\
16 & 17 & 18 & 19 & 20
\end{array}\right)
\Highlight[first]
\qquad
M^T = \left(\begin{array}{*5{c}}
\tikzmark{left}{1} & 6 & 11 & 16 \\
2 & 7 & 12 & 17 \\
3 & 8 & \tikzmark{right}{13} & 18 \\
4 & 9 & 14 & 19 \\
5 & 10 & 15 & 20
\end{array}\right)
\]
\Highlight[second]
%
\tikz[overlay,remember picture] {
\draw[->,thick,red,dashed] (first) -- (second) node [pos=0.66,above] {Transpose};
\node[above of=first] {$N$};
\node[above of=second] {$N^T$};
}
\[
\begin{blockarray}{ccccc}
x_{1} & x_{2} & x_{3} & x_{4} & \\
\begin{block}{[cccc|c]}
1 & 0 & \tikzmark{left}{-1} & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & \tikz{\node{\subnode{d1}\tikzmark{right}{0}};} & 1 & 0 \\
\end{block}
\end{blockarray}
\Highlight[new1]
\]
%\begin{tikzpicture}[remember picture,overlay]
% \node [shift={(3.0em,-4.0ex)}, anchor=west] at ({pic cs:starta}) (X) {Tip measurement};
% \draw [mybluei, thick, -latex] (X.west) -| ($({pic cs:starta})!0.5!({pic cs:enda})+(0,-0.5ex)$);
%\end{tikzpicture}
\end{document}
Antwort1
Das Problem mit dem Code ist also, dass er \subnode
nie definiert ist. Sie können ihn definieren, indem Sie die tikzmark
Bibliothek laden. Allerdings \newcommand\tikzmark...
schlägt dann fehl, da die Bibliothek den Standardbefehl definiert \tikzmark
. Dieses Problem kann vermieden werden, indem Sie einfach einen anderen Makronamen wählen, z. B. \mytikzmark
.
Sie können jedoch nicht \mytikzmark
oder innerhalb eines Knotens innerhalb eines TikZ-Bildes verwenden. Tatsächlich ist \tikzmark
die Daseinsberechtigung von in diesem Kontext genau deshalb gegeben, weil s dort nicht verwendet werden kann.\subnode
tikzmark
Sie können also entweder die umgebende TikZ-Bildumgebung verwenden \mytikzmark
oder ohne. Oder Sie können s innerhalb einer verwenden.\tikzmark
\subnode
Hier ist ein Vergleich der beiden Methoden:
\documentclass{article}
\usepackage{tikz}
\usepackage{blkarray}
\usetikzlibrary{fit,tikzmark}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=red!15,draw, fill opacity=0.5,thick,inner sep=0pt}
}
\newcommand{\mytikzmark}[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) {};}
}
\begin{document}
\[
\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 & \tikz{\node{\subnode{d1}{d1}\subnode{right}{0}};} & 1 & 0 \\
\end{block}
\end{blockarray}
\Highlight[new1]
\]
\tikz[remember picture,overlay]{%
\node [fit=(d1), inner sep=-2.5pt, draw=blue, circle] {};
\node [fit=(right), inner sep=-2.5pt, draw=green!50!black, circle] {};
}
\[
\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{d1}{d1} \mytikzmark{right}{0} & 1 & 0 \\
\end{block}
\end{blockarray}
\Highlight[new1]
\]
\tikz[remember picture,overlay]{%
\node [fit=(d1), inner sep=-2.5pt, draw=blue, circle] {};
\node [fit=(right), inner sep=-2.5pt, draw=green!50!black, circle] {};
}
\end{document}
Angesichts Ihrer aktualisierten Frage glaube ich nicht, dass Sie das \subnode
überhaupt wollen. Warum verwenden Sie nicht einfach die Noten, die Sie bereits haben?
\documentclass{article}
\usepackage{tikz}
\usepackage{blkarray}
\usetikzlibrary{fit,arrows.meta}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=red!15,draw, fill opacity=0.5,thick,inner sep=0pt}
}
\newcommand{\mytikzmark}[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) {};}
}
\begin{document}
\[
\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]
\]
\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
Folgendes können Sie mit der Umgebung {bNiceArray}
von tun nicematrix
(mit der neuesten Version: v. 5.12 vom 10.03.2021).
{array}
Diese Umgebung ist (von ) ähnlich, array
erstellt jedoch PGF/Tikz-Knoten unter den Zellen, Zeilen und Spalten.
Ich habe diese Knoten verwendet, um den Pfeil und seine Beschriftung zu zeichnen. Für die hervorgehobene Spalte gibt es einen integrierten Befehl, der \Block
einfach zu verwenden ist (Sie benötigen keine Transparenz).
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
$\begin{bNiceArray}{cccc|c}[first-row]
x_1 & x_2 & x_3 & x_4 \\
1 & 0 & \Block[draw,fill=red!10,rounded-corners]{3-1}{}-1 & 0 & 0 \\
0 & 1 & 2 & 0 & 0 \\
0 & 0 & 0 & 1 & 0
\CodeAfter
\tikz
\draw [<-] (3-3.south) ++(0,-5pt) [out=-90,in=160] to ++(5mm,-10mm)
node [right, xshift=-2.5mm, font=\itshape, text=red, align=center] {free\\variable} ;
\end{bNiceArray}$
\end{document}
Sie benötigen mehrere Kompilierungen (da nicematrix
PGF/Tikz-Knoten verwendet werden).