2

After adding support for tooltips today in pdfcomment (\pdftooltip) I wanted to make a TikZ example with tooltip annotations. Within \pdftooltip the annotated element is set into a box to measure the size, which does not work for parts of a TikZ graphic. There are workarounds (manual box or \textbullet) in the following example:

\documentclass{article}
\usepackage{tikz}
\usepackage{pdfcomment}[2011/05/19]
% http://svn.berlios.de/viewvc/pdfcomment/trunk/dev/tex/latex/pdfcomment/pdfcomment.sty?revision=11
\begin{document}
\begin{tikzpicture}[scale=1.5]
    % Draw axes
    \draw [<->,thick] (0,2) node (yaxis) [above] {$y$}
        |- (3,0) node (xaxis) [right] {$x$};
    % Draw two intersecting lines
    \draw (0,0) coordinate (a_1) -- (2,1.8) coordinate (a_2);
    \draw (0,1.5) coordinate (b_1) -- (2.5,0) coordinate (b_2);
    % Calculate the intersection of the lines a_1 -- a_2 and b_1 -- b_2
    % and store the coordinate in c.
    \coordinate (c) at (intersection of a_1--a_2 and b_1--b_2);
    % Draw lines indicating intersection with y and x axis. Here we use
    % the perpendicular coordinate system
    \draw[dashed] (yaxis |- c) node[left] {$y'$}
        -| (xaxis -| c) node[below] {$x'$};
    % Draw a dot to indicate intersection point
    %% 1 - add a box manually %%
    \fill[red] (c) circle (2pt);
    \draw (c) node {\pdftooltip{\rule{0pt}{5pt}\rule{5pt}{0pt}}{This is the intersection point\textCR of the two lines!}};
    %% 2 - use \textbullet, which produxes a size in a box %%
    %\draw[red] (c) node {\pdftooltip{\textbullet}{This is the intersection point\textCR of the two lines!}};
    %% 3 - produces an error %%
    % "\fill[red] (c) circle (2pt);" can not be put in a box to measure the size
    %\pdftooltip{\fill[red] (c) circle (2pt);}{This is the intersection point\textCR of the two lines!}}    
\end{tikzpicture}
\end{document}

graphic with tooltip annotation

Is there a way that part of a TikZ graphic does produce a size when set into a box?

LaRiFaRi
  • 43,807
Josef
  • 7,432

1 Answers1

3

I would make the tooltip part of the path. Then you can access the paths bounding box using current path bounding box and measure its dimensions.

\fill[red] (c) circle (2pt)
    let
        \p1 = (current path bounding box.south west),
        \p2 = (current path bounding box.north east)
    in
  node at (current path bounding box) {% should be in the center of the current path
    \pdftooltip{\rule{\dimexpr\x2-\x1\relax}{0pt}\rule{0pt}{\dimexpr\y2-\y1\relax}}%
    {This is the intersection point\textCR of the two lines!}%
};

However, for circles this seems to generate a rectangle which fits into the circle not around it.

For multiple paths you can use a scope and track the bounding box of it using local bounding box. Then use the same measurement technique as above.

Martin Scharrer
  • 262,582
  • Thanks, your solutions works after adding \usetikzlibrary{calc} (TikZ creates a useful error message! Hurrah! ;-)). As i'm not a regular user of TikZ i will have to look up the scope thing tomorrow. – Josef May 19 '11 at 19:13
  • @Josef: Ups, yeah I forgot to mention the calc library. It should be also possible to use some path option to execute the code after the path. – Martin Scharrer May 19 '11 at 19:15