5

Following this post. I would like to use arrows with tables. Yet my tables are too big and I want to rescale them using scalebox. But went I use place a tikzmark in the scaleboxed tables, the position is wrong. tikzmark seems to remember the point before the table is scaleboxed.

Do you have any solution to this problem?

Here is an example:

\documentclass[pdf]{beamer}
\mode<presentation>{}
\usepackage[english]{babel}
\usepackage{color, colortbl}
\usepackage{tikz}
\usetikzlibrary{tikzmark, positioning, fit, shapes.misc}

\usetikzlibrary{decorations.pathreplacing, calc}

\tikzset{brace/.style={decorate, decoration={brace}},
  brace mirrored/.style={decorate, decoration={brace,mirror}},
}

\newcolumntype{g}{>{\columncolor{red}}c}

\begin{document}
  \begin{frame}
    \begin{tabular}{ | l | l |}
      \hline
      letter & number \\ \hline
      \tikzmark{x}A &  1\tikzmark{a} \\ \hline
      A &  2 \\ \hline
      \tikzmark{y}A &  1\tikzmark{b} \\ \hline
      \tikzmark{w}B &  1 \\ \hline
      \tikzmark{z}B &  2 \\ \hline
    \end{tabular}
    \begin{tikzpicture}[remember picture, overlay]
      \draw ($(pic cs:a) + (3.5em,0)$) edge[bend left=60,-stealth] ($(pic cs:b) + (3.5em,0)$) node [midway, right, xshift=5pt, yshift=5pt] {Duplicate};
      \draw[brace mirrored, thick] ($(pic cs:x) + (-8pt,1ex)$)--($(pic cs:y) + (-8pt,-1ex)$) node [midway, left] {A};
      \draw[brace mirrored, thick] ($(pic cs:w) + (-8pt,1ex)$)--($(pic cs:z) + (-8pt,-1ex)$) node [midway, left] {B};
    \end{tikzpicture}

    \tikzset{
      every picture/.style={remember picture,baseline},
      every node/.style={
        inner sep=0pt,
        anchor=base,
        minimum width=1.8cm,
        align=center,
        text depth=.25ex,
        outer sep=1.5pt},
      every path/.style={
        thick,
        rounded corners
      }
    }

    \begin{table}
\scalebox{0.7}{
     \centering

\begin{tabular}{|c|c|c|g|c|}
        \hline
        bla   &  bla  & bla   & $b_1$\tikzmark{c}\\
        bla   &  bla  & bla   & bla \\\hline
        bla   &  bla  & bla   & bla \\\hline
        bla   &  bla  & bla   & bla \\\hline
        bla   &  bla  & bla   & bla \\\hline
      \end{tabular}
}
    \end{table}

    \begin{tikzpicture}[remember picture,overlay]
      \node [right=2cm,above=2cm,minimum width=0pt] at ({pic cs:c}) (A) {A};
      \draw [<-,out=5,in=180] ([xshift=0pt]{pic cs:c}) to (A);
    \end{tikzpicture}

  \end{frame}

\end{document}

1 Answer 1

4

Old question, but here are two potential workarounds, both of which involve not using \scalebox.

  1. Reduce the size of the table by reducing fontsize and/or \tabcolsep instead of with \scalebox. Then the \tikzmark works fine.

  2. Place the tabular in a TikZ node with scale=X in the options, and draw the arrow relative to the node anchors. This is not as convenient as with \tikzmark solution though, as you have to figure out the endpoint of the arrow manually.

enter image description here

\documentclass[pdf]{beamer}
\mode<presentation>{}
\usepackage[english]{babel}
\usepackage{color, colortbl}
\usepackage{tikz}
\usetikzlibrary{tikzmark, positioning, fit, shapes.misc}

\usetikzlibrary{decorations.pathreplacing, calc}

\tikzset{brace/.style={decorate, decoration={brace}},
  brace mirrored/.style={decorate, decoration={brace,mirror}},
}

\newcolumntype{g}{>{\columncolor{red}}c}

