emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [patch, ox-html] mathjax changes


From: Rasmus
Subject: Re: [O] [patch, ox-html] mathjax changes
Date: Tue, 17 Feb 2015 19:04:26 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

Hi,

Rasmus <address@hidden> writes:

>>> and *why* is orgmode.org hosting it? Privacy?
>>
>> I don't think CDN service was available at the time mathjax support was
>> implemented. IMO, it hardly makes sense to host it now.
>
> This patch switches the cdn to upstream and removes a lot of stuff that I
> believe mathjax will figure out on it own.  I'm no mathjax or webs export,
> though.  Notably, mathml stuff is gone.
>
> OTOH, I added some display options, which I believe one might care about.
> If more "user-sensible" options exists I can add them.
>
> It would be good if someone who knows MathJax better could reviews this.

Added font, better scale support, linebreaks, linebreaks and possibility
for the browser to chose MathMl if support is good enough.

If you are uncomfortable with Org linking against cdn.mathjax.org it would
be good to let me know.  If no other inputs, I will install this patch
soonish.

—Rasmus

-- 
The second rule of Fight Club is: You do not talk about Fight Club
>From bc57c2daa56838487f183931aead4fd9720307d1 Mon Sep 17 00:00:00 2001
From: Rasmus <address@hidden>
Date: Mon, 16 Feb 2015 02:04:02 +0100
Subject: [PATCH] ox-html: Use upstream MathJax CDN

* ox-html.el (org-html-mathjax-options): Add multlinewidth,
  autonumber, tagindent, font, linebreaks and tagside.  Remove MathML.
  Change default indent to correspond to upstream default.  Change
  default MathJax path to point to upstream CDN.
  (org-html--build-mathjax-config): Remove MathML-related parts.
  (org-html-mathjax-template): Simplifiy template.
* org.texi (@LaTeX{} fragments), (Math formatting in HTML export):
  Reflect change in default CDN.
---
 doc/org.texi    |  51 ++++++++---------
 lisp/ox-html.el | 168 +++++++++++++++++++++++++++++++-------------------------
 2 files changed, 116 insertions(+), 103 deletions(-)

diff --git a/doc/org.texi b/doc/org.texi
index bec46a9..de79e94 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -10258,20 +10258,17 @@ format sub- and superscripts in a WYSIWYM way.
 Going beyond symbols and sub- and superscripts, a full formula language is
 needed.  Org mode can contain @LaTeX{} math fragments, and it supports ways
 to process these for several export back-ends.  When exporting to @LaTeX{},
-the code is obviously left as it is.  When exporting to HTML, Org can invoke
-the @uref{http://www.mathjax.org, MathJax library} (@pxref{Math formatting in
-HTML export}) to process and display the address@hidden you plan to use
-this regularly or on pages with significant page views, you should install
address@hidden on your own server in order to limit the load of our server.}.
-It can also process the mathematical expressions into images that can be
-displayed in a browser (see @pxref{Previewing @LaTeX{} fragments}).
+the code is left as it is.  When exporting to HTML, Org can use either
address@hidden://www.mathjax.org, MathJax} (@pxref{Math formatting in HTML
+export}) or transcode the math into images (see @pxref{Previewing @LaTeX{}
+fragments}).
 
 @LaTeX{} fragments don't need any special marking at all.  The following
 snippets will be identified as @LaTeX{} source code:
 @itemize @bullet
 @item
-Environments of any address@hidden @file{MathJax} is used, only the
-environments recognized by @file{MathJax} will be processed.  When
+Environments of any address@hidden MathJax is used, only the
+environments recognized by MathJax will be processed.  When
 @file{dvipng} program or @file{imagemagick} suite is used to create images,
 any @LaTeX{} environment will be handled.}.  The only requirement is that the
 @code{\begin} statement appears on a new line, at the beginning of the line
