关于绘制辫子排列的想法/帮助?

关于绘制辫子排列的想法/帮助?

我一直在使用辫子包,它对我来说效果很好。我试图“装饰”我正在绘制的辫子,由于 TikZ 通常需要花费大量时间手动绘制,所以我试图使这个过程自动化。我想要的是:

  • 我的辫子顶部和底部都有横条
  • 顶部栏的数字标签“1,2,...,n”
  • 底部的相应标签由辫子本身给出(这让我想到了我的问题)

除了最后一点,我基本都明白了。下面是一个例子:

在此处输入图片描述 具体来说,我有我想要的第一件事和第二件事。使用薛定谔的猫的代码在我的另一个问题中,向我展示了如何自动绘制顶部和底部的条形图。然后,我使用 calc 包和 for 循环在顶部自动绘制顶部数字“1、2、3、...”。

我的问题: 我当然想在底部画数字,对吧?但我该怎么做呢?这有点难,因为你现在需要计算所讨论的辫子的排列。

我的想法:

  1. 用 TeX 创建一个程序,(1)解析我的辫子副本,例如“ s_1 s_2 s_3 ...”程序将解析此字符串,恢复其底层排列(这是最难的部分)。使用这个底层排列,TikZ 便知道在哪里绘制底部栏中的所有整数。也许我可以使用某种方式让 LaTeX 与 python shell 进行通信,因为用 python 编写代码可能更容易。
  2. 只需一遍又一遍地复制和粘贴“ \node at ...”,然后手动标记底部栏。这种方法不太优雅,也不符合自动绘图的精神,但方法 (1) 可能需要太多的 for 循环,以至于编译需要很长时间,最终毫无用处。

但是,有人对如何做到这一点有其他想法吗?我正在寻找建议/软件包参考,因为这有点难,也许还有一种我没看到的更简单的方法。

上述编织层的 MWE:

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usepackage{calc}
\usetikzlibrary{braids}
\begin{document}
\def\nstrands{4}    % NUMBER OF STRANDS
    \newcounter{xcoord}
    \begin{tikzpicture}
        \pic[local bounding box=my braid,braid/.cd, 
        number of strands = \nstrands, 
        thick, % change me if you want
        name prefix=braid]
        {braid={ s_1, s_2, s_3}}; % BRAID GENERATORS
        \draw[thick] % the top and bottom bars; help from https://tex.stackexchange.com/questions/549755/tikz-braids-how-to-draw-singular-braids-intersections
        ([xshift=-1ex]my braid.north west) --  ([xshift=1ex]my braid.north east)
        ([xshift=-1ex]my braid.south west) --  ([xshift=1ex]my braid.south east);
        % labels the top bar with numbers automatically
        \foreach \n in {1,...,\nstrands}{ 
            \setcounter{xcoord}{\n -1} 
            \node at ([xshift = \thexcoord cm, yshift = 0.3 cm]my braid.north west) {\n};
        }
        % Prints the numbers on the bottom bar...
        % ..One problem is calculating the permutation of the braid.
        % theoretically, this is very easy, but for us it requires (1) a parser
        % (2) a permutation calculator (3) a way to return these values 
        % back into latex...
        % They're drawn manually for now.
        \node at ([xshift = 0 cm, yshift = -0.3 cm]my braid.south west) {2};
        \node at ([xshift = 1 cm, yshift = -0.3 cm]my braid.south west) {3};
        \node at ([xshift = 2 cm, yshift = -0.3 cm]my braid.south west) {4};
        \node at ([xshift = 3 cm, yshift = -0.3 cm]my braid.south west) {1};
      \end{tikzpicture} 
\end{document}

答案1

正如 Andrew 指出的那样,有时您只需要阅读文档。因此,以下是我的解决方案,希望对任何人有用。下面的代码会自动绘制顶部/底部条形图,并适当地标记条形图。

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usepackage{calc}
\usetikzlibrary{braids}
\begin{document}
    \def\nstrands{4}
    \begin{tikzpicture}
        \pic[local bounding box=my braid,braid/.cd, 
        number of strands = \nstrands, % number of  strands
        thick,
        name prefix=braid]
        {braid={ s_1, s_2, s_3}}; %the generators
        \draw[thick] % draws the top/bottom bars
        ([xshift=-1ex]my braid.north west) --  ([xshift=1ex]my braid.north east)
        ([xshift=-1ex]my braid.south west) --  ([xshift=1ex]my braid.south east);
        % labels the top bar
        \foreach \n in {1,...,\nstrands}{
            \node at (braid-\n-s)[yshift = 0.3cm] {\n};
        } 
        % labels the bottom bar
        \foreach \n in {1,...,\nstrands}{
            \node at (braid-\n-e)[yshift = -0.3cm] {\n};
        } 
    \end{tikzpicture}
\end{document}

上述代码生成 在此处输入图片描述

相关内容