我一直在使用辫子包,它对我来说效果很好。我试图“装饰”我正在绘制的辫子,由于 TikZ 通常需要花费大量时间手动绘制,所以我试图使这个过程自动化。我想要的是:
- 我的辫子顶部和底部都有横条
- 顶部栏的数字标签“1,2,...,n”
- 底部的相应标签由辫子本身给出(这让我想到了我的问题)
除了最后一点,我基本都明白了。下面是一个例子:
具体来说,我有我想要的第一件事和第二件事。使用薛定谔的猫的代码在我的另一个问题中,向我展示了如何自动绘制顶部和底部的条形图。然后,我使用 calc 包和 for 循环在顶部自动绘制顶部数字“1、2、3、...”。
我的问题: 我当然想在底部画数字,对吧?但我该怎么做呢?这有点难,因为你现在需要计算所讨论的辫子的排列。
我的想法:
- 用 TeX 创建一个程序,(1)解析我的辫子副本,例如“
s_1 s_2 s_3 ...
”程序将解析此字符串,恢复其底层排列(这是最难的部分)。使用这个底层排列,TikZ 便知道在哪里绘制底部栏中的所有整数。也许我可以使用某种方式让 LaTeX 与 python shell 进行通信,因为用 python 编写代码可能更容易。 - 只需一遍又一遍地复制和粘贴“
\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}