如何在latex中绘制循环序列

如何在latex中绘制循环序列
  $$a_0 \to a_1 \to a_2 \to ....... \to a_k  $$  

现在,我想画一条从到$a_k$的弯曲箭头$a_0$

有什么办法可以做到这一点?

谢谢

答案1

tikzmark这方面的库。你也可以自己制作一个手工宏。

\documentclass{article}
\usepackage{tikz}
\newcommand{\tikzmark}[3][]{\tikz[remember picture,baseline] \node [inner xsep=0pt,anchor=base,#1](#2) {#3};}

\begin{document}
  \[\tikzmark{a}{$a_0$} \to a_1 \to a_2 \to \dots \to \tikzmark{b}{$a_k$} \] 
  \begin{tikzpicture}[remember picture,overlay]
    \draw[->] (a.north east) to[bend left] (b.north west);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

为了使它循环,类似这样的事情:

\documentclass{article}
\usepackage{tikz}
\newcommand{\tikzmark}[3][]{\tikz[remember picture,baseline] \node [inner xsep=0pt,anchor=base,#1](#2) {#3};}

\begin{document}
  \[\tikzmark{a}{$a_0$} \to a_1 \to a_2 \to \dots \to \tikzmark{b}{$a_k$} \]
  \begin{tikzpicture}[remember picture,overlay]
    \draw[->,rounded corners=1ex] (b.east) -| ++(2ex,2ex)  to[bend right,looseness=1] ([shift={(-2ex,2ex)}]a.west) |- (a.west);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

以下使用 TikZ 的解决方案无需额外的\tikzmarkLaTeX 运行即可记住位置。弯曲箭头的箭头头与 LaTeX\rightarrow或其同义词的默认外观相匹配\to。错误的开头也使用圆形线帽。参数looseness用于使曲线稍微变平,以减少弯曲箭头的垂直空间要求:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{bending}
\usetikzlibrary{topaths}

\begin{document}
\begin{equation}
  \begin{tikzpicture}[
    baseline=(a0.base),
    inner sep=0pt,
    line cap=round,
    >={Computer Modern Rightarrow[bend]},
  ]
    \node (a0) {$a_0$};
    \node[anchor=base west] (a1) at (a0.base east)
      {${}\to a_1 \to a_2 \to \dots \to{}$};
    \node[anchor=base west] (ak) at (a1.base east)
      {$a_k$};
    \draw[
      ->, 
      transform canvas={yshift=.3em},
    ] (ak) to[bend right, looseness=.6] (a0);
  \end{tikzpicture}
\end{equation}
\end{document}

松紧度设置较小时的结果

评论:

  • 不要用于$$在 LaTeX 中显示方程式,请参阅我应该使用哪个命令来显示方程式?

  • inner sep=0pt避免节点周围出现额外的白色边缘。 yshift用于将弯曲的箭头稍微向上移动,以使箭头起点和终点与相应的数学符号之间的距离更大。另一种方法是使用选项shorten <shorten >

  • 数学模式中的空,就像在周围适当间距处创建一个空的数学原子{}一样。{} \to a_1\to

答案3

第二种解决方案展示了如何在不使用 TikZ 的情况下实现这一点。仅预期使用 pdfTeX 原语。

{\lccode`\?=`\p \lccode`\!=`\t  \lowercase{\gdef\ignorept#1?!{#1}}}
\def\usedim#1 {\expandafter\ignorept\the#1 \space}

\def\cyclicseq#1{\setbox0=\hbox{\kern-.7em$#1$\kern-.7em}%
    \dimen0=.3\wd0 \dimen1=.7\wd0
    \leavevmode \kern.7em
    \pdfsave\pdfsetmatrix{.9397 .342 -.342 .9397}\raise4pt\rlap{$\prec$}\pdfrestore
    \pdfliteral{q .9963 0 0 .9963 0 7 cm .4 w 0 0 m
        \usedim\dimen0 10 \usedim\dimen1 10 \usedim\wd0 0 c S Q}%
    \vbox to15pt{}\box0 \kern.7em
}

Text $\cyclicseq{a_0 \to a_1 \to a_2 \to \ldots \to a_k}$ text.

循环

相关内容