From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rasmus Subject: Re: [patch, ox-html] mathjax changes Date: Tue, 17 Feb 2015 19:04:26 +0100 Message-ID: <87bnks76tx.fsf@gmx.us> References: <87zj8gaujl.fsf@gmx.us> <87h9uno5sh.fsf@nicolasgoaziou.fr> <87d25b76ph.fsf@gmx.us> <87lhjzl4oj.fsf@nicolasgoaziou.fr> <87lhjzl46l.fsf@gmx.us> <878ufzkvsp.fsf@nicolasgoaziou.fr> <871tlqipz9.fsf_-_@gmx.us> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:48373) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNmVi-00033B-94 for emacs-orgmode@gnu.org; Tue, 17 Feb 2015 13:04:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YNmVd-0007SM-1I for emacs-orgmode@gnu.org; Tue, 17 Feb 2015 13:04:38 -0500 Received: from mout.gmx.net ([212.227.17.22]:59688) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNmVc-0007Ru-Md for emacs-orgmode@gnu.org; Tue, 17 Feb 2015 13:04:32 -0500 Received: from x200s ([77.247.182.246]) by mail.gmx.com (mrgmx103) with ESMTPSA (Nemesis) id 0Lqyi7-1Xs2KV2bw3-00eZm6 for ; Tue, 17 Feb 2015 19:04:29 +0100 In-Reply-To: <871tlqipz9.fsf_-_@gmx.us> (rasmus@gmx.us's message of "Mon, 16 Feb 2015 02:50:50 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, Rasmus 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. =E2=80=94Rasmus --=20 The second rule of Fight Club is: You do not talk about Fight Club --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-ox-html-Use-upstream-MathJax-CDN.patch >From bc57c2daa56838487f183931aead4fd9720307d1 Mon Sep 17 00:00:00 2001 From: Rasmus 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 math@footnote{If you plan to use -this regularly or on pages with significant page views, you should install -@file{MathJax} 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 +@uref{http://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 kind@footnote{When @file{MathJax} is used, only the -environments recognized by @file{MathJax} will be processed. When +Environments of any kind@footnote{When 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 $$ a=+\sqrt@{2@} $$ or \[ a=-\sqrt@{2@} \]. @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 -@file{MathJax} 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 (@pxref{@LaTeX{} fragments}) can be displayed in two -different ways on HTML pages. The default is to use the -@uref{http://www.mathjax.org, MathJax system} which should work out of the -box with Org mode installation because @uref{http://orgmode.org} serves -@file{MathJax} 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 install@footnote{Installation instructions can be -found on the MathJax website, see -@uref{http://www.mathjax.org/resources/docs/?installation.html}.} MathJax on -your own server in order to limit the load of our server.} To configure -@file{MathJax}, use the variable @code{org-html-mathjax-options} or -insert something like the following into the buffer: - -@example -#+HTML_MATHJAX: align:"left" mathml:t path:"/MathJax/MathJax.js" -@end example +different ways on HTML pages. The default is to use +@uref{http://www.mathjax.org, MathJax} which should work out of the box with +Org@footnote{By default Org loads MathJax from +@uref{http://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, +@smallexample +#+HTML_MATHJAX: align: left indent: 5em tagside: left font: Neo-Euler +@end smallexample +equation labels will be displayed on the left marign and equations will be +five ems from the left margin. -@noindent See the docstring of the variable -@code{org-html-mathjax-options} for the meaning of the parameters in -this line. +@noindent See the docstring of +@code{org-html-mathjax-options} 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 - " -" - "The MathJax setup for XHTML files." +}); + +" + "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 "\\