@@ -10307,7 +10304,7 @@ either $$ address@hidden@} $$ or \[ address@hidden@} \].
 @vindex org-export-with-latex
 @LaTeX{} processing can be configured with the variable
 @code{org-export-with-latex}.  The default setting is @code{t} which means
address@hidden for HTML, and no processing for ASCII and @LaTeX{} back-ends.
+MathJax for HTML, and no processing for ASCII and @LaTeX{} back-ends.
 You can also set this variable on a per-file basis using one of these
 lines:
 
@@ -11466,25 +11463,23 @@ You could use @code{http} addresses just as well.
 @cindex imagemagick
 
 @LaTeX{} math snippets (@address@hidden fragments}) can be displayed in two
-different ways on HTML pages.  The default is to use the
address@hidden://www.mathjax.org, MathJax system} which should work out of the
-box with Org mode installation because @uref{http://orgmode.org} serves
address@hidden for Org mode users for small applications and for testing
-purposes.  @b{If you plan to use this regularly or on pages with significant
-page views, you should address@hidden instructions can be
-found on the MathJax website, see
address@hidden://www.mathjax.org/resources/docs/?installation.html}.} MathJax on
-your own server in order to limit the load of our server.}  To configure
address@hidden, use the variable @code{org-html-mathjax-options} or
-insert something like the following into the buffer:
-
address@hidden
-#+HTML_MATHJAX: align:"left" mathml:t path:"/MathJax/MathJax.js"
address@hidden example
+different ways on HTML pages.  The default is to use
address@hidden://www.mathjax.org, MathJax} which should work out of the box with
address@hidden default Org loads MathJax from
address@hidden://docs.mathjax.org/en/latest/start.html#using-the-mathjax-content-delivery-network-cdn,
+MathJax.org}.  A link to the terms of service of the MathJax CDN can be found
+in the docstring of @code{org-html-mathjax-options}.}.  Some MathJax display
+options can be configured via @code{org-html-mathjax-options}, or in the
+buffer.  For example, with the following settings,
address@hidden
+#+HTML_MATHJAX: align: left indent: 5em tagside: left font: Neo-Euler
address@hidden smallexample
+equation labels will be displayed on the left marign and equations will be
+five ems from the left margin.
 
address@hidden See the docstring of the variable
address@hidden for the meaning of the parameters in
-this line.
address@hidden See the docstring of
address@hidden for all supported variables.  The MathJax
+template can be configure via @code{org-html-mathjax-template}.
 
 If you prefer, you can also request that @LaTeX{} fragments are processed
 into small images that will be inserted into the browser page.  Before the
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 61619e0..75bb9f4 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -1064,82 +1064,111 @@ See `format-time-string' for more information on its 
components."
 ;;;; Template :: Mathjax
 
 (defcustom org-html-mathjax-options
-  '((path  "http://orgmode.org/mathjax/MathJax.js";)
+  '((path 
"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; 
)
     (scale "100")
     (align "center")
-    (indent "2em")
-    (mathml nil))
+    (font "TeX")
+    (linebreaks "false")
+    (autonumber "AMS")
+    (indent "0em")
+    (multlinewidth "85%")
+    (tagindent ".8em")
+    (tagside "right"))
   "Options for MathJax setup.
 
-path        The path where to find MathJax
-scale       Scaling for the HTML-CSS backend, usually between 100 and 133
-align       How to align display math: left, center, or right
-indent      If align is not center, how far from the left/right side?
-mathml      Should a MathML player be used if available?
-            This is faster and reduces bandwidth use, but currently
-            sometimes has lower spacing quality.  Therefore, the default is
-            nil.  When browsers get better, this switch can be flipped.
+Alist of the following elements.  All values are strings.
+
+path          The path to MathJax.
+scale         Scaling with HTML-CSS, MathML and SVG output engines.
+align         How to align display math: left, center, or right.
+font          The font to use with HTML-CSS and SVG output.  As of MathJax 2.5
+              the following values are understood: \"TeX\", \"STIX-Web\",
+              \"Asana-Math\", \"Neo-Euler\", \"Gyre-Pagella\",
+              \"Gyre-Termes\", and \"Latin-Modern\".
+linebreaks    Let MathJax perform automatic linebreaks.  Valid values
+              are \"true\" and \"false\".
+indent        If align is not center, how far from the left/right side?
+              Valid values are \"left\" and \"right\"
+multlinewidth The width of the multline environment.
+autonumber    How to number equations.  Valid values are \"None\", 
+              \"all\" and \"AMS Math\".
+tagindent     The amount tags are indented.
+tagside       Which side to show tags/labels on.  Valid values are 
+              \"left\" and \"right\"
 
 You can also customize this for each buffer, using something like
 
-#+MATHJAX: scale:\"133\" align:\"right\" mathml:t path:\"/MathJax/\""
+#+HTML_MATHJAX: align: left indent: 5em tagside: left
+
+For further information about MathJax options, see the MathJax documentation:
+
+    http://docs.mathjax.org/
+
+Please note that by using the default CDN one must agree with
+MathJax CDN Terms of Service.
+
+    http://www.mathjax.org/mathjax-cdn-terms-of-service.html";
   :group 'org-export-html
   :type '(list :greedy t
-             (list :tag "path   (the path from where to load MathJax.js)"
-                   (const :format "       " path) (string))
-             (list :tag "scale  (scaling for the displayed math)"
-                   (const :format "       " scale) (string))
-             (list :tag "align  (alignment of displayed equations)"
-                   (const :format "       " align) (string))
-             (list :tag "indent (indentation with left or right alignment)"
-                   (const :format "       " indent) (string))
-             (list :tag "mathml (should MathML display be used is possible)"
-                   (const :format "       " mathml) (boolean))))
+              (list :tag "path   (the path from where to load MathJax.js)"
+                    (const :format "       " path) (string))
+              (list :tag "scale  (scaling for the displayed math)"
+                    (const :format "       " scale) (string))
+              (list :tag "align  (alignment of displayed equations)"
+                    (const :format "       " align) (string))
+              (list :tag "font (used to display math)"
+                    (const :format "            " font)
+                    (choice (const "TeX")
+                            (const "STIX-Web")
+                            (const "Asana-Math")
+                            (const "Neo-Euler")
+                            (const "Gyre-Pagella")
+                            (const "Gyre-Termes")
+                            (const "Latin-Modern")))
+              (list :tag "linebreaks (automatic line-breaking)"
+                    (const :format "      " linebreaks)
+                    (choice (const "true")
+                            (const "false")))
+              (list :tag "autonumber (when should equations be numbered)"
+                    (const :format "      " autonumber)
+                    (choice (const "AMS")
+                            (const "None")
+                            (const "All")))
+              (list :tag "indent (indentation with left or right alignment)"
+                    (const :format "       " indent) (string))
+              (list :tag "multlinewidth (width to use for the multline 
environment)"
+                    (const :format "       " multlinewidth) (string))
+              (list :tag "tagindent (the indentation of tags from left or 
right)"
+                    (const :format "     " tagindent) (string))
+              (list :tag "tagside (location of tags)"
+                    (const :format "      " tagside)
+                    (choice (const "left")
+                            (const "right")))))
 
 (defcustom org-html-mathjax-template
-  "<script type=\"text/javascript\" src=\"%PATH\"></script>
-<script type=\"text/javascript\">
-<!--/*--><![CDATA[/*><!--*/
+  "<script type=\"text/x-mathjax-config\">
     MathJax.Hub.Config({
-        // Only one of the two following lines, depending on user settings
-        // First allows browser-native MathML display, second forces HTML/CSS
-        :MMLYES: config: [\"MMLorHTML.js\"], jax: [\"input/TeX\"],
-        :MMLNO: jax: [\"input/TeX\", \"output/HTML-CSS\"],
-        extensions: [\"tex2jax.js\",\"TeX/AMSmath.js\",\"TeX/AMSsymbols.js\",
-                     \"TeX/noUndefined.js\"],
-        tex2jax: {
-            inlineMath: [ [\"\\\\(\",\"\\\\)\"] ],
-            displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"], 
[\"\\\\begin{displaymath}\",\"\\\\end{displaymath}\"] ],
-            skipTags: 
[\"script\",\"noscript\",\"style\",\"textarea\",\"pre\",\"code\"],
-            ignoreClass: \"tex2jax_ignore\",
-            processEscapes: false,
-            processEnvironments: true,
-            preview: \"TeX\"
-        },
-        showProcessingMessages: true,
         displayAlign: \"%ALIGN\",
         displayIndent: \"%INDENT\",
 
-        \"HTML-CSS\": {
-             scale: %SCALE,
-             availableFonts: [\"STIX\",\"TeX\"],
-             preferredFont: \"TeX\",
-             webFont: \"TeX\",
-             imageFont: \"TeX\",
-             showMathMenu: true,
-        },
-        MMLorHTML: {
-             prefer: {
-                 MSIE:    \"MML\",
-                 Firefox: \"MML\",
-                 Opera:   \"HTML\",
-                 other:   \"HTML\"
+        \"HTML-CSS\": { scale: %SCALE,
+                        linebreaks: { automatic: \"%LINEBREAKS\" },
+                        webFont: \"%FONT\"
+                       },
+        SVG: {scale: %SCALE,
+              linebreaks: { automatic: \"%LINEBREAKS\" },
+              font: \"%FONT\"},
+        NativeMML: {scale: %SCALE},
+        TeX: { equationNumbers: {autoNumber: \"%AUTONUMBER\"},
+               MultLineWidth: \"%MULTLINEWIDTH\",
+               TagSide: \"%TAGSIDE\",
+               TagIndent: \"%TAGINDENT\"
              }
-        }
-    });
-/*]]>*///-->
-</script>"
-  "The MathJax setup for XHTML files."
+});
+</script>
+<script type=\"text/javascript\"
+        src=\"%PATH\"></script>"
+  "The MathJax template.  See also `org-html-mathjax-options'."
   :group 'org-export-html
   :type 'string)
 
@@ -1680,28 +1709,17 @@ INFO is a plist used as a communication channel."
     (let ((template (plist-get info :html-mathjax-template))
          (options (plist-get info :html-mathjax-options))
          (in-buffer (or (plist-get info :html-mathjax) ""))
-         name val (yes "   ") (no "// ") x)
+         name val x)
       (mapc
        (lambda (e)
         (setq name (car e) val (nth 1 e))
         (if (string-match (concat "\\<" (symbol-name name) ":") in-buffer)
             (setq val (car (read-from-string
                             (substring in-buffer (match-end 0))))))
-        (if (not (stringp val)) (setq val (format "%s" val)))
-        (if (string-match (concat "%" (upcase (symbol-name name))) template)
-            (setq template (replace-match val t t template))))
+        (if (not (stringp val)) (setq val (format "%s" val)))
+        (while (string-match (concat "%" (upcase (symbol-name name))) template)
+          (setq template (replace-match val t t template))))
        options)
-      (setq val (nth 1 (assq 'mathml options)))
-      (if (string-match (concat "\\<mathml:") in-buffer)
-         (setq val (car (read-from-string
-                         (substring in-buffer (match-end 0))))))
-      ;; Exchange prefixes depending on mathml setting.
-      (if (not val) (setq x yes yes no no x))
-      ;; Replace cookies to turn on or off the config/jax lines.
-      (if (string-match ":MMLYES:" template)
-         (setq template (replace-match yes t t template)))
-      (if (string-match ":MMLNO:" template)
-         (setq template (replace-match no t t template)))
       ;; Return the modified template.
       (org-element-normalize-string template))))
 
-- 
2.3.0


reply via email to

[Prev in Thread] Current Thread [Next in Thread]