# 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