You can use the declare form in the macro definition to
specify how to <TAB> should indent calls to the macro. You
write it like this:
(declare (indent indent-spec))
Here are the possibilities for indent-spec:
nil
This is the same as no property—use the standard indentation pattern.
defun
Handle this function like a ‘def’ construct: treat the second
line as the start of a body.
an integer, number
The first number arguments of the function are
distinguished arguments; the rest are considered the body
of the expression. A line in the expression is indented according to
whether the first argument on it is distinguished or not. If the
argument is part of the body, the line is indented lisp-body-indent
more columns than the open-parenthesis starting the containing
expression. If the argument is distinguished and is either the first
or second argument, it is indented twice that many extra columns.
If the argument is distinguished and not the first or second argument,
the line uses the standard pattern.
a symbol, symbol
symbol should be a function name; that function is called to
calculate the indentation of a line within this expression. The
function receives two arguments:
state
The value returned by parse-partial-sexp (a Lisp primitive for
indentation and nesting computation) when it parses up to the
beginning of this line.
pos
The position at which the line being indented begins.
It should return either a number, which is the number of columns of
indentation for that line, or a list whose car is such a number. The
difference between returning a number and returning a list is that a
number says that all following lines at the same nesting level should
be indented just like this one; a list says that following lines might
call for different indentations. This makes a difference when the
indentation is being computed by C-M-q; if the value is a
number, C-M-q need not recalculate indentation for the following
lines until the end of the list.