yishn / tikzcd-editor

A simple visual editor for creating commutative diagrams.

Home Page:https://tikzcd.yichuanshen.de/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Loops

varkor opened this issue · comments

One often want arrows from an object to itself (achieved with the tikzcd loop parameter), but it's only possible to draw arrows between different grid cells at the moment.

Can you post a simple LaTeX code snippet for loops? Do you have an idea how to let users create loops in tikzcd-editor? Currently, creating an arrow is only possible by dragging from one cell to another.

\begin{tikzcd}
A \arrow[loop]
\end{tikzcd}

Produces the following diagram:
image
As for the interface, I think that not adding arrows when you haven't dragged between two cells is useful (for cancelling arrow placement), so perhaps a button that appears (similar to the "move object" handle) when arrow placement is selected, that adds a loop, would be simplest. The loop could then be manipulated with the existing arrow toolbar. It would be nice to also specify which side of the object the loop is drawn on, too.

Thank you for your input! Just out of curiosity's sake, can you rotate the loop in certain directions? For example, so that the "bump" points to the left?

\arrow[loop left] (or above/below/right) allows you to specify the direction, although specifying the direction a little more explicitly in the code output with out=angle and in=angle may result in slightly prettier loops. (I think these arguments come directly from TikZ, rather than tikz-cd).

commented

I reckon the UI for loops and pullbacks (see issue #11) could be similar - a button and a way to change the position (e.g. a handle that can be dragged to rotate it to each of 4 directions [or more]).

This is a great suggestion. Identity arrows are very commonly needed to describe basic category theory principles and identity morphisms for axioms.

There is a $200 bounty open for the developer who adds this feature.

commented

Well I'll see if I can take a look at implementing this in the next week or two...

As there hadn't been much movement on this issue in a while, I went ahead and implemented the feature (pull request at #35). I think the interface works quite well and it should definitely be sufficient for most of the use-cases of loops.

image