Skip to content
/ penrose Public
forked from penrose/penrose

Create beautiful diagrams just by typing notation in plain text.

License

Notifications You must be signed in to change notification settings

zcywxy/penrose

Repository files navigation

Penrose Build codecov code style: prettier license Twitter: @UsePenrose

Penrose is an early-stage system that is still in development. Our system is not ready for contributions or public use yet, but hopefully will be soon. Send us an email if you're interested in collaborating.

  • See the site for more information and examples.
  • See the wiki for more system-specific information on building, running, testing, and debugging the system.
  • For even more documentation, see Nimo Ni's README.

Example

Here's a simple Penrose visualization in the domain of set theory.

It's specified by the following Substance and Style programs.

  • tree.sub

    Set A
    Set B
    Set C
    Set D
    Set E
    Set F
    Set G
    Subset B A
    Subset C A
    Subset D B
    Subset E B
    Subset F C
    Subset G C
    NoIntersect E D
    NoIntersect F G
    NoIntersect B C
    
  • venn.sty

    Set x {
        shape = Circle { }
        constraint contains(x, x.label)
    }
    
    Intersect x y {
        constraint overlapping(x, y)
        constraint disjoint(y.label, x)
        constraint disjoint(x.label, y)
    }
    
    NoIntersect x y {
        constraint nonOverlapping(x, y)
    }
    
    Subset x y {
        constraint contains(y, x)
        constraint smallerThan(x, y)
        constraint disjoint(y.label, x)
    }
    
    NoSubset x y {
        objective repel(x, y)
        constraint disjoint(x, y)
        constraint disjoint(y.label, x)
        constraint disjoint(x.label, y)
        constraint nonOverlapping(x, y)
    }
    

Here's how the optimization looks live in the UI.

About

Create beautiful diagrams just by typing notation in plain text.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 77.6%
  • HTML 12.9%
  • Mathematica 3.5%
  • Nearley 2.1%
  • JavaScript 1.6%
  • CSS 1.1%
  • Other 1.2%