图片环境中的箭头

图片环境中的箭头

我使用图片环境构建了一个类型为 A_n 的简单 Dynkin 图,它看起来像:

噢——噢——噢……噢——噢——噢

我想用圆箭头(两侧都有箭头)连接此图表的第一个和最后一个顶点,但我无法使用图片环境制作贝塞尔箭头。我宁愿不使用 Tikz。

这是我的图表的粗略代码:

   \documentclass{amsart}

\begin{document}
\begin{picture}(7,2)
 \put(0,1){\circle*{5}}
 \put(0,1){\line(1,0){20}}
 \put(20,1){\circle*{5}}
 \put(20,1){\line(1,0){20}}
 \put(40,1){\circle*{5}}
 \put(53,-1){\mbox{$\cdots$}}
 \put(80,1){\circle*{5}}
 \put(80,1){\line(1,0){20}}
 \put(100,1){\circle*{5}}
 \put(100,1){\line(1,0){20}}
 \put(120,1){\circle*{5}}
\end{picture}
\end{document}

答案1

这是一个使用基本picture环境的方法,通过包进行扩展图片。我不得不手动放置箭头一点,不知道在这种情况下是否还有其他方法。

登金

关于图表的形状,我不知道这是否是所要求的,我这样做了cfr 的答案

\documentclass{amsart}
\usepackage{pict2e}% extension of LaTeX2e's picture abilities
\begin{document}
% \the\unitlength % 1pt by default

\begin{picture}(7,2)% <-- are sure you want the picture declared with 7pt of
                     % width and 2pt of height?
 \linethickness{1pt}
 \put(0,1){\circle*{5}}
 \put(0,1){\line(1,0){20}}
 \put(20,1){\circle*{5}}
 \put(20,1){\line(1,0){20}}
 \put(40,1){\circle*{5}}
 \put(53,-1){\mbox{$\cdots$}}
 \put(80,1){\circle*{5}}
 \put(80,1){\line(1,0){20}}
 \put(100,1){\circle*{5}}
 \put(100,1){\line(1,0){20}}
 \put(120,1){\circle*{5}}
 \cbezier (0,3)(40,25)(80,25)(120,3)% cubic Bezier curve
 \put(116,5){\vector(2,-1){5}}% trial and error..
 \cbezier (120,-1)(80,-23)(40,-23)(0,-1)
 \put(4,-3){\vector(-2,1){5}}% trial and error..
\end{picture}
\end{document}

答案2

我知道您想避免使用 TiKZ,但即便如此,您仍表示有兴趣找到解决方案。

此方法的使用tikzmark意味着您不必重新编码现有图表,但您必须编译两次才能看到效果:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
  \begin{picture}(7,2)
    \put(0,1){\tikzmark{a}\circle*{5}}
    \put(0,1){\line(1,0){20}}
    \put(20,1){\circle*{5}}
    \put(20,1){\line(1,0){20}}
    \put(40,1){\circle*{5}}
    \put(53,-1){\mbox{$\cdots$}}
    \put(80,1){\circle*{5}}
    \put(80,1){\line(1,0){20}}
    \put(100,1){\circle*{5}}
    \put(100,1){\line(1,0){20}}
    \put(120,1){\tikzmark{b}\circle*{5}}
  \end{picture}
  \begin{tikzpicture}[remember picture, overlay]
    \draw [->] ({pic cs:a}) +(0,5pt) coordinate (c)  [out=45, in=135] to (c -| {pic cs:b});
    \draw [<-] ({pic cs:a}) +(0,-5pt) coordinate (d)  [out=-45, in=-135] to (d -| {pic cs:b});
  \end{tikzpicture}
\end{document}

tikzmark 解决方案

或者,仅限 TiKZ 的解决方案:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
  \begin{tikzpicture}
    \path [fill] foreach \i in {0,20,40,80,100,120} {(\i pt,0) coordinate (c\i) circle (2.5pt)};
    \path [draw] (c0) -- (c20) -- (c40) (c80) -- (c100) -- (c120);
    \node [anchor=center] at ($(c40)!1/2!(c80)$) {$\cdots$};
    \draw [->] (c0) +(0,5pt) coordinate (p)  [out=45, in=135] to (p -| c120);
    \draw [<-] (c0) +(0,-5pt) coordinate (q)  [out=-45, in=-135] to (q -| c120);
  \end{tikzpicture}
\end{document}

纯 tikz 解决方案

答案3

这并不是您真正想要的,因为它TikZ通过使用dynkin-diagrams包来使用:

带有一些箭头的 Dynkin 图

\documentclass{amsart}
\usepackage{dynkin-diagrams}
\newcommand{\ar}[1]{
    \draw[thick,gray!75,stealth-stealth] 
        (root 1) to [out=#1 45,in=#1 135] (root 6);}
\begin{document}
    \begin{dynkinDiagram}{A}{ooo.ooo}
    \ar{-}\ar{+}
    \end{dynkinDiagram}
\end{document}

如果你想让圆圈变成实心点,请替换ooo.ooo***.***

相关内容