2

I have a problem compiling the following document.

First, I have a file macros.sty that consists of :

\newcommand{\test}{
\xymatrix@R=0mm{x}
}

Then, I have an auxiliary file out.aux that consists of :

\test

Finally, the main file is :

\documentclass{article}
\usepackage[all]{xy}
\usepackage{macros}
\begin{document}
\input{out.aux}
\end{document}

The error message is :

./out.aux:1: Undefined control sequence.
\xymatrix@R ->\Addop@@ 
                   \xymatrixrowsep@ \dimen@ii 

Note that if you remove the R=0mm, the problem no longer holds.

Is that a bug ?

It is very strange because I remember to have already used a command similar to \test in an input file without any problem.

Does it come from my distribution ?

Thank you :)

Colas
  • 6,772
  • 4
  • 46
  • 96

1 Answers1

7

The problem is that .sty files are read with an implicit \makeatletter command, so your input is interpreted as the command \xymatrix@R and not as \xymatrix followed by @. Either write

\makeatother
\newcommand{\test}{\xymatrix@R=0mm{x}}
\makeatletter

or move the definition of \test to a file that you load with \input and not with \usepackage.

egreg
  • 1,121,712
  • Clear and nice answer ! Apart from this @-matter, what's the difference between \input and \usepackage ? Should I prefer \usepackage for my commands ? – Colas Oct 18 '11 at 16:04
  • Your idea works but I dont understand why there is no problem if I execute directly in the .tex file the command \test. – Colas Oct 18 '11 at 16:08
  • @Colas I get the same error both with \input and writing \test directly in the file. I'd recommend \input for your macros. – egreg Oct 18 '11 at 16:14