我目前正在自学结理论,并希望使用 Ti 绘制相关图表钾Z. 使用knots
库和foreach
循环,我编写了一个非常可靠的代码来绘制单色三叶草结:
\begin{tikzpicture}
\begin{knot}[
clip width=5,
consider self intersections
]
\strand[red,thick] (90:1)
\foreach \x in {1,2,3} {
to [bend left=117,looseness=1.9] ({90+120*\x}:1)
}
;
\flipcrossings{1,3}
\end{knot}
\end{tikzpicture}
由此得到下面的图像。
但是,我想把每个不间断的线段(总共 3 个)涂上不同的颜色,就像我的教科书一样(请注意,我不是想做双线,只是想从白色到灰色再到黑色的变化[或者最好是我选择的颜色]):
到目前为止,我已经研究了该网站和其他网站上的decorations
库、dashed
线路和更多建议,但没有找到任何解决方案。
总共,我怎样才能在 Ti 中独立地为我的结的不同部分着色钾Z?
请注意,我希望该程序足够通用,以便也适用于其他结。
答案1
[感谢@AndrewStacey在问题下的评论中提出此修复建议]
LaTeX 尚未实现对该问题的完整、简单的解决方案,但以下内容是一个相当充分的近似值。
首先,请考虑knots
库的第 3.3 节文档,尤其是使用 Ti钾Z 节点有助于结图。下面引用了最重要的段落。
该节点
knot crossing
不是用来绘制的,它是一个空的形状……这对于设计在特定方向优雅地进入和退出交叉点的曲线很有用。当使用这种节点形状时,交叉点本身最容易绘制,方法是使用center
形成交叉点的线的锚点。
按照此指导,我为 7_4 结创建了以下 MWE,以其下方的黑白图片为模型,并在其下方生成彩色图片。
\begin{tikzpicture}[
every path/.style={thick},
every node/.style={knot crossing,inner sep=1.2pt}
]
\colorlet{rex}{red}
\colorlet{orx}{orange}
\colorlet{ylx}{yellow!70!black}
\node (l) at (-1,0) {};
\node (c) at (0,0) {};
\node (r) at (1,0) {};
\node (lu) at (-0.6,0.6) {};
\node (lb) at (-0.6,-0.6) {};
\node (ru) at (0.6,0.6) {};
\node (rb) at (0.6,-0.6) {};
\draw [orx] (lb)
to [out=-50,in=-130] (rb.center)
to [out=50,in=-120] (r)
;
\draw [rex] (r)
to [out=60,in=35,out looseness=2.5] (ru.center)
to [out=-145,in=50] (c)
;
\draw [rex] (c)
to [out=-130,in=35] (lb.center)
to [out=-145,in=-120,looseness=2] (l)
;
\draw [orx] (l)
to [out=60,in=-130] (lu.center)
to [out=50,in=130] (ru)
;
\draw [ylx] (ru)
to [out=-50,in=120] (r.center)
to [out=-60,in=-35,looseness=2] (rb)
;
\draw [rex] (rb)
to [out=145,in=-52] (c.center)
to [out=128,in=-35] (lu)
;
\draw [ylx] (lu)
to [out=145,in=120,in looseness=2.5] (l.center)
to [out=-60,in=130] (lb)
;
\end{tikzpicture}
让我们从在环境开始时定义的样式开始tikzpicture
。出于个人喜好,我用路径绘制结图thick
,因此全局定义该样式是有意义的。此外,inner sep
节点选项控制每个交叉点的空白量(值越高,空白越多)。最后,knot crossing
节点类型实际上在技术上不是必需的(我不相信),但我想为什么不呢。
接下来,我为想要使用的三种颜色定义宏。这样既可以轻松更改特定颜色的每个实例(如果需要),又可以让每种颜色(以后使用时)都用一个简短的三个字母的术语表示。也许这样比较美观,但确实使代码更具可读性。请注意,我选择颜色名称时采用两个表示颜色的字母(例如,“re”表示“红色”)并连接后缀“-x”。我选择“-x”是因为如果我想要一种颜色有多种色调,后续色调可以有“-y”和“-z”后缀。
对于节点(必须位于结点的交叉点),我最初猜测了适当的位置,然后逐渐完善。请注意,节点的名称是其位置的缩写——在 MWE 中从上到下依次为:左、中、右、左上、左下、右上、右下。还请注意,虽然这里没有必要,但scale
可以使用键来缩小或扩大结点。
现在,不可见的辅助部分已经设置好了,我使用了七个draw
宏——每个宏对应结的七条线。请注意,使用七个宏而不是一个draw
宏只是因为颜色多种多样。无论如何,为了创建代码,我从一个交叉点开始,然后按照黑白图片和上面引用的第 3.3 节中的说明,猜测宏的 10in
个和 11 个out
角度to
。在我得到草稿后,我逐渐完善角度并根据需要添加looseness
宏(始终保持对称性),直到我满意为止。最后添加颜色。
虽然这种方法并不完美,因为缺乏knot
使用多色功能调整环境的便利性,但这种方法可以创建无错误、程序化的多色结渲染。虽然这通常适用于任何图表,但请注意,为了简化代码的创建,必须先绘制一个像样的结草图,以确定交叉点的位置。