To add a little more detail to a spare but correct (I think) comment:
Outside of Beautiful Racket, some other helpful reading I've found in the past that covers macros:
> Creating Languages in Racket (Matt Flatt, 2011, ACM Queue) [0]
The details here are tantalizing, but there's a lot that goes unsaid. Code is available for download and review. As a longer-form example of something fun to do, it's good, and I've enjoyed it.
> Automata using Macros [pdf] (Shriram Krishnamurthy, date unk., Educational Pearl) [1]
This is a worthwhile read at only 14 pages. Krishnamurthy writes with clarity, iterating through several solutions to writing a finite state automaton.
Thank you. Although it is against the norms of HN, I deliberately did not go on writing an explantion of the Macro system, because in my experience, I did not fully understand it's power until I used common lisp.
Before that, I thought of the macro system to be like the #define preprocessor in C, nothing more.
Thank you very much, for actually expanding it with great links!!