Skip to content

Latest commit

 

History

History
152 lines (119 loc) · 6.67 KB

README.src.md

File metadata and controls

152 lines (119 loc) · 6.67 KB

fletcher

Manual

f"![Version](https://img.shields.io/badge/version-{get_version()}-green)"

Development version Repo

fletcher (noun) a maker of arrows

A Typst package for drawing diagrams with arrows, built on top of CeTZ. See the manual for documentation.

f"""
```typ
#import "@preview/fletcher:{get_version()}" as fletcher: diagram, node, edge
```
"""
# These are examples in `docs/example-gallery/*.typ`
'\n'.join(insert_example_block(name) for name in [
  "first-isomorphism-theorem",
  "flowchart-trap",
  "state-machine",
  "feynman-diagram",
])

More examples

Pull requests are most welcome!

# These are examples in `docs/gallery/*.typ`
insert_example_table([
  "commutative",
  "algebra-cube",
  "ml-architecture",
  "io-flowchart",
  "digraph",
  "node-groups",
  "uml-diagram",
])

Change log

0.5.2

  • Require typst version >=0.12.0.
  • Update cetz dependency to 0.3.1. Note: This may slightly change edge label positions.
  • Add loop-angle option to edge() (#36).

0.5.1

  • Fix nodes which enclose absolute coordinates.
  • Allow CeTZ-style coordinate expressions in node enclose option.
  • Fix crash with polar coordinates.
  • Fix edges which bend at 0deg or 180deg (e.g., edge("r,r") or edge("r,l")) and enhance the way the corner radius adapts to the bend angle. Note: This may change diagram layout from previous versions.
  • Improve error messages.
  • Add marks for crow's foot notation: n (many), n? (zero or more), n! (one or more), 1 (one), 1? (zero or one), 1! (exactly one).
  • Add node-shape option to diagram().

0.5.0

  • Greatly enhance coordinate system.
    • Support CeTZ-style coordinate expressions (relative, polar, interpolating, named coordinates, etc).
    • Absolute coordinates (physical lengths) can be used alongside "elastic" coordinates (row/column positions).
  • Add label-angle option to edge().
  • Add label-wrapper option to allow changing the label inset, outline stroke, and so on (#26).
  • Add label-size option to control default edge label text size (#35)
  • Add trapezium node shape.
  • Disallow string labels to be passed as positional arguments to edge() (to eliminate ambiguity). Used named argument or pass content instead.

0.4.5

  • Add isosceles triangle node shape (#31).
  • Add fit and dir options to various node shapes to adjust sizing and orientation.
  • Allow more than one consecutive edge to have an implicit end vertex.
  • Allow snap-to to be none to disable edge snapping (#32).

0.4.4

  • Support fully customisable marks/arrowheads!
    • Added new mark styles and tweaked some existing defaults. Note. This may change the micro-typography of diagrams from previous versions.
  • Add node groups via the enclose option of node().
  • Node labels can be aligned inside the node with align().
  • Node labels wrap naturally when label text is wider than the node. Note: This may change diagram layout from previous versions.
  • Add a layer option to nodes and edges to control drawing order.
  • Add node shapes: ellipse, octagon.

0.4.3

  • Fixed edge crossing backgrounds being drawn above nodes (#14).
  • Add fletcher.hide() to hide elements with/without affecting layout, useful for incremental diagrams in slides (#15).
  • Support shifting edges by coordinate deltas as well as absolute lengths (#13).
  • Support node names (#8).

0.4.2

  • Improve edge-to-node snapping. Edges can terminate anywhere near a node (not just at its center) and will automatically snap to the node outline. Added snap-to option to edge().
  • Fix node inset being half the amount specified. If upgrading from previous version, you will need to divide node inset values by two to preserve diagram layout.
  • Add decorations option to edge() for CeTZ path decorations ("wave", "zigzag", and "coil", also accepted as positional string arguments).

0.4.1

  • Support custom node shapes! Edges connect to node outlines automatically.
    • New shapes submodule, containing diamond, pill, parallelogram, hexagon, and other node shapes.
  • Allow edges to have multiple segments.
    • Add vertices an corner-radius options to edge().
    • Relative coordinate shorthands may be comma separated to signify multiple segments, e.g., "r,u,ll".
  • Add dodge option to edge() to adjust end points.
  • Support cetz:0.2.0.

0.4.0

  • Add ability to specify diagrams in math-mode, using & to separate nodes.
  • Allow implicit and relative edge coordinates, e.g., edge("d") becomes edge(prev-node, (0, 1)).
  • Add ability to place marks anywhere along an edge. Shorthands now accept an optional middle mark, for example |->-| and hook-/->>.
  • Add “hanging tail” correction to marks on curved edges. Marks now rotate a bit to fit more comfortably along tightly curving arcs.
  • Add more arrowheads for the sake of it: }>, <{, /, \, x, X, * (solid dot), @ (solid circle).
  • Add axes option to diagram() to control the direction of each axis in the diagram's coordinate system.
  • Add width, height and radius options to node() for explicit control over size.
  • Add corner-radius option to node().
  • Add stroke option to edge() replacing thickness and paint options.
  • Add edge-stroke option to diagram() replacing edge-thickness.

0.3.0

  • Make round-style arrow heads better approximate the default math font.
  • Add solid arrow heads with shorthand <|-, -|> and double-bar ||-, -||.
  • Add an extrude option to node() which duplicates and extrudes the node's stroke, enabling double stroke effects.

0.2.0

  • Experimental support for customising arrowheads.
  • Add right-angled edges with edge(..., corner: left/right).

Star History

Star History Chart