Skip to content

Instantly share code, notes, and snippets.

@Caramdir
Created April 2, 2011 00:45
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Caramdir/899107 to your computer and use it in GitHub Desktop.
Save Caramdir/899107 to your computer and use it in GitHub Desktop.
Tikz scopes with coordinates relative to a node
% This file adds two environments for TkiZ.
%
% The first, tikzonnode, simply changes the coordinate system so that (0,0) is
% at the south west anchor of the given node and (1,1) is at the north east
% anchor.
%
% The second environment, tikzonimage, displays the given image file (the first
% optional argument is passed to \includegraphics) and creates a tikzpicture on
% top of it with coordinates relative to the image corners.
%
% Both environments accept an optional argument with TikZ options.
\documentclass{article}
\usepackage{tikz}
\makeatletter
\def\tikzonnode#1{%
\pgfutil@ifnextchar[{\tikzonnode@opt#1}{\tikzonnode@opt#1[]}%
}
\def\endtikzonnode{%
\end{scope}%
}
\def\tikzonnode@opt#1[#2]{%
\pgfpointanchor{#1}{south west}%
\pgfgetlastxy\tse@tikz@shift@x\tse@tikz@shift@y
\begin{scope}[
shift={(\tse@tikz@shift@x,\tse@tikz@shift@y)},
x={(#1.south east)},
y={(#1.north west)},
#2]%
}
\def\tikzonimage{%
\pgfutil@ifnextchar[{\tikzonimage@opt}{\tikzonimage@opt[]}%
}
\def\tikzonimage@opt[#1]#2{%
\begin{tikzpicture}
\node[inner sep=0] (image) {\includegraphics[#1]{#2}};
\begin{tikzonnode}{image}%
}
\def\endtikzonimage{%
\end{tikzonnode}
\end{tikzpicture}%
}
\makeatother
\begin{document}
\begin{tikzonimage}[width=0.3\textwidth]{some_image.jpg}[color=red]
\node at (0,0) {test};
\end{tikzonimage}
\begin{tikzpicture}
\node (A) [text width=2cm] {abc abc abc abc abc abc abc abc abc};
\begin{tikzonnode}{A}[color=red]
\node at (0,0) {test};
\end{tikzonnode}
\end{tikzpicture}
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment