Found by the #925 lane (PR for expansion/optional-arg-spans-925). With \newcommand{\two}[2]{#1 #2}, (\two{a}{b}) sets ab — the blank in the macro body between the two parameters is lost. Pre-existing and independent of #919/#925 (those fixed the gap around an invocation). Seam: adapter.rs token_gap / BodyCursor — when the gap between two replacement tokens lies inside the macro body (between #1 and #2), read the body bytes between the parameter markers, not the invocation's argument bytes. Test alongside tests/macro_boundary_space.rs; oracle pdflatex.
Found by the #925 lane (PR for
expansion/optional-arg-spans-925). With\newcommand{\two}[2]{#1 #2},(\two{a}{b})setsab— the blank in the macro body between the two parameters is lost. Pre-existing and independent of #919/#925 (those fixed the gap around an invocation). Seam:adapter.rstoken_gap/BodyCursor— when the gap between two replacement tokens lies inside the macro body (between#1and#2), read the body bytes between the parameter markers, not the invocation's argument bytes. Test alongsidetests/macro_boundary_space.rs; oracle pdflatex.