A macro is a syntactic form with an associated transformer that expands the original form into existing forms. To put it another way, a macro is an extension to the Scheme compiler. Most of the syntactic forms of scheme/base and scheme are actually macros that expand into a small set of core constructs.
Like many languages, Scheme provides pattern-based macros that make simple transformations easy to implement and reliable to use. Scheme also supports arbitrary macro transformers that are implemented in Scheme – or in a macro-extended variant of Scheme.