# Work with Literate.jl

Franklin works seamlessly with Literate to offer a convenient way to write and maintain tutorials.## Overview

Literate.jl is a convenient package that allows you to write scripts in Julia and convert them to markdown pages or Jupyter notebooks.

You can combine this with Franklin with the `\literate`

command which you can call in Franklin like:

`\literate{/_literate/script.jl}`

it does what you expect:

the markdown is interpreted and evaluated

the code blocks are evaluated and their output can be shown selectively

If you want the script to be shown like a notebook where the output of every code block is shown, use `@def showall = true`

.

Combining Franklin with Literate offers a very convenient way to write and maintain tutorial websites (see for instance the DataScienceTutorials).

### File organisation

We recommend you have a folder `/_literate/`

in your root folder, place your literate scripts there and call them as in the example above.

### Tricks

In the `showall = true`

mode, the last line of each code block is displayed in full. In some cases you will have to think about this a bit more than you would in your REPL and might for instance:

*suppress the output*, in which case you should add a`;`

at the end of the line*only show a few elements*(see below)

For instance you might prefer:

```
x = randn(10)
x[1:3]
```

```
3-element Vector{Float64}:
-0.28180837461866476
0.8831090452668859
0.22422101681348505
```

to just

`x = randn(10)`

```
10-element Vector{Float64}:
-0.5593159701451623
0.3660808732789371
0.17401416928835736
0.3933075307780431
-1.1559540238134105
-0.7104121307929046
-0.7882963835903692
0.6645555973082667
-1.105414033812281
-0.19011942269304533
```

You can also use `@show`

or `println`

to show specific things beyond the last line

```
x = rand(10)
println(sum(x))
y = 5
```

```
5.914418547027882
5
```

if the last line is a `@show`

or `print`

then only that is shown:

```
x = randn(10)
@show x[1]
```

```
x[1] = -1.642723241111864
```

The `literate_mds = true`

mode adds support for using literal markdown strings, `md""" ... """`

, for the markdown sections, a feature introduced in Literate v2.9. For example

```
md"""
# Title
something cool
"""
```

is rewritten to

```
# # Title
# something cool
```

## Example

### Script

```
# Some **really cool** maths:
#
# $$ \exp(i\pi) + 1 \quad = \quad 0 $$
#
# We can show this with some code:
x = exp(im*π) + 1
# that looks close to zero but
x ≈ 0
# however
abs(x) < eps()
md"""
#### Conclusion
The equation $ \exp(i\pi) + 1 \quad = \quad 0 $ is proven thanks to our very rigorous proof.
"""
```

### Result

Some **really cool** maths:

We can show this with some code:

`x = exp(im*π) + 1`

`0.0 + 1.2246467991473532e-16im`

that looks close to zero but

`x ≈ 0`

`false`

however

`abs(x) < eps()`

`true`

#### Conclusion

The equation is proven thanks to our very rigorous proof.