scribble-math
(require scribble-math) | package: scribble-math |
This library allows typesetting math and Asymptote figures in Scribble documents.
1 Typesetting math with $ and $$
(require scribble-math/dollar) | package: scribble-math |
The following functions help with typesetting mathematical equations. The main functions are $ for inline mode math and $$ for display mode math, respectively. The functions use-katex and use-mathjax change the rendering engine used, the default being katex. To use katex, it is necessary to use @title[#:style (with-html5 manual-doc-style)]{…} or a similar configuration; for more details see the documentation of with-html5.
The syntax accepted by $ is a subset of the commands supported by LaTeX, and depends on the backend used (MathJax should support more commands than KaTeX). For details, see their respective documentation.
($$ "\\sum_{i=0}^n x_i^3")
renders as:
The syntax accepted by $$ is a subset of the commands supported by LaTeX, and depends on the backend used (MathJax should support more commands than KaTeX). For details, see their respective documentation.
procedure
(with-html5 doc-style) → style?
doc-style : style?
This function should be called to alter the #:style argument for title when KaTeX is used, as KaTeX is incompatible with the default scribble DOCTYPE (the HTML 4.01 Transitional loose DTD). The scribble document should therefore contain code similar to the following:
@title[#:style (with-html5 manual-doc-style)]{...}
This function works by changing the existing html-defaults property or adding a new one, so that it uses an HTML5 prefix file (the prefix file contains the DOCTYPE line).
parameter
($-html-handler) → (→ (listof? string?) element?)
($-html-handler handler) → void? handler : (→ (listof? string?) element?)
= $-katex
parameter
($$-html-handler) → (→ (listof? string?) element?)
($$-html-handler handler) → void? handler : (→ (listof? string?) element?)
= $$-katex
procedure
($$-mathjax math) → element?
math : (listof? string?)
The KaTeX library will be added to the HTML document only if it uses the result of one of $, $$, $-katex or $$-katex. It is therefore safe to call this function in libraries to change the default handler, without the risk of adding extra resources to the page if the user changes the default before typesetting any math.
procedure
(use-mathjax) → void?
The MathJax library will be added to the HTML document only if i uses the result of one of $, $$, $-katex or $$-katex. It is therefore safe to call this function in libraries to change the default handler, without the risk of adding extra resources to the page if the user changes the default before typesetting any math.
When using MathJax, $ and $$ wrap their content with "$…$" and "\\[…\\]" respectively, and insert it in an element with the class "tex2jax_process". MathJax is configured to only process elements with this class, so it is safe to use $ signs in the source document. For example, the text $\sum x^3$ is typeset as-is, like the rest of the text.
2 Drawing figures with Asymptote
(require scribble-math/asymptote) | |
package: scribble-math |
If the Asymptote code is dynamically generated, make sure that the result is always the same, or use #:cache #f. Otherwise, each compilation would cause a new file to be generated.
The asy executable must be installed on the machine that renders the figures. If the results are already cached, then the scribble document can be compiled without installing Asymptote.
As an example, the code
@asymptote{ import drawtree; size(4cm, 0); TreeNode root = makeNode("let"); TreeNode bindings = makeNode(root, "bindings"); TreeNode binding = makeNode(bindings, "binding"); TreeNode bid = makeNode(binding, "id"); TreeNode bexpr = makeNode(binding, "expr"); TreeNode bindingddd = makeNode(bindings, "\vphantom{x}\dots"); TreeNode body = makeNode(root, "body"); TreeNode bodyddd = makeNode(root, "\vphantom{x}\dots"); draw(root, (0,0)); shipout(scale(2)*currentpicture.fit()); }
renders as: