I've been using the TikZ braids package, which works great. Unfortunately, I now need to start drawing singular braids/knots, which I don't think the package handles. These concepts are "less popular" than regular braids/knots so it is understandable that it hasn't been developed.

Here's a basic example I pulled off. The first crossing, illustrated with a black dot, is the singular crossing. These are typically denoted with a black dot. The other crossings are completely normal.

enter image description here

My attempt:

My method to draw the singular crossing isn't great because

  1. I had to manually draw a black circle
  2. I had to guess the intersection position until I got it correctly

In short, this method is sort of a time-waster; but I'm going to have to draw lots of these...

My questions: Does anyone have any ideas or suggestions on a more systematic way of doing this? Perhaps a way to access a list of intersections (which I assume the package computes behind the scenes) which I could use to my advantage? I try to look for ways to avoid wasting time before I give up and accept wasting time.

Ideally, the package could be extended so that whenever a user types t_1, for example, instead of s_1, it detects that the user would like a singular crossing, so that it does all that guesswork/drawing for me. But obviously I'm completely incapable of doing that myself.

My code:


    \def\height{3.5} %bar lengths
    \def\width{3.2} %bar difference heights, .2 added to make it nicer
        number of strands = 3,
        {braid={ s_1, s_2[braid/gap=0], s_3}};
        \filldraw (0.5,-0.75) circle (0.07cm); %the singular intersection
        \draw[thick] (-0.2,0) -- (\width,0);   %top bar
        \draw[thick] (-0.2,-\height) -- (\width,-\height); %bottom bar


  • Please see tex.stackexchange.com/q/385601/86 Commented Jun 16, 2020 at 20:43
  • Also, in terms of locating the crossing, there are coordinates scattered all over the braid. The crossings are exactly half way between where a strand enters and leaves each level so very easy to get to using the calc library. Commented Jun 16, 2020 at 20:47
  • Also, can you please use full MWEs in your questions. It's tricky figuring out what the preamble should be. (See tex.meta.stackexchange.com/q/228/86 for example) Commented Jun 16, 2020 at 20:51
  • Oh my bad, I added the preamble. Also, I did see that other post and will definitely use it since it will help me deal with gaps that might be too big to cover with my black circle. Thanks!
    – trujello
    Commented Jun 16, 2020 at 20:58

1 Answer 1


The knots package has more advanced options but a very blunt way to marking the crossing is to recover it via intersections of lines connecting the marks on the strands. Note also that, by using a local bounding box, you can avoid the hard coded dimensions for the horizontal bars.

  \pic[local bounding box=my braid,braid/.cd, 
    number of strands = 3,
    name prefix=braid]
    {braid={ s_1, s_2, s_3}};
    \filldraw (intersection of braid-2-0--braid-2-1 and braid-1-0--braid-1-1) 
    \draw[thick] ([xshift=-1ex]my braid.north west) --  ([xshift=1ex]my braid.north east)
        ([xshift=-1ex]my braid.south west) --  ([xshift=1ex]my braid.south east);

enter image description here

  • No need to use intersections. There's plenty of coordinates scattered around a braid which can be used to find crossing points. Commented Jun 16, 2020 at 20:52
  • Looking closer, I see that effectively that's what you are doing by looking at the intersection of the straight lines between the coordinates. Commented Jun 16, 2020 at 21:00
  • There are coordinates at the start and end of the strands which could be used instead of the local bounding box coordinates. (But these are all nit-picks.) Commented Jun 16, 2020 at 21:02
  • 2
    @AndrewStacey Thanks! Yes, as I wrote, it is a rather blunt way, and I certainly do not understand the library as well as you do. ;-) However, it seems to work and is reasonably simple. I also do not know if it is fool proof, but as long as the strands are symmetric around the crossing, it should work.
    – user194703
    Commented Jun 16, 2020 at 21:05
  • 1
    The concept behind the braids package was to deal with the cases where the braid was very systematic, and part of that is that the crossings are carefully located - that's how I can put the break in the under strand in the right place. So without boxing myself in for future updates, I have no intention to introduce anything different. Commented Jun 16, 2020 at 21:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .