Как мне написать стрелку между двумя символами в формуле?
В настоящее время я работаю над отчетом с использованием реляционной алгебры и нормализации для баз данных, и мне нужно представить зависимость между двумя элементами в одной таблице, что-то вроде этого:
Обратите внимание, что эта стрелка может быть направлена и от a к d, или их может быть несколько в одном выражении, например, от a к e, от a к d и от c к e.
Есть ли способ сделать это?
решение1
Решение с pstricks
: элементы, которые нужно связать, определяются как узлы, и я добавляю соединения узлов:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pst-node}
\usepackage{auto-pst-pdf}
\begin{document}
\[ \begin{pspicture}
T_{3,1}(\Rnode{d}{d}, \Rnode{e}{e}, \Rnode{a}{a}, \Rnode{c}{c})
\psset{linewidth=0.4pt, linejoin=1, arrows=->, arrowinset=0.15, angle=90, nodesep=1pt, arm=1.1ex}
\ncbar[offsetA=1pt]{a}{e} \ncbar[offsetA=-1pt, arm=1.3ex, nodesepB=-1pt]{a}{d}\ncbar[angle=-90]{c}{e}
\end{pspicture} \]
\end{document}
решение2
Чистое решение TikZ:
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\newcommand{\mypoint}[2]{\tikz[remember picture]{\node[inner sep=0pt](#1){$#2$};}}
\begin{document}
\[
T_{3,1}(d,\mypoint{tohere}{e},\mypoint{fromhere}{a},c)
\]
\tikz[overlay, remember picture]{\draw[-{Stealth[round]}] ([yshift=2pt]fromhere.north) -- ++(0,7pt) -| ([yshift=2pt]tohere.north);}
\end{document}
решение3
Если вы хотите поместить стрелку только над двумя соседними буквами, вы можете использовать \overset
. Но это не сработает, если одна из букв является частью подчеркнутого раздела.
Другой подход (но довольно похожий наэти) с использованием tikzmark
s может быть:
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
$T_{3,1}(d,\overset{\curvearrowleft}{e,a},c)$
\bigskip
$T_{3,1}(\underline{d,e\tikzmark{e}},a\tikzmark{a},c)$
\tikz[overlay,remember picture]{ \draw[<-] ([xshift=-.5ex,yshift=1.5ex]pic cs:e) to[bend left=60] ([xshift=-.5ex,yshift=1.5ex]pic cs:a); }
\bigskip
$T_{3,1}(\underline{d\tikzmark{d},e},a\tikzmark{aa},c)$
\tikz[overlay,remember picture]{ \draw[<-] ([xshift=-.5ex,yshift=2ex]pic cs:d) to[bend left] ([xshift=-.5ex,yshift=2ex]pic cs:aa); }
\end{document}