Highlight and use arrows in an equation In a robust manner
I don't quite understand the output you have in mind, but I definitely would go through the tikz matrix
way, by putting two matrices of nodes in the same tikzpicture, without using remember picture
nor overlay
.
For example:
\documentclass{article}
\usepackage{amsmath, amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows,matrix,positioning}% For nice arrow tips
\begin{document}
\tikzset{
!/.style = {
fill=yellow!30,
},
mymatrix/.style = {
matrix of math nodes,
left delimiter = (,
right delimiter = ),
nodes={minimum width=6ex},
}
}
\begin{tikzpicture}
\matrix[mymatrix, name=M1]{
1 \\
|[!]| 2\rho\pi \\
|[!]| 3\\
};
\matrix[mymatrix, name=M2, below=of M1] {
1 \\
2\rho\pi\\
|[!]| 3\\
};
\draw [red, >=stealth, <->, shorten <= 3pt, shorten >=3 pt]
(M1-2-1.south east) to[bend left=60] (M2-3-1.east);
\end{tikzpicture}
\end{document}
Produces:
By means of hf-tikz
, one isn't forced to exploit the TikZ-matrix
. This is an example showing how to perform such a task:
\documentclass[11pt,a4paper]{article}
\usepackage{amsmath, amssymb}
\usepackage[customcolors,markings]{hf-tikz}
\usetikzlibrary{calc}
\tikzset{aspect/.style={
set fill color=green!50!lime!60,
set border color=white,
disable rounded corners=true
},
vert offsets/.style={
above offset=0.32,
below offset=-0.08
},
expr/.style={
left offset=-0.05,
right offset=0.25,
vert offsets,
aspect,
},
number/.style={
left offset=-0.1,
right offset=0.1,
vert offsets,
aspect
}
}
\begin{document}
\[\begin{bmatrix}
1 \\ \tikzmarkin[expr, mark at=0.135]{a}2\rho \pi \\ 3\tikzmarkend{a}
\end{bmatrix}
\]
% store the point in a coordinate: let it be a bit shifted for clarity
\tikz[remember picture,overlay]\coordinate[use marker id,xshift=0.1cm] (A) at (0,0);
\[\begin{bmatrix}
1 \\ 2\rho \pi \\ \tikzmarkin[number, mark at=0.135]{b}3\tikzmarkend{b}
\end{bmatrix}
\]
% store the point in a coordinate: let it be a bit shifted for clarity
\tikz[remember picture]\coordinate[use marker id,xshift=0.25cm] (B) at (0,0);
% draw the curve
\tikz[remember picture,overlay]\draw[blue]
(A) edge[bend left=60,stealth-stealth](B);
\end{document}
The result:
The markings
option is a feature of version 0.3 of the package, highly based on the nice answer Jake gave in How to draw tangent line of an arbitrary point on a path in TikZ. It exploits the TikZ markings
library, thus it is possible to deploy markers as a number from 0 (start of the path) to 1 (end of the path). To show where the markers are placed, use the show markers
key; for example:
\[\begin{bmatrix}
1 \\ \tikzmarkin[expr, show markers, mark at=0.135]{a}2\rho \pi \\ 3\tikzmarkend{a}
\end{bmatrix}
\]
...
\[\begin{bmatrix}
1 \\ 2\rho \pi \\ \tikzmarkin[number,show markers, mark at=0.135]{b}3\tikzmarkend{b}
\end{bmatrix}
\]
gives:
Moreover, the package allows to define aspects style in terms of shading: they can be adopted separately each time one highlights a formula. One way to use them, is the following:
- define some general aspects style, say
aspect x
; - define styles containing offset definition plus an argument: this will be in charge to select the proper aspect style; an example:
expr=aspect x
.
This is an example covering some of the possibilities:
\documentclass[11pt,a4paper]{article}
\usepackage{amsmath, amssymb}
\usepackage[customcolors,shade,markings]{hf-tikz}
\usetikzlibrary{calc}
\tikzset{aspect 1/.style={
set border color=green!70!black,
top color=white,
bottom color=green!50!lime!60,
disable rounded corners=true
},
aspect 2/.style={
set border color=cyan!50!blue,
bottom color=white,
top color=cyan!50!blue!60,
disable rounded corners=true
},
aspect 3/.style={
set border color=white,
inner color=white,
outer color=red!75!black!30,
disable rounded corners=true
},
vert offsets/.style={
above offset=0.32,
below offset=-0.08
},
expr/.style={
left offset=-0.05,
right offset=0.25,
vert offsets,
#1,
},
number/.style={
left offset=-0.1,
right offset=0.1,
vert offsets,
#1
}
}
\begin{document}
\[
\begin{bmatrix}
1 \\ \tikzmarkin[expr=aspect 1, mark at=0.135]{a}2\rho \pi \\ 3\tikzmarkend{a}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture,overlay]\coordinate[use marker id,xshift=0.1cm] (A) at (0,0);
\hspace{1cm}
\begin{bmatrix}
1 \\ \tikzmarkin[expr=aspect 2, mark at=0.135]{a2}2\rho \pi \\ 3\tikzmarkend{a2}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture,overlay]\coordinate[use marker id,xshift=0.1cm] (A2) at (0,0);
\hspace{1cm}
\begin{bmatrix}
1 \\ \tikzmarkin[expr=aspect 3, mark at=0.135]{a3}2\rho \pi \\ 3\tikzmarkend{a3}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture,overlay]\coordinate[use marker id,xshift=0.1cm] (A3) at (0,0);
\]
\[
\begin{bmatrix}
1 \\ 2\rho \pi \\ \tikzmarkin[number=aspect 3, mark at=0.135]{b}3\tikzmarkend{b}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture]\coordinate[use marker id,xshift=0.25cm] (B) at (0,0);
\hspace{1cm}
\begin{bmatrix}
1 \\ 2\rho \pi \\ \tikzmarkin[number=aspect 1, mark at=0.135]{b2}3\tikzmarkend{b2}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture]\coordinate[use marker id,xshift=0.25cm] (B2) at (0,0);
\hspace{1cm}
\begin{bmatrix}
1 \\ 2\rho \pi \\ \tikzmarkin[number=aspect 2, mark at=0.135]{b3}3\tikzmarkend{b3}
\end{bmatrix}
% store the point in a coordinate: let it be a bit shifted
\tikz[remember picture]\coordinate[use marker id,xshift=0.25cm] (B3) at (0,0);
\]
% draw the curve
\tikz[remember picture,overlay]\draw[cyan!50!blue]
(A) edge[bend left=60,stealth-stealth](B);
\tikz[remember picture,overlay]\draw[red!75!black]
(A2) edge[bend left=60,stealth-stealth](B2);
\tikz[remember picture,overlay]\draw[green!70!black]
(A3) edge[bend left=60,stealth-stealth](B3);
\end{document}
The result: