# TypographicUnits

A supplemental units package for Unitful, for dealing with typographic units. For example:

```
julia> 1pt + 1pc |> bp
10400//803 bp
```

The preferred length dimension is set to `pt`

, so as not to end up with meters
if you mix in `cm`

or `mm`

(from `Unitful.DefaultSymbols`

):

```
julia> 1cm + 1pt
7481//254 pt
```

For absolute units like `pt`

, `dd`

, etc., that's basically all there is to it.
Relative units like the `em`

provide more of a challenge, as their definition
depends on the current font, wherever a given measurement is to be used.
`TypographicUnits`

makes no assumptions here, and rather treats
incommensurable relative units as separate “length-like” dimensions.

Thus, where `1pc - 6pt`

yields `6pt`

, for example, the relative units don't
mix:

```
julia> 1pt + 1em
1 pt + 1 em
```

Constructing such a mixed length will promote the values to the same underlying scalar type:

```
julia> 1.0pt + 1em
1.0 pt + 1.0 em
```

They can also be multiplied by (or divided by) real numbers:

```
julia> (6pt + 12em)/2
3.0 pt + 6.0 em
```

There are currently separate length-like dimensions defined for the units
`em`

, `ex`

and `px`

. (The last relative unit defined, the `en`

, is set to half
an `em`

, and thus shares its dimension.)

If you want to do advanced calculations, you should probably do so before
combining values into a mixed length. Many computations don't really make
sense for the combinations. For example, what is `abs(1em - 10pt)`

? If `1em ≥ 10pt`

, then it's simply `1em - 10pt`

; otherwise, it's `10pt - 1em`

. Since we
don't know their relative sizes, we can't meaningfully give an answer. Other
functions (such as `sqrt`

or `sin`

) aren't distributive, for one, and change
the units so they no longer fall within the purview of the mixed length type.
For convenience, however, the `float`

function is available, in case one wants
to get rid of rationals:

```
julia> 3cm + 4pt + 4em
22697//254 pt + 4//1 em
julia> float(3cm + 4pt + 4em)
89.35826771653544 pt + 4.0 em
```