source-academy / sicp

XML sources of SICP and SICP JS, and support for generating Interactive SICP JS, PDF, e-book and comparison editions

Home Page:https://sourceacademy.org/sicpjs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Comparison edition: 4.4: MathJax rendering within JS confused by $pattern_variables

cben opened this issue Β· comments

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. πŸ‘

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.

Screenshot $lives_near
rendered from this XML:

<JAVASCRIPT>
and(job($x, list("computer", "programmer")),
lives_near($x, list("Bitdiddle", "Ben")))
</JAVASCRIPT>

(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:
Screenshot query_1, ..., query_n

<JAVASCRIPT>
In general,
<SNIPPET LATEX="yes">
<JAVASCRIPT>
and(<META>query</META>$_{1}$, <META>query</META>$_{2}$, $\ldots$, <META>query</META>$_{n})$
</JAVASCRIPT>
</SNIPPET>
is
<INDEX>satisfy a compound query<OPEN/></INDEX>
satisfied by all sets of values for the pattern variables that
simultaneously satisfy
<META>query</META><LATEXINLINE>$_{1}, \ldots,$</LATEXINLINE> <META>query</META><LATEXINLINE>$_{n}$</LATEXINLINE>.
</JAVASCRIPT>

So it has to depend on LATEX="yes" attribute.

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.