% \iffalse meta-comment
%
% Copyright (C) 2019 by Tobias Plüss <
[email protected]>
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3 of this license or (at your option) any later
% version. The latest version of this license is in:
%
%
http://www.latex-project.org/lppl.txt
%
% and version 1.3 or later is part of all distributions of
% LaTeX version 2005/12/01 or later.
%
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
%<package>\ProvidesPackage{tikz-imagelabels}
%<package> [2019/06/27 v0.2 put labels on images using TikZ]
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\RecordChanges
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{hyperref}
\usepackage{url}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tikz-imagelabels}
\usepackage{float}
\usepackage{parskip}
% default position for floats: H
\makeatletter
\renewcommand{\fps@figure}{H}
\renewcommand{\fps@table}{H}
\makeatother
\setlength{\parindent}{0pt}
\def\pkg{\texttt{tikz-imagelabels}}
\def\tkz{Ti\emph{k}Z}
\begin{document}
\DocInput{tikz-imagelabels.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
% \changes{v0.1}{2019/01/04}{Submission to CTAN}
%
% \GetFileInfo{tikz-imagelabels.sty}
%
% \title{The \texttt{tikz-imagelabels} package\thanks{This document corresponds
% to \texttt{tikz-imagelabels}~\fileversion, dated~\filedate.}}
% \author{Tobias Plüss}
% \date{\filedate}
% \thispagestyle{empty}
% \maketitle
%
% \begin{abstract}
% This package allows to put annotations (arrows, labels) on top of
% images using Ti\emph{k}Z.
% \end{abstract}
%
% \tableofcontents
%
% \PrintChanges
%
% \StopEventually{}
%
% \section{Introduction}
%
% For manuals, scientific reports and the like, one often needs to add
% annotations to an image (mostly a photograph) to label different items.
% An example of this is shown in \autoref{fig:pleiades}, which shows the names
% of the different stars in a star constellation. The package \pkg{} allows to
% produce this kind of illustration.
%
% \begin{figure}
% \centering
% \begin{annotationimage}{width=6cm}{pleiades.jpg}
% \draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);
% \draw[annotation left = {Pleione at 0.55}] to (0.11,0.49);
% \draw[annotation left = {Alcyone at 0.8}] to (0.39,0.45);
% \draw[annotation below = {Merope at 0.5}] to (0.58,0.28);
% \draw[annotation right = {Electra at 0.3}] to (0.84,0.45);
% \draw[annotation right = {Caleano at 0.75}] to (0.85,0.64);
% \draw[annotation above = {Maia at 0.4}] to (0.67,0.72);
% \draw[annotation above = {Taygeta at 0.9}] to (0.78,0.82);
% \draw[image label = {M45 at south east}];
% \end{annotationimage}
% \caption{The Pleiades, also known as M45. Image source: \url{
http://hubblesite.org/newscenter/archive/releases/2004/20/image/a/}}
% \label{fig:pleiades}
% \end{figure}
%
% But why does this task deserve its own \LaTeX{} package? there are several
% reasons:
% \begin{itemize}
% \item One does not need to edit the image in an external graphics
% program. They can be input directly into your \LaTeX{} document.
%
% \item Since the labels and annotations are processed by \LaTeX{}, all the
% font settings and the like remain consistent through the whole the document.
% However, of course the \pkg{} package allows to configure the style.
%
% \item The annotations stay rock-solid if the image needs to be rescaled
% later.
%
% \item Since the arrows are processed by \tkz{}, they are vector
% graphics and thus, issues with scaling or unsharp/blurry labels, which would
% result if one labels the image in a graphics software, are avoided.
% \end{itemize}
%
% \clearpage
% \autoref{fig:pleiades} was created with the following code:
% \begin{verbatim}
% \begin{annotationimage}{width=6cm}{pleiades.jpg}
% \draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);
% \draw[annotation left = {Pleione at 0.55}] to (0.11,0.49);
% \draw[annotation left = {Alcyone at 0.8}] to (0.39,0.45);
% \draw[annotation below = {Merope at 0.5}] to (0.58,0.28);
% \draw[annotation right = {Electra at 0.3}] to (0.84,0.45);
% \draw[annotation right = {Caleano at 0.75}] to (0.85,0.64);
% \draw[annotation above = {Maia at 0.4}] to (0.67,0.72);
% \draw[annotation above = {Taygeta at 0.9}] to (0.78,0.82);
% \draw[image label = {M45 at south east}];
% \end{annotationimage}
% \end{verbatim}
%
% \section{Usage}
%
% \subsection{Inclusion of the image}
%
% \DescribeEnv{annotationimage}
% To include an image, the |annotationimage| environment is used. It
% has the following syntax:
%
% |annotationimage|\oarg{grid}\marg{options}\marg{file name}
%
% The \meta{grid} is an optional parameter. If this parameter is present, i.e.
% if it has the value |[grid]|, then a coordinate grid is visible. The
% coordinate grid is used to find the coordinates of the points to be labelled.
% If the parameter \meta{grid} is omitted, no coordinate grid is drawn. The code
%
% \begin{verbatim}
% \begin{annotationimage}[grid]{width=6cm}{pleiades.jpg}
% \end{annotationimage}
% \end{verbatim}
%
% produces the image shown in \autoref{fig:grid-example}.
%
% \begin{figure}
% \centering
% \begin{annotationimage}[grid]{width=6cm}{pleiades.jpg}
% \end{annotationimage}
% \caption{Example of an image with coordinate grid}
% \label{fig:grid-example}
% \end{figure}
%
% \meta{options} is any set of options understood by the
% |\includegraphics| command, e.g. |width=|, |height=| and so on. It may also be
% left empty, but in this case, the curly braces need to be there, though.
%
% The \meta{file name} is, obviously, the file name of the image. Like for the
% \meta{options}, any image format supported by |\includegraphics| may be used.
%
% \subsection{Adding a label}
%
% A label (like the ``M45'' in \autoref{fig:pleiades}) can be added to the image
% using following |\draw| macro:
%
% |\draw[image label = {|\meta{text}| at |\meta{placement}|}];|
%
% The \meta{text} parameter is obvious. It contains the text to be put into the
% label.
%
% The \meta{placement} dictates the placement of the label. It may be one of
% |north west|, |north|, |north east|, |east|, |south east|, |south|,
% |south west| or |west|. Also |center| is possible, even though it possibly
% doesn't make a lot of sense. \autoref{fig:label_example} shows an example
% with several labels.
%
% \begin{figure}
% \centering
% \begin{annotationimage}{width=6cm}{example-image}
% \draw[image label = {north at north}];
% \draw[image label = {north east at north east}];
% \draw[image label = {east at east}];
% \draw[image label = {south east at south east}];
% \draw[image label = {south at south}];
% \draw[image label = {south west at south west}];
% \draw[image label = {west at west}];
% \draw[image label = {north west at north west}];
% \draw[image label = {center at center}];
% \end{annotationimage}
% \caption{Example for the placement labels}
% \label{fig:label_example}
% \end{figure}
%
% The label in \autoref{fig:pleiades} was drawn using the following code:
%
% |\draw[image label = {M45 at south east}];|
%
% \changes{v0.2}{2019/06/27}{add coordinate labels}
% Another kind of label is the so-called ``coordinate label''. In contrast to
% the image label, it may be positioned at arbitrary coordinates. The syntax is
% similar to the |image label|:
%
% |\draw[coordinate label = {|\meta{text}| at (|\meta{coordinate}|)}];|
%
% An example of some coordinate labels is shown in \autoref{fig:coord-labels}.
%
% \begin{figure}
% \centering
% \begin{annotationimage}{width=6cm}{pleiades.jpg}
% \draw[coordinate label = {1 at (0.1,0.3)}];
% \draw[coordinate label = {2 at (0.4,0.6)}];
% \draw[coordinate label = {3 at (0.65,0.25)}];
% \draw[coordinate label = {4 at (0.9,0.4)}];
% \draw[coordinate label = {5 at (0.62,0.62)}];
% \draw[coordinate label = {6 at (0.83,0.8)}];
% \draw[image label = {M45 at south east}];
% \end{annotationimage}
% \caption{Example of using coordinate labels}
% \label{fig:coord-labels}
% \end{figure}
%
% \autoref{fig:coord-labels} was created using the following code:
% \begin{verbatim}
% \draw[coordinate label = {1 at (0.1,0.3)}];
% \draw[coordinate label = {2 at (0.4,0.6)}];
% \draw[coordinate label = {3 at (0.65,0.25)}];
% \draw[coordinate label = {4 at (0.9,0.4)}];
% \draw[coordinate label = {5 at (0.62,0.62)}];
% \draw[coordinate label = {6 at (0.83,0.8)}];
% \draw[image label = {M45 at south east}];
% \end{verbatim}
%
% \subsection{Adding annotations}
%
% An annotation is added with the aid of the \tkz{} macro |\draw|. The syntax is
% as follows:
%
% |\draw[annotation |\meta{placement}| = {|\meta{text}| at |\meta{position}|}] to (|\meta{x}|, |\meta{y}|);|
%
% The \meta{placement} is one of: |above|, |right|, |below| or |left|. It tells
% on which side of the image the annotation will appear. \meta{above} and
% \meta{below} basically determine the $y$ coordinate of the text, while
% \meta{left} and \meta{right} determine the $x$ coordinate of the text. The
% remaining coordinate is determined using the \meta{position}.
%
% The \meta{text} is the actual text of the annotation.
%
% The \meta{x} and \meta{y} parameters are the actual coordinates where the
% arrow should point to. Note that \pkg{} will automatically insert a small
% distance between the arrow's tip and the coordinate given, such that the
% arrow is close to the coordinate but does not cover it.
%
% For example, the code
%
% |\draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);|
%
% draws the text ``Atlas'' on the left-hand side of the image, at $y=0.3$. The
% arrow will point towards coordinate $(0.11, 0.4)$ but ends shortly before this
% coordinate such that the interesting feature to be labelled is not covered by
% the arrow's tip.
%
% \section{Configuring styles}
%
% \DescribeMacro{\imagelabelset}
% Various options, like font size and so on, can be configured with the
% |\imagelabelset| macro. It uses the key-value syntax from \tkz{}, e.g.:
%
% |\imagelabelset{|\meta{key}| = |\meta{value}|, ...}|
%
% Multiple \meta{key} and \meta{value} pairs may be combined. The following
% sections list all possible configurations.
%
% |\imagelabelset| can be put anywhere, but it makes sense to put it into the
% preamble of a document to ensure all images have the same look.
%
% There is also a default style. If no |\imagelabelset| command is present, the
% default values for all options are taken. The default style used is as
% follows:
%
% \begin{verbatim}
% \imagelabelset{
% coarse grid color = red,
% fine grid color = gray,
% image label font = \sffamily\bfseries\small,
% image label distance = 2mm,
% image label back = black,
% image label text = white,
% coordinate label font = \sffamily\bfseries\scriptsize,
% coordinate label distance = 2mm,
% coordinate label back = black,
% coordinate label text = white,
% annotation font = \normalfont\small,
% arrow distance = 1.5mm,
% border thickness = 0.6pt,
% arrow thickness = 0.4pt,
% tip size = 1.2mm,
% outer dist = 0.5cm,
% }
% \end{verbatim}
%
% The individual keys are described in the following sections.
%
% \subsection{Grid color}
%
% In most cases, it will not be necessary to adjust the grid colors. However,
% depending on the image, it may be desirable to do so. This is exactly what the
% \meta{coarse grid color} and \meta{fine grid color} are used for. Any color
% specification compatible to \tkz{} may be used. The defaults are red for the
% coarse grid and gray for the fine grid.
%
% \subsection{Font and color for the labels}
%
% The font for the image labels may be configured with \meta{image label font}.
% By default, the image labels are typeset with bold, small, sans-serif font.
%
% The background color of the image labels may be set using the
% \meta{image label back} kay, whereas the text color is specified with the
% \meta{image label text} key. Defaults for the background color and for the
% text color are black and white, respectively.
%
% \subsection{Distance of image labels to the image border}
%
% The \meta{image label distance} key configures the distance, $d$, from the
% image's border to the border of the image label, as shown in
% \autoref{fig:imagelabeldistance_example}. By default, it is set to 2\,mm.
%
% \begin{figure}
% \centering
% \imagelabelset{
% image label distance = 1cm}
% \begin{annotationimage}{width=5cm}{example-image}
% \draw[image label = {Label at south east}];
% \draw[>=latex, red, <->] (1,0.3) -- ++(-1cm,0) node[above, midway] {$d$};
% \draw[>=latex, red, <->] (0.7,0) -- ++(0,1cm) node[midway, right] {$d$};
% \end{annotationimage}
% \caption{Illustration of the \meta{image label distance}}
% \label{fig:imagelabeldistance_example}
% \end{figure}
%
% \subsection{Font for annotations}
%
% The font used for annotations is set by \meta{annotation font}. By default,
% the |\normalfont| is used with small size.
%
% \subsection{Distance of arrow tips}
%
% As mentioned earlier, the arrows are shortened such that their tips don't
% cover the desired point. \autoref{fig:arrowdistance_example} illustrates this.
% All the arrows point to the same coordinate, $(0.5, 0.5)$, but they end at
% the distance $x$ away from the point. This distance may be configured using
% the \meta{arrow distance}. By default, this distance is set to 1.5\,mm. This
% ensures that the arrow tips are close enough to the interesting features, but
% not so close that they cover important parts of the image.
%
% \begin{figure}
% \centering
% \imagelabelset{arrow distance = 1cm}
% \begin{annotationimage}{width=5cm}{example-image}
% \draw[annotation right = {text at 0.5}] to (0.5,0.5);
% \draw[annotation left = {text at 0.1}] to (0.5,0.5);
% \draw[annotation left = {text at 0.7}] to (0.5,0.5);
% \draw[annotation below = {text at 0.4}] to (0.5,0.5);
% \draw[annotation above = {text at 0.8}] to (0.5,0.5);
% \draw[red] (0.5,0.5) circle[radius = 1cm];
% \draw[>=latex, red, <->] (0.5,0.5) -- ++(60:1cm) node[midway, left] {$x$};
% \end{annotationimage}
% \caption{Illustration of the \meta{arrow distance}}
% \label{fig:arrowdistance_example}
% \end{figure}
%
% \subsection{Thickness and size of the arrows}
%
% The arrows themselves consist of two parts: the inner part, which is the
% actual arrow, and the border, which is, by default, a white border around the
% arrow. The border is required to ensure that each arrow is visible, no matter
% on what background it is drawn. The thickness of the black line can be
% configured using the \meta{arrow thickness}, whose default value is 0.4\,pt.
% The thickness of the border around the arrow is configured with the
% \meta{border thickness}, having a default value of 0.6\,pt.
%
% The size of the round dot at the end of the arrows is configured using the
% \meta{tip size}. \autoref{fig:arrowthickness_tipsize_example} illustrates
% both, the \meta{arrow thickness}, and the \meta{tip size}, as parameters
% $a$ and $b$, respectively.
%
% \begin{figure}
% \centering
% \imagelabelset{arrow thickness = 1cm, tip size = 2cm, arrow distance=0}
% \let\tikzset\imagelabelset
% \begin{tikzpicture}
% \draw[annotation arrow] (0,0) -- (4cm,0);
% \draw[>=latex, red, <->] (0.5,-0.5) -- ++(0,1cm) node[right, midway] {$a$};
% \draw[>=latex, red, <->] (3cm,-1cm) -- ++(0,2cm) node[right, midway] {$b$};
% \end{tikzpicture}
% \caption{Illustration of the \meta{arrow thickness}, $a$, and
% the \meta{tip size}, $b$}
% \label{fig:arrowthickness_tipsize_example}
% \end{figure}
%
% \subsection{Distance of annotation texts from the image}
%
% The parameter \meta{outer dist} configures how far away from the image the
% annotation texts will be positioned. By default, this value is 0.5\,cm.
%
% \section{Implementation}
% The only packages required are |tikz| and |xifthen|. If not already loaded,
% they will be loaded automatically.
% \begin{macrocode}
\RequirePackage{tikz}
\RequirePackage{xifthen}
% \end{macrocode}
% Some \tkz{} libraries are also reuiqred for proper operation.
% \begin{macrocode}
\usetikzlibrary{
arrows.meta,
calc,
positioning,
decorations,
decorations.markings,
math,
}
% \end{macrocode}
% \subsection{Configuration}
% For the |\imagelabelset| command, a |pgfkeys| family is defined. All
% configurations (e.g. \meta{tip size} and so on) and styles are stored in the
% PGF key |/imagelabels|. This ensures that these configurations don't overwrite
% any other parameters the user may have set elsewhere.
% \begin{macrocode}
\pgfkeys{
/imagelabels/.is family,
/imagelabels/.search also={/tikz},
}
\def\imagelabelset{\pgfqkeys{/imagelabels}}
% \end{macrocode}
% Then, a set of macros is created which stores the values for the individual
% configuration options.
% \begin{macrocode}
\imagelabelset{
coarse grid color/.store in = \maingridcolor,
fine grid color/.store in = \finegridcolor,
}
\imagelabelset{
image label font/.store in = \imagelabelfont,
image label distance/.store in = \imagelabelsep,
image label back/.store in = \imagelabelback,
image label text/.store in = \imagelabeltext,
}
\imagelabelset{
coordinate label font/.store in = \coordinatelabelfont,
coordinate label distance/.store in = \coordinatelabelsep,
coordinate label back/.store in = \coordinatelabelback,
coordinate label text/.store in = \coordinatelabeltext,
}
\imagelabelset{
annotation font/.store in = \annotationfont,
arrow distance/.store in = \arrowdistance,
arrow thickness/.store in = \arrowthickness,
tip size/.store in = \tipsize,
border thickness/.store in = \borderthickness,
outer dist/.store in = \labeloutersep,
}
% \end{macrocode}
%
% \subsection{Default configuration}
% The default configuration is set. This will ensure that each of the previously
% defined macros has a valid initial value, which may be overwritten by the
% user.
% \begin{macrocode}
\imagelabelset{
coarse grid color = red,
fine grid color = gray,
image label font = \sffamily\bfseries\small,
image label distance = 2mm,
image label back = black,
image label text = white,
coordinate label font = \sffamily\bfseries\scriptsize,
coordinate label distance = 2mm,
coordinate label back = black,
coordinate label text = white,
annotation font = \normalfont\small,
arrow distance = 1.5mm,
border thickness = 0.6pt,
arrow thickness = 0.4pt,
tip size = 1.2mm,
outer dist = 0.5cm,
}
% \end{macrocode}
%
% \subsection{Environment declaration}
% Next, the |annotationimage| environment is declared. It takes 3 arguments,
% the first of which is optional. If it is omitted, its default value is empty.
% \begin{macrocode}
\newenvironment{annotationimage}[3][]{
% \end{macrocode}
% Each time a new |annotationimage| environment is opened, this code will ensure
% that all the definitions stored under the PGF key |/imagelabels| are loaded.
% Then, a new |tikzpicture| is created.
% \begin{macrocode}
\let\tikzset\imagelabelset
\begin{tikzpicture}
% \end{macrocode}
% The 2nd and 3rd arguments to the |annotationimage| are the size/scaling
% options for the image, as well as the actual image file. Thus, a new \tkz{}
% node called |image| is created; the node's content is the image.
% \begin{macrocode}
\node[anchor=south west, inner sep=0]
(image) at (0,0) {\includegraphics[#2]{#3}};
% \end{macrocode}
% Using a scope ensures that the top-right corner always has coordinate $(1,1)$.
% \begin{macrocode}
\begin{scope}[x={(image.south east)},y={(image.north west)}]
% \end{macrocode}
% Next, the first (optional) argument's value is checked. If the user said
% |[grid]| to the first argument, the following code is executed.
% \begin{macrocode}
\ifthenelse{\equal{#1}{grid}}{%
% \end{macrocode}
% This actually draws the coordinate grid.
% \begin{macrocode}
\draw[very thin, draw=\finegridcolor, step=0.02]
(0,0) grid (1,1);
\draw[thin, draw=\maingridcolor, xstep=0.1, ystep=0.1]
(0,0) grid (1,1);
% \end{macrocode}
% then, the labels are put to the coordinate axes.
% \begin{macrocode}
\foreach \x in {0,1,...,9} {
\node [anchor=north] at (\x/10,0) {\tiny 0.\x};
}
\node [anchor=north] at (1,0) {\tiny 1};
\foreach \y in {0,1,...,9} {
\node [anchor=east] at (0,\y/10) {\tiny 0.\y};
}
\node [anchor=east] at (0,1) {\tiny 1};
}{}
}
{
% \end{macrocode}
% Each time the |annotationimage| environment is closed, the previously opened
% |scope| and |tikzpicture| environments need to be closed as well.
% \begin{macrocode}
\end{scope}
\end{tikzpicture}}
% \end{macrocode}
%
% \subsection{Style definitions for the annotations}
% What follows is the definition of the styling for the annotations.
% \begin{macrocode}
\imagelabelset{
% \end{macrocode}
% This is the style for the annotation arrow itself.
% \begin{macrocode}
annotation arrow/.style =
{
% \end{macrocode}
% The |preaction| first draws a thick white arrow. This arrow will become the
% border.
% \begin{macrocode}
preaction =
{
draw,
-{Circle[fill=white, length=\tipsize+2*\borderthickness,
width=\tipsize+2*\borderthickness]},
line width = 2*\borderthickness + \arrowthickness,
white,
shorten >= \arrowdistance,
},
% \end{macrocode}
% After the |preaction| has been performed, this will actually draw the
% ``normal'' arrow.
% \begin{macrocode}
draw,
-{Circle[fill=black, length=\tipsize, width=\tipsize]},
black,
line width = \arrowthickness,
shorten >= \borderthickness + \arrowdistance,
},
% \end{macrocode}
% All the annotation texts have a common style. This ensures they have the same
% font etc. Setting the |inner sep| to 0.5\,ex ensures that the distance between
% the text and the arrow is somewhat aesthetic. It is an empirically determined
% value.
% \begin{macrocode}
annotation node/.style =
{
font=\annotationfont,
inner sep = 0.5ex,
},
% \end{macrocode}
% Next comes the styles for the different annotation placements. For an
% annotation being below the image, this style applies.
% \begin{macrocode}
annotation below/.style args = {#1 at #2}{
% \end{macrocode}
% Using the annotation arrow style tells \tkz{} to draw an arrow as specified
% above, using the geometry defined with |\imagelabelset|.
% \begin{macrocode}
annotation arrow,
% \end{macrocode}
% After the arrow has been drawn, a further path is inserted, which is the
% actual annotation text. For the annotations being above and below the image
% special care must be taken: a |\strut| is appended to the label text to ensure
% that texts being on the same side of the image are on the same line. Without
% the strut, the texts may be differently aligned, depending on their letters --
% e.g. letters ``p'' and ``g'' go slightly further down in the $y$ direction
% than ``a'' or ``b''.
% \begin{macrocode}
insert path = {
(#2,0) ++ (0,-\labeloutersep)
node[anchor = north, annotation node] {#1\strut}
}
},
% \end{macrocode}
% The remaining annotation styles are defined similarly.
% \begin{macrocode}
annotation above/.style args = {#1 at #2}{
annotation arrow,
insert path = {
(#2,1.0) ++ (0,\labeloutersep)
node[anchor = south, annotation node] {#1\strut}
}
},
annotation left/.style args = {#1 at #2}{
annotation arrow,
insert path = {
(0,#2) ++ (-\labeloutersep,0)
node[anchor = east, annotation node] {#1}
}
},
annotation right/.style args = {#1 at #2}{
annotation arrow,
insert path = {
(1.0,#2) ++ (\labeloutersep,0)
node[anchor = west, annotation node] {#1}
}
},
}
% \end{macrocode}
%
% \subsection{Style definitions for the labels}
% Next follows the style definition for the image labels. A general style
% defines the appearance and color.
% \begin{macrocode}
\imagelabelset{
image label style/.style = {
rectangle,
minimum width = 5mm,
minimum height = 5mm,
fill = \imagelabelback,
text = \imagelabeltext,
font = \imagelabelfont,
},
coordinate label style/.style = {
rectangle,
minimum width = 3mm,
minimum height = 3mm,
fill = \coordinatelabelback,
text = \coordinatelabeltext,
font = \coordinatelabelfont,
},
% \end{macrocode}
% On the other hand, the |image label| style defines the actual image labels.
% \begin{macrocode}
image label/.style args = {#1 at #2}{
insert path = {
(image.#2) node[outer sep = \imagelabelsep,
anchor=#2, image label style] {#1}
}
},
coordinate label/.style args = {#1 at (#2)}{
insert path = {
node[outer sep = \coordinatelabelsep,
anchor=center, coordinate label style] at (#2) {#1}
}
},
}
% \end{macrocode}
%
% \Finale
\endinput