# LaTeX

LaTeX is the main package used in Mathematics for preparing documents (thesis, articles etc).

## Creating a simple document

Open a new file in your editor and write the following:

```
\documentclass{article}
\begin{document}
Hello
\end{document}
```

Save this file (in `rsd-workshop`

) as `main.tex`

.

Now open your command line and navigate to `rsd-workshop`

and run the following
command:

```
pdflatex main.tex
```

This will create a pdf file `main.pdf`

(and a number of auxiliary files).

## Calling one document from another

In Chapter 01 we created a sub directory called `tex`

. In that
directory create a new LaTeX file called `chapter-01.tex`

:

```
Let us investigate the number of prime factors of integers.
```

Now modify `main.tex`

to be:

```
\documentclass{article}
\title{The number of prime factors}
\begin{document}
\maketitle
\input{tex/chapter-01.tex}
\end{document}
```

Now "compile" `main.tex:

```
pdflatex main.tex
```

This `input`

command allows us to keep our directory structure clean and
organised.

## Directory structure

In general keeping a directory structure clear and well structured is helpful. The following suggested structure is one of many possible ways of doing things.

Let us move all the previously written python files to the `src`

(source)
directory. Note that we can use the command line to do this:

```
mv *.py src/
```

Thus, our directory should look like this:

```
|--- rsd-workshop
main.tex
main.pdf
main.*
|--- tex
|--- chapter-01.tex
|--- src
|--- find_primes_v1.py
|--- find_primes_v2.py
|--- find_primes_v3.py
|--- find_primes.py
|--- is_prime.py
|--- repeat_divide.py
|--- test_find_primes.py
|--- test_is_prime.py
|--- test_repeat_divide.py
```

Let us write another script that counts **and** plots the number of prime
factors for all integers less than 100. In `src`

create
`scatter_plot_of_prime_factors.py`

(note: the name of the file).

**Note** When we run that file, the `print`

statements of the file it "imports"
are run. We can remove them.

Now let us include this plot in our `chapter-01.tex`

:

```
Let us investigate the number of prime factors of integers.
Figure~\ref{fig:scatter_plot_of_prime_factors} shows the number of prime
factors for each integer less than 100.
\begin{figure}[!hbtp]
\begin{center}
\includegraphics[width=5cm]{src/scatter_plot_of_prime_factors.pdf}
\caption{The number of prime factors of each integer}
\label{fig:scatter_plot_of_prime_factors}
\end{center}
\end{figure}
```

**Note** when we do this we need to include `\usepackage{graphicx}`

in the preamble
of `main.tex`

.

## Including research output in LaTeX

If you have research output created from software:

- Specific measures (counting something)
- Complex equations
- Data tables

It is possible to make errors when writing these by hand (not relevant to the case of images of course) to your LaTeX document. Best practice is to output these from your software directly to a file that will be included.

### Directly including text.

For example, let us write a python script to get the number with the most prime
factors. In `src`

create:
`largest_number_of_factors.py`

.

This file creates `tex/largest_number_of_factors.tex`

.
We then can include the output directly in to `chapter-01.tex`

:

```
Let us investigate the number of prime factors of integers.
Figure~\ref{fig:scatter_plot_of_prime_factors} shows the number of prime
factors for each integer less than 100.
\begin{figure}[!hbtp]
\begin{center}
\includegraphics[width=5cm]{src/scatter_plot_of_prime_factors.pdf}
\caption{The number of prime factors of each integer}
\label{fig:scatter_plot_of_prime_factors}
\end{center}
\end{figure}
The number with the most prime factors
has~\input{tex/largest_number_of_factors} prime factors.
```

### Including complex equations

At times, a computer algebra system might be used to manipulate an expression, in this case it could be worth outputting the output directly to file and reading it in. (Again, avoiding the opportunity for human error).

Let us write a python script to generate the series expansion for the first few terms of the lower bound of the number of primes less than $n$:

$$ \frac{n}{\log{n}} $$

Create
`series_expansion_for_lower_bound.py`

we will use the
Python library Sympy (for symbolic mathematics) that also has the ability to
generate LaTeX directly from it's output (similar capabilities exist in other
computer algebra systems).

This creates `tex/series_expansion_for_lower_bound.tex`

.
Now let us modify the `chapter-01.tex`

to include this:

```
Let us investigate the number of prime factors of integers.
Figure~\ref{fig:scatter_plot_of_prime_factors} shows the number of prime
factors for each integer less than 100.
\begin{figure}[!hbtp]
\begin{center}
\includegraphics[width=5cm]{src/scatter_plot_of_prime_factors.pdf}
\caption{The number of prime factors of each integer}
\label{fig:scatter_plot_of_prime_factors}
\end{center}
\end{figure}
The number with the most prime factors
has~\input{tex/largest_number_of_factors}prime factors.
The number of factors is probably related to the number of primes which has
a lower bound given by:
\small
\[
\pi(n)=\frac{n}{\log{n}}=\input{tex/series_expansion_for_lower_bound.tex}
\]
```

### Including tables

Finally, you might similarly have generated some data that you'd like to include in the form of a table.

To avoid human error we can generate the LaTeX code for a table directly in code.

With python we will do this with a library called pandas (which implements a dataframe similar to R). Similar capabilities exist in other languages or the table code could be generated directly.

Let us write
`number_of_factors_table.py`

.
This creates `tex/number_of_factors_table.tex`

.
Let us include this in the LaTeX document:

```
Let us investigate the number of prime factors of integers.
Figure~\ref{fig:scatter_plot_of_prime_factors} shows the number of prime
factors for each integer less than 100.
\begin{figure}[!hbtp]
\begin{center}
\includegraphics[width=5cm]{src/scatter_plot_of_prime_factors.pdf}
\caption{The number of prime factors of each integer}
\label{fig:scatter_plot_of_prime_factors}
\end{center}
\end{figure}
Table~\ref{tab:number_of_factors_table} shows these counts for \(95\leq
n\leq 100\).
\begin{table}[!hbtp]
\begin{center}
\input{tex/number_of_factors_table.tex}
\caption{The number of prime factors for some numbers.}
\label{tab:number_of_factors_table}
\end{center}
\end{table}
The number with the most prime factors
has~\input{tex/largest_number_of_factors} prime factors.
The number of factors is probably related to the number of primes which has
a lower bound given by:
\[
\pi(n)=\frac{n}{\log{n}}=\input{tex/series_expansion_for_lower_bound.tex}
\]
```

**Note** when we do this we need to include `\usepackage{booktabs}`

in the preamble
of `main.tex`

.

## Summary

A lot of the principles to writing good software apply to writing good LaTeX. The particular choice of directory structure suggested here is in not a hard rule but it allows for a consistent approach that you can use on a number of projects.

# Tip

As for Python both Atom and VS Code offer many plugins for LaTeX. Explore what is available for LaTeX.

# Optional

- Use the following code that counts how many numbers all equally have the most factors: count_maxima_for_number_of_primes.py
- Modify all previous code to repeat the analysis for numbers between 1 and 250.