[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lilypond-bug
Subject:    Re: lilypond-book should generate \usepackage instead of	\RequirePackage - ver 2.7.20 /ChangeLog/1.4
From:       Bernard Hurley <bernard () fong-hurley ! org ! uk>
Date:       2005-11-29 12:06:34
Message-ID: 1133265994.24287.83.camel () writer
[Download RAW message or body]

On Tue, 2005-11-29 at 11:18 +0100, Han-Wen Nienhuys wrote:
> 
> Strange. I thought that @ was always a letter in the preamble? Note that 
> we only put it in the preamble.
> 
Actually the situation is a bit more complex than I implied in my
previous post.

1] \usepackage can only be used _after_ \documentclass that is because
as well as wrapping the package load in a \makeatletter ..
\makeatother, \usepackage also uses the parameters  specified in
\documentclass. So \usepackage is actually _designed_ to be used in the
preable of a document. If you run LaTeX on:

--------- test1.tex ---------
\usepackage{graphicx}
\documentclass[english]{article}
\begin{document}
\end{document}
-------------------------

you get the error:

! LaTeX Error: \usepackage before \documentclass.

2] At the _very_ _beginning_ of a latex document (i.e. before
\documentclass) '@' _is_ a letter. However \documentclass also wraps its
class load in \makeatletter ..  \makeatother. So that _after_ this call
'@' is "other". If you want to use an internal LaTeX (e.g. \@addtoreset)
in the preamble, you have to wrap it. Note that the following is quite
legal LaTeX:

--------- test2.tex ---------
\RequirePackage{graphicx}
\documentclass[english]{article}
\begin{document}
\end{document}
-------------------------

and LaTeX will not object to it. It will load the "graphicx" package
correctly (because '@' is a letter here). However it and the "article"
class will have been loaded in the "wrong order" and the results might
not be what expect. To quote The LaTeX companion p913:

"It is technically possible to load a package before a class by using
\RequirePackage, but this should be avoided unless you know what you are
doing."

-- 
Bernard Hurley <bernard@fong-hurley.org.uk>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic