The problem where is that #'(require racket/math) preserves the lexical context of the place where it occurs, which is not in the module where you wanted the bindings to be visible. The syntax-local-introduce call makes the syntax returned by the macro expansion look like it's not from a macro expansion, but that syntax is still from a different module.
instead, because you want the local meaning of require (that is, Racket's require form), not whatever require might happen to mean at the macro use site.
I ran into the same question of 'require' recently. And I searched for it and it brought me here. So it seems to me the (datum->syntax stx ...) is a better choice for this similar cases. Then it came to me, why do we need the syntax-local-introduce? What is the proper usage of it?