LaTeX won’t include from other directories

You wanted to \include{../bar/xyz.tex}, but LaTeX says:

latex: Not writing to ../bar/xyz.aux (openout_any = p).
! I can't write on file `../bar/xyz.aux'.
The error comes from TeX’s protection against writing to directories that aren’t descendents of the one where your document resides. (The restriction protects against problems arising from LaTeXing someone else’s malicious, or merely broken, document. If such a document overwrites something you wanted kept, there is obvious potential for havoc.)

Document directory structures that can lead to this problem will look like the fictional mybook:

./base/mybook.tex
./preface/Preface.tex
./preface/***
./chapter1/Intro.tex
...
With such a structure, any document directory (other than the one where mybook.tex lives), seems “up” the tree from the base directory. (References to such files will look like \include{../preface/Preface}: the “..” is the hint.)

But why did it want to write at all? — “what’s going in in my \include” explains how \include works, among other things by writing an aux file for every \included file.

Solutions to the problem tend to be drastic:

  1. Restructure the directories that hold your document so that the master file is at the root of the tree:
    ./mybook.tex
    ./mybook/preface/Preface.tex
    ./mybook/preface/***
    ./mybook/chapter1/Intro.tex
    ...
    
    and so on.
  2. Did you actually need \include? — if not, you can replace \include by \input throughout. (This only works if you don’t need \includeonly.)
  3. You could patch your system’s texmf.cnf — if you know what you’re doing, the error message should be enough of a hint; this action is definitely not recommended, and is left to those who can “help themselves” in this respect.

This answer last edited: 2012-02-13