This is related to the symbol’s math class. You can try and observe it’s behavior with code below.
Code and preview
#let classes = ("normal", "punctuation", "opening", "closing", "fence", "large", "relation", "unary", "binary", "vary")
#table(
columns: 2,
align: center + horizon,
"class", "behavior",
..classes
.map(c => {
let symbol = math.class(c, "test")
(
c,
$
"with space:" &a symbol b \
"without space:" &a#symbol;b
$,
)
})
.flatten()
)
The math class of "GF" is normal so spaces around it counts.