\begin{document}
\begin{frame}
    \begin{tabular}{ | l | l |}
        \hline
        letter        & number        \\ \hline
        \tikzmark{x}A & 1\tikzmark{a} \\ \hline
        A             & 2             \\ \hline
        \tikzmark{y}A & 1\tikzmark{b} \\ \hline
        \tikzmark{w}B & 1             \\ \hline
        \tikzmark{z}B & 2             \\ \hline
    \end{tabular}
    \begin{tikzpicture}[remember picture, overlay]
        \draw ($(pic cs:a) + (3.5em,0)$) edge[bend left=60,-stealth] ($(pic cs:b) + (3.5em,0)$) node [midway, right, xshift=5pt, yshift=5pt] {Duplicate};
        \draw[brace mirrored, thick] ($(pic cs:x) + (-8pt,1ex)$)--($(pic cs:y) + (-8pt,-1ex)$) node [midway, left] {A};
        \draw[brace mirrored, thick] ($(pic cs:w) + (-8pt,1ex)$)--($(pic cs:z) + (-8pt,-1ex)$) node [midway, left] {B};
    \end{tikzpicture}

    \tikzset{
        every picture/.style={remember picture,baseline},
        every node/.style={
                inner sep=0pt,
                anchor=base,
                minimum width=1.8cm,
                align=center,
                text depth=.25ex,
                outer sep=1.5pt},
        every path/.style={
                thick,
                rounded corners
            }
    }

    \begin{table}
        \scriptsize % or \tiny or \footnotesize
        \setlength\tabcolsep{2pt}
        \centering

        \begin{tabular}{|c|c|c|g|c|}
            \hline
            bla & bla & bla & $b_1$\tikzmark{c} \\
            bla & bla & bla & bla               \\\hline
            bla & bla & bla & bla               \\\hline
            bla & bla & bla & bla               \\\hline
            bla & bla & bla & bla               \\\hline
        \end{tabular}
    \end{table}

    \begin{tikzpicture}[remember picture,overlay]
        \node [right=2cm,above=2cm,minimum width=0pt] at ({pic cs:c}) (A) {A};
        \draw [<-,out=5,in=180] ([xshift=0pt]{pic cs:c}) to (A);
    \end{tikzpicture}

\end{frame}

\begin{frame}
    \begin{tabular}{ | l | l |}
        \hline
        letter         & number         \\ \hline
        \tikzmark{x2}A & 1\tikzmark{a2} \\ \hline
        A              & 2              \\ \hline
        \tikzmark{y2}A & 1\tikzmark{b2} \\ \hline
        \tikzmark{w2}B & 1              \\ \hline
        \tikzmark{z2}B & 2              \\ \hline
    \end{tabular}
    \begin{tikzpicture}[remember picture, overlay]
        \draw ($(pic cs:a2) + (3.5em,0)$) edge[bend left=60,-stealth] ($(pic cs:b2) + (3.5em,0)$) node [midway, right, xshift=5pt, yshift=5pt] {Duplicate};
        \draw[brace mirrored, thick] ($(pic cs:x2) + (-8pt,1ex)$)--($(pic cs:y2) + (-8pt,-1ex)$) node [midway, left] {A};
        \draw[brace mirrored, thick] ($(pic cs:w2) + (-8pt,1ex)$)--($(pic cs:z2) + (-8pt,-1ex)$) node [midway, left] {B};
    \end{tikzpicture}

    \tikzset{
        every picture/.style={remember picture,baseline},
        every node/.style={
                inner sep=0pt,
                anchor=base,
                minimum width=1.8cm,
                align=center,
                text depth=.25ex,
                outer sep=1.5pt},
        every path/.style={
                thick,
                rounded corners
            }
    }

    \begin{table}
        \centering

        \begin{tikzpicture}
            \node [inner sep=0pt,scale=0.7] (table) {%
                \begin{tabular}{|c|c|c|g|c|}
                    \hline
                    bla & bla & bla & $b_1$ \\
                    bla & bla & bla & bla   \\\hline
                    bla & bla & bla & bla   \\\hline
                    bla & bla & bla & bla   \\\hline
                    bla & bla & bla & bla   \\\hline
                \end{tabular}};

            \begin{scope}[overlay]
                \node [right=2cm,above=2cm,minimum width=0pt] at (table.north east) (A) {A};
                \draw [<-,out=5,in=180] ([xshift=-5pt,yshift=-8pt]table.north east) to (A);
            \end{scope}
        \end{tikzpicture}
    \end{table}

\end{frame}

\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .