왼쪽 방향 화살표가 있는 테이블의 임의의 두 셀(즉, 오른쪽이 아닌/왼쪽 끝이 아닌, 인접하지 않은) 셀을 연결하는 상단에 일부 텍스트가 있는 화살표를 그릴 수 있기를 원합니다. 특히, 나는 당신이 얻는 것과 비슷한 모양의 테이블 상단에 화살표를 얻으려고 노력하고 있습니다.여기, 내 테이블의 셀에 숫자가 포함되어 있지 않지만 모든 셀을 연결하지 않고 쌍으로 인접한 셀만 연결하는 솔루션을 찾고 있습니다. 이것을 수정하는 올바른 방법이 무엇인지 잘 모르겠습니다.
저는 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
원래 마크의 위치를 변경하는 대신 위치를 조정하는 데 사용됩니다 . 이렇게 하면 일부 카운터가 절약됩니다. 나는 여러 명령을 함께 작동시키는 것에 대해 걱정하는 것보다 단일 오버레이 그림에 모든 것을 넣는 것이 더 효과적이라는 것을 알았지 만 킬로미터는 분명히 다를 수 있습니다.