Don Knuth is writting an impressive book series called "The Art of Computer Programming" since the 1960s. In 1977 he created TeX, to produce high-quality documents independently of the current printing technology. In the 1980 Leslie Lamport built LaTeX on top, which provides a lot convenient macros. For producing text-heavy pdfs TeX is the tool, which sucks least.

# Building LaTeX documents

On the lowest level there is pdftex for compiling tex files to pdfs. However, I strongly recommend to use a wrapper tool like rubber or latexmk.

# Packages

Pure TeX or even LaTeX means a lot of work. There are lots of handy packages available.

## Document Class

Use KOMA script document classes, i.e. scrbook, scrreprt or scrartcl.

``````\documentclass{scrartcl}
``````

This provides more flexibility than for example article.

## Encodings

``````\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
``````

The first line tells TeX, that your document is encoded in utf-8, so you can write `ä` instead of `\"a`. The second line specifies the font encoding in the pdf, which in this case is Type-1.

## Internationalization

The babel package is the common approach for different languages. Other packages often build on top of it. For example use the csquotes package and the `\enquote` macro, to get the correct quotation marks, instead of writing them explicitly with ```''`.

## Links and References

Use the hyperref for references. For example, it transforms the table of contents entries into hyperlinks. It also provides the handy `\autoref` macro and has various options for pdf-specific features.

## Diagrams

Use TikZ to generate diagrams and other graphics. It is a more modern variant to Metapost.

## Bibliography

Use biblatex. In contrast to bibtex, the formatting is done with LaTeX instead of a special programming language.

## Layouting

For special layout requirements consider fancyhdr, titlesec, setspace, and tocloft.

For columns use the multicol package.

# Version Control

As a text-based format TeX is suited for version control software like git or svn. Write at most one sentence per line or even only sentence fragments per line. This results in much nicer diffs, which means a better history. Commit often for a detailed history.