kosmikus / lhs2tex

Preprocessor for typesetting Haskell sources with LaTeX
Other
99 stars 28 forks source link

`%format pref a = "pref"a` without space in --newcode #102

Open sgraf812 opened 9 months ago

sgraf812 commented 9 months ago

lhs2TeX is a joy to use, as always, but I'm currently struggling with the following macro:

%if style == newcode
%format (hat (a)) = "__hat" a
%else
%format (hat(a)) = "\widehat{" a "}"

I'm intentionally using hat on identifiers and would have hoped that my newcode definition above makes it so that hat d is emitted as __hatd. Alas, it's actually __hat d. Can I convince lhs2TeX not to emit two separate tokens, or omit the space after "__hat"?

This is somewhat related to https://github.com/kosmikus/lhs2tex/issues/46 and https://github.com/kosmikus/lhs2tex/issues/38, where a quote macro is suggested, which also introduces an additional space. (I'm wondering why that is accepted by the GHC lexer or if I'm doing something wrong.)

sgraf812 commented 9 months ago

Perhaps this is a bug, as %format suff a = a "__suff"/%format (hat (a)) = a "__hat" works.

kosmikus commented 9 months ago

I have to look at the code again, but I think the problem is the way the lexer assigns spaces to the contents of the variable. The space is part of the expansion of a, not part of the macro itself. I believe the workaround is to write hat(d) instead of hat d at the call site.