Defining new special formatting escapes

Is it possible to define new special formatting escapes without rewriting fprintf and friends from scratch?
I know it's possible to redefine how particular structures are printed, displayed, or written by adding a method to the struct definition.
But I'm wanting to specify additional output methods in the the format string (such as ~u, ~d, ~o instead of the usual ~a, ~n, ~s, ~v, etc. ) besides the ones already baked into fprintf. Ones that suit the specifics of the application I'm writing.

If you need more than Racket's bare-bones format:

My slib-format library is a port of a Common Lisp style format
that includes ~u, ~o, ~d and a ton more formatting specifiers :

> (require slib/format)
> (printf "hex: ~x octal: ~o decimal: ~d roman: ~@r~%" 42 42 42 42)
hex: 2a octal: 52 decimal: 42 roman: XLII

There's also a SRFI-48 Intermediate Format Strings library that comes with Racket that includes the usual different base numeric formats and some others.

And of course there's the core ~r function for formatting individual numbers.

What are you trying to do? I find that customizing the printed output is more than suitable for this, since you can stick any custom formatting you want on a wrapper struct.