# Packages that need to be included in a specific order

This isn't a real question, so I'm marking it community wiki.

When I was new to LaTeX, I thought that the `\usepackage` command worked much like the `#include` command of the C language: just put whatever you need in the preamble, in whatever order you like.

But then bugs began to bite me and I realised, with growing horror, that commutative packages seem to be the exception rather than the rule.

They appear so often that I think it would be useful to have a list here of problematic interactions between pairs of packages, and their correct order.

Also, a question for amusement:

I want to know if there exists three packages `A`, `B` and `C`, such that `A` has to be included before `B` and `B` needs to be included before `C`, but `C` needs to be included before `A`.

-
Is that last sentence a question if three such packages exist? –  TH. Sep 15 '10 at 3:59
Hmm. Better reword it. –  Mateus Araújo Sep 15 '10 at 4:11
`\usepackage` does work like the `#include` directive, and if you could overwrite existing definitions in C, you'd run into the same issues that LaTeX has. –  Philipp Sep 15 '10 at 9:42
At least in theory, you could have just two packages that don't "play nice": If both package `foo` and package `bar` both redefine two commands, `\jedi` and `\sith`, and you want `foo`'s `\jedi` but `bar`'s `\sith`, then no order of package loading will get you both... –  Seamus Sep 15 '10 at 10:51
As much as I like using math terminology for non-math situations, this question seemed to be a bit hard to find for non-math people. I changed the title to something more directly descriptive. –  Caramdir Oct 24 '10 at 23:24

Of course you have less trouble with `inputenc` in XeLaTeX, simply because you never load `inputenc`. –  Philipp Sep 15 '10 at 9:43
Regarding `hyperref`: it's not the hyperref package that is to be criticized, but rather the LaTeX2e kernel, which seems to combine every possible software development antipattern in a single package. –  Philipp Sep 15 '10 at 9:44