В вашем примере захват символов не происходит, потому что укажите переменные части в качестве параметров. Таким образом, разработчик может выбирать имена самостоятельно.
Захват символов происходит, когда ваш макрос вводит новые локальные объекты, которые не указаны пользователем. Рассмотрим следующий (действительно глупый и бессмысленный пример):
(defmacro foo
[name & body]
`(defn ~name
[~'bar]
(println ~'bar)
~@body))
В этом случае панель захвачена. Теперь предположим, что у пользователя есть такой код:
(def bar 5)
(foo baz (* 2 bar))
(baz 7)
Это не дало бы того, чего можно было бы ожидать. Поскольку глобальная панель, пользователь, ссылающийся на, получает тень от локальной панели, представленной макросом Как вы уже сказали: в этом случае нужно использовать бар # для введения локального.
Так что захват всегда обозначается ~ '. Макрос написание макросов ничего не меняет. Просто добавьте еще один уровень: ~~ '.