Penrose

Create beautiful diagrams just by typing notation in plain text.

README

Penrose


Penrose is a platform that enables people to
create beautiful diagrams just by typing notation in plain
text. The goal is to make it easy for non-experts to create and explore
high-quality diagrams and provide deeper insight into challenging technical
concepts. We aim to democratize the process of creating visual intuition.

Usage


without any installation. For a more detailed step-by-step introduction, check
out our tutorials. Or, for
more reference-style information, take a look at our

Example


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


It's specified by the following trio of Domain, Substance, and Style programs
(with variation MonsoonCaterpillar95943):

- setTheory.domain:

  
  type Set
  
  predicate NotIntersecting(Set s1, Set s2)
  predicate Intersecting(Set s1, Set s2)
  predicate IsSubset(Set s1, Set s2)
  

- tree.substance:

  
  Set A, B, C, D, E, F, G
  
  IsSubset(B, A)
  IsSubset(C, A)
  IsSubset(D, B)
  IsSubset(E, B)
  IsSubset(F, C)
  IsSubset(G, C)
  
  NotIntersecting(E, D)
  NotIntersecting(F, G)
  NotIntersecting(B, C)
  
  AutoLabel All
  

- venn.style:

  
  canvas {
    width = 800
    height = 700
  }
  
  forall Set x {
    shape x.icon = Circle { }
    shape x.text = Equation {
      string : x.label
      fontSize : "32px"
    }
    ensure contains(x.icon, x.text)
    encourage norm(x.text.center - x.icon.center) == 0
    layer x.text above x.icon
  }
  
  forall Set x; Set y
  where IsSubset(x, y) {
    ensure disjoint(y.text, x.icon, 10)
    ensure contains(y.icon, x.icon, 5)
    layer x.icon above y.icon
  }
  
  forall Set x; Set y
  where NotIntersecting(x, y) {
    ensure disjoint(x.icon, y.icon)
  }
  
  forall Set x; Set y
  where Intersecting(x, y) {
    ensure overlapping(x.icon, y.icon)
    ensure disjoint(y.text, x.icon)
    ensure disjoint(x.text, y.icon)
  }
  

Contributing


See [CONTRIBUTING.md](CONTRIBUTING.md).

License


This repository is licensed under the MIT License.