For Grassmann.jl, I would like to customize the printing similar to the `Complex`

numbers. Consider:

```
julia> using Grassmann
julia> @basis tangent(ℝ^2,2,2) # 2D Grade, 2nd Order, 2 Variables
(⟨++₁₂⟩, v, v₁, v₂, ∂₁, ∂₂, v₁₂, ∂₁v₁, ∂₂v₁, ∂₁v₂, ∂₂v₂, ∂₁₂, ∂₁v₁₂, ∂₂v₁₂, ∂₁₂v₁, ∂₁₂v₂, ∂₁₂v₁₂)
julia> ∇ = ∂1v1 + ∂2v2
0v₁₂ + 1∂₁v₁ + 0∂₂v₁ + 0∂₁v₂ + 1∂₂v₂ + 0∂₁₂
julia> Expr(:call,:/,1,∇⋅∇)
:(1 / 0.0v₁ + 0.0v₂ + 1∂₁∂₁ + 1∂₂∂₂)
```

The problem is that when I embed my number in an `Expr`

there is ambiguity due to missing parenthesis.

```
julia> z = 1+im
1 + 1im
julia> Expr(:call,:/,1,z)
:(1 / (1 + 1im))
```

For `Complex`

numbers this is resolved by adding extra `(...)`

parenthesis around the printed value.

How can I customize the printing so that my numbers are also parenthesized in an `Expr`

like this?

You can have a look at how it’s defined for `Base.Complex`

with `@edit show(stdin, 1.0im)`

. It looks like you just need to overload `Base.show_unquoted`

. (In the lines below)

```
julia> Base.show_unquoted(stdout,1+im)
1 + 1im
```

this does not seem to reproduce the print behavior I am after, it should be `(1 + 1im)`

instead

You need to pass the outer operator precedence as well.

1 Like

This works:

```
julia> Base.show_unquoted(stdin, 1.0im, 0#=Don't know what this does, but it isn't used by Complex=#, Base.operator_precedence(:*))
(0.0 + 1.0im)
```

This new definition does what I need, which will go into the AbstractTensors.jl package

```
function Base.show_unquoted(io::IO, z::T, ::Int, prec::Int) where T<:TensorAlgebra
if T<:TensorMixed && Base.operator_precedence(:+) <= prec
print(io, "(")
show(io, z)
print(io, ")")
else
show(io, z)
end
end
```