The logic programming patterns in section 4.4 used ?foo for variables in Scheme and $foo in JS.
That's a great choice, as dollar is the only punctuation char valid in JS identifiers, and alludes to $var syntaxes in shells/Perl/etc. :+1:
Alas, in the comparison edition, the dollars confuse MathJax, which apparently processes the whole page, including all JS code :-(
here is a particularly mixed-up example, where same list( is sometimes literal code sometimes italic "math", and underscore in lives_near makes the letter n subscript — and most importantly all the dollars are gone.
The JS-only edition looks fine BTW: https://sourceacademy.org/sicpjs/4.4.1#p20
There code is code, dollars are dollars, all monospace, yet the LATEX="yes" portions do get rendered with KaTeX.
The logic programming patterns in section 4.4 used
?foo
for variables in Scheme and$foo
in JS. That's a great choice, as dollar is the only punctuation char valid in JS identifiers, and alludes to $var syntaxes in shells/Perl/etc. :+1:Alas, in the comparison edition, the dollars confuse MathJax, which apparently processes the whole page, including all JS code :-(
here is a particularly mixed-up example, where same
list(
is sometimes literal code sometimes italic "math", and underscore inlives_near
makes the letter n subscript — and most importantly all the dollars are gone.rendered from this XML: https://github.com/source-academy/sicp/blob/ca6ce376aadd94070b50727a0678ba04a3eb44e2/xml/chapter4/section4/subsection1.xml#L1676-L1679
(same happens in later subsections 4.4.2 and so on.)
Now, you can't just exclude all Scheme/JS snippets from mathjax processing, cause some are deliberate, like here: https://github.com/source-academy/sicp/blob/ca6ce376aadd94070b50727a0678ba04a3eb44e2/xml/chapter4/section4/subsection1.xml#L1068-L1080
So it has to depend on
LATEX="yes"
attribute.