Tikz로 테이블에 주석 달기; 화살표 추가

Tikz로 테이블에 주석 달기; 화살표 추가

왼쪽 방향 화살표가 있는 테이블의 임의의 두 셀(즉, 오른쪽이 아닌/왼쪽 끝이 아닌, 인접하지 않은) 셀을 연결하는 상단에 일부 텍스트가 있는 화살표를 그릴 수 있기를 원합니다. 특히, 나는 당신이 얻는 것과 비슷한 모양의 테이블 상단에 화살표를 얻으려고 노력하고 있습니다.여기, 내 테이블의 셀에 숫자가 포함되어 있지 않지만 모든 셀을 연결하지 않고 쌍으로 인접한 셀만 연결하는 솔루션을 찾고 있습니다. 이것을 수정하는 올바른 방법이 무엇인지 잘 모르겠습니다.

저는 beamer, 및 tikz(아주 처음 접하긴 하지만) 및 를 사용하고 있습니다 tabularx.

이를 수행할 수 있는 방법이 있습니까?

편집: 여기에 내가 엉망으로 만들고 있는 것과 같은 코드가 있습니다. 어떻게 해결해야 할지 잘 모르겠습니다.

    \documentclass[pdf]{beamer}
    \mode<presentation>{}
    \usepackage[english]{babel}
    \usepackage{natbib}
    \usepackage{color, colortbl}
    \renewcommand{\bibnumfmt}[1]{#1.}
    \usepackage{ marvosym }
    \usepackage{ tikzsymbols }
    \usepackage{ wasysym }
    \usepackage{tikz}
    \usetikzlibrary{tikzmark, positioning, fit,shapes.misc}

    \usetikzlibrary{decorations.pathreplacing, calc}


         \newcommand{\tikzmark}[2][-3pt]{\tikz[remember picture, overlay, baseline=-0.5ex]\node[#1](#2){};}

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

          \newcounter{brace}
          \setcounter{brace}{0}
          \newcommand{\drawbrace}[3][brace]{%
          \refstepcounter{brace}
         \tikz[remember picture, overlay]\draw[#1] (#2.center)--(#3.center)node[pos=0.5, name=brace-\thebrace]{};
       }

      \newcounter{arrow}
      \setcounter{arrow}{0}
      \newcommand{\drawcurvedarrow}[3][]{%
      \refstepcounter{arrow}
      \tikz[remember picture, overlay]\draw (#2.center)edge[#1]node[coordinate,pos=0.5, name=arrow-\thearrow]{}(#3.center);
       }

       \newcommand{\annote}[3][]{%
       \tikz[remember picture, overlay]\node[#1] at (#2) {#3};
       }



       \newcommand\marktopleft[1]{
        \tikz[overlay,remember picture] 
        \node (marker-#1-a) at (0,1.5ex) {};
      }
       \newcommand\markbottomright[1]{
       \tikz[overlay,remember picture] 
      \node (marker-#1-b) at (0,0) {};
      \tikz[overlay,remember picture,thick,dashed,inner sep=3pt]
      \node[draw,rounded rectangle,fit=(marker-#1-a.center) (marker-#1-b.center)] {};
      }

     \usepackage{tabularx}
     \usepackage{stmaryrd}
     \usepackage{amsmath}
    \usepackage{mathtools}
    \usepackage{xcolor}

   \makeatletter
   \newcommand{\redub}{}
    \def\redub#1{%
    \@ifnextchar_%
      {\@redub{#1}}
      {\@latex@warning{Missing argument for \string\redub}\@redub{#1}_{}}%
     }
      \def\@redub#1_#2{%
      \colorlet{currentcolor}{.}%
      \color{red}%
      \underbrace{\color{currentcolor}#1}_{\color{red}#2}%
      \color{currentcolor}%
     }

      \newcounter{savedenumi}
      \newenvironment{moreenum}{%
       \setcounter{savedenumi}{\value{enumi}}%
       \begin{enumerate}\setcounter{enumi}{\value{savedenumi}}%
    }{%
      \end{enumerate}%
     }
      \AtBeginSection[]
   {
    \begin{frame}<beamer>
        \frametitle{}
        \tableofcontents[currentsection]
     \end{frame}
    }



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


     \begin{document}
     \begin{frame}
     \begin{tabular}{ | l | l |}
        \hline
        letter & number \\ \hline
        \tikzmark[xshift=-8pt,yshift=1ex]{x}A &  1\tikzmark[xshift=3.5em]{a} \\ \hline
         A &  2 \\ \hline
        \tikzmark[xshift=-8pt,yshift=-1ex]{y}A &  1\tikzmark[xshift=3.5em]{b} \\ \hline
        \tikzmark[xshift=-8pt,yshift=1ex]{w}B &  1 \\ \hline
        \tikzmark[xshift=-8pt,yshift=-1ex]{z}B &  2 \\ \hline
    \end{tabular}
   \drawcurvedarrow[bend left=60,-stealth]{a}{b}
   \drawbrace[brace mirrored, thick]{x}{y}
   \drawbrace[brace mirrored, thick]{w}{z}
   \annote[right]{arrow-1}{Duplicate}
   \annote[left]{brace-1}{A}
   \annote[left]{brace-2}{B}


  \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{tabular}{|c|c|c|g|c|}
     \hline
    bla   &  bla  & bla   & $b_1$\tikzmark{a} \\ \hline
    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:a) (A) {A};
\draw [<-,out=5,in=180] ([xshift=15pt]{pic cs:a}) to (A);
\end{tikzpicture}
\end{frame}

\end{document}

답변1

예를 들어 tikzmark. 귀하의 MWE에서 관련 없는 내용을 제거했습니다.

\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}
      \centering
      \begin{tabular}{|c|c|c|g|c|}
        \hline
        bla   &  bla  & bla   & $b_1$\tikzmark{c} \\ \hline
        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=15pt]{pic cs:c}) to (A);
    \end{tikzpicture}
  \end{frame}

\end{document}

이는 나중에 주석을 위한 점을 정의할 필요가 없는 도면 명령과 주석 명령을 통합합니다. calc원래 마크의 위치를 ​​변경하는 대신 위치를 조정하는 데 사용됩니다 . 이렇게 하면 일부 카운터가 절약됩니다. 나는 여러 명령을 함께 작동시키는 것에 대해 걱정하는 것보다 단일 오버레이 그림에 모든 것을 넣는 것이 더 효과적이라는 것을 알았지 만 킬로미터는 분명히 다를 수 있습니다.

화살과 버팀대

관련 정보