From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: MathJax beyond org-html-mathjax-options?
Date: Thu, 02 Nov 2017 14:12:24 +0100 [thread overview]
Message-ID: <87fu9w7rk7.fsf@gmx.us> (raw)
In-Reply-To: CAFAhFSUJB5orHJxR-EuWfNtH5Zc-_Vz1tfYKiaAjDYyYrGuCTQ@mail.gmail.com
[-- Attachment #1: Type: text/plain, Size: 1348 bytes --]
Lawrence Bottorff <borgauf@gmail.com> writes:
> I'm trying to get a typical Latex strikethrough with MathJax in an HTML
> export, i.e., \cancel{thing} puts line through "thing". This
> <http://docs.mathjax.org/en/latest/tex.html#cancel> tells me how. But I
> don't know how to include this MathJax markup in an org file for HTML
> export. If I forego MathJax -- i.e., #+OPTIONS: tex:dvipng instead
> of #+OPTIONS: tex:t -- \cancel works, but I need to use MathJax. It doesn't
> look like orhg-html-mathjax-options is expandable. . . .
For now this works for me:
#+html: \(\require{cancel}\)
\begin{equation}
\cancel{x = 1}
\end{equation}
Cf. http://docs.mathjax.org/en/latest/tex.html#tex-and-latex-extensions
You could also autoload the extension, cf. https://github.com/mathjax/MathJax/blob/master/test/sample-autoload.html
That being said, I don’t think extensions were available at the time
#+HTML_MATHJAX was introduced. We could add extension support, but the
questions would be whether to add them to #+HTML_MATHJAX or make a new
keyword, e.g.
#+HTML_MATHJAX_EXTENSIONS: ext1 ext2 ... extN
I guess it would default to the "autoload-all" extension.
One issue is that some of them have configuration options, like "noError".
If you want, you can try the attached patch.
Rasmus
--
Vote for proprietary math!
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-html-MathJax-extensions-support.patch --]
[-- Type: text/x-diff, Size: 9628 bytes --]
From 229bddbaed66a476ebed588853a0250cfe68fdcf Mon Sep 17 00:00:00 2001
From: Rasmus <rasmus@gmx.us>
Date: Thu, 2 Nov 2017 13:59:17 +0100
Subject: [PATCH] ox-html: MathJax extensions support
* lisp/ox-html.el (org-html-mathjax-options):
(org-html-mathjax-template):
(org-html--build-mathjax-config): Add MathJax extensions support.
* doc/org.texi (HTML Specific export settings):
(Math formatting in HTML export): Mention #+HTML_MATHJAX_EXTENSIONS.
---
doc/org.texi | 12 +++++++++-
lisp/ox-html.el | 73 +++++++++++++++++++++++++++++++++++++++++++++------------
2 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/doc/org.texi b/doc/org.texi
index 77da6d335..6ac22aff9 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -11626,6 +11626,12 @@ Options for MathJax (@code{org-html-mathjax-options}). MathJax is used to
typeset @LaTeX{} math in HTML documents. @xref{Math formatting in HTML
export}, for an example.
+@item HTML_MATHJAX_EXTENSIONS
+@cindex #+HTML_MATHJAX_EXTENSIONS
+@vindex org-html-mathjax-options
+Extensions for MathJax (@code{org-html-mathjax-options}). This can be used
+to e.g. add additional macro support to MathJax.
+
@item HTML_HEAD
@cindex #+HTML_HEAD
@vindex org-html-head
@@ -11947,9 +11953,13 @@ 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
+#+HTML_MATHJAX: cancel.js noErrors.js
@end smallexample
equation labels will be displayed on the left margin and equations will be
-five ems from the left margin.
+five ems from the left margin. In addition, it loads the two MathJax
+extensions @samp{cancel.js} and @samp{noErrors.js}@footnote{See
+@uref{http://docs.mathjax.org/en/latest/tex.html#tex-extensions, TeX and
+LaTeX extensions} in the @uref{http://docs.mathjax.org, MathJax manual} to learn about extensions.}.
@noindent See the docstring of
@code{org-html-mathjax-options} for all supported variables. The MathJax
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 1c3dd8090..4f9e69fdf 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -121,6 +121,7 @@
(:html-link-home "HTML_LINK_HOME" nil org-html-link-home)
(:html-link-up "HTML_LINK_UP" nil org-html-link-up)
(:html-mathjax "HTML_MATHJAX" nil "" space)
+ (:html-mathjax-extensions "HTML_MATHJAX_EXTENSIONS" nil "" space)
(:html-postamble nil "html-postamble" org-html-postamble)
(:html-preamble nil "html-preamble" org-html-preamble)
(:html-head "HTML_HEAD" nil org-html-head newline)
@@ -1168,7 +1169,8 @@ See `format-time-string' for more information on its components."
(indent "0em")
(multlinewidth "85%")
(tagindent ".8em")
- (tagside "right"))
+ (tagside "right")
+ (extensions ("autoload-all.js")))
"Options for MathJax setup.
Alist of the following elements. All values are strings.
@@ -1190,23 +1192,28 @@ autonumber How to number equations. Valid values are \"None\",
tagindent The amount tags are indented.
tagside Which side to show tags/labels on. Valid values are
\"left\" and \"right\"
+extensions Which extensions to load. See http://docs.mathjax.org/en/latest/tex.html#tex-extensions
You can also customize this for each buffer, using something like
#+HTML_MATHJAX: align: left indent: 5em tagside: left font: Neo-Euler
+#+HTML_MATHJAX_EXTENSIONS: colors noErrors
For further information about MathJax options, see the MathJax documentation:
http://docs.mathjax.org/"
:group 'org-export-html
- :package-version '(Org . "8.3")
+ :package-version '(Org . "9.2")
: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))
+ (const :format " " align)
+ (choice (const "left")
+ (const "right")
+ (const "center")))
(list :tag "font (used to display math)"
(const :format " " font)
(choice (const "TeX")
@@ -1230,11 +1237,39 @@ For further information about MathJax options, see the MathJax documentation:
(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))
+ (const :format " " tagindent) (string))
(list :tag "tagside (location of tags)"
(const :format " " tagside)
(choice (const "left")
- (const "right")))))
+ (const "right")))
+ (list :tag "extensions (loaded extensions)"
+ (const :format " " extensions)
+ (set
+ (const :tag "Autoload-all: autoload all extensions if needed" "autoload-all.js")
+ (const :tag "Action: access to the MathML <maction> element" "action.js")
+ (const :tag "AMSMath: AMS math environments and macros" "AMSmath.js")
+ (const :tag "AMSsymbols: macros for accessing the AMS symbol fonts"
+ "AMSsymbols.js")
+ (const :tag "AMScd: CD environment for commutative diagrams" "AMScd.js")
+ (const :tag "Autobold: auto-adds \\\\boldsymbol to bold sections" "autobold.js")
+ (const :tag "Begingroup: provides a mechanism for localizing macro defintions"
+ "begingroup.js")
+ (const :tag "Cancel: macros for various strikeouts in math environments"
+ "cancel.js")
+ (const :tag "Color: mimics the LaTeX color package"
+ "color.js")
+ (const :tag "Enclose: access to the MathML <menclose> element for adding boxes"
+ "enclose.js")
+ (const :tag "Extpfeil: adds more macros for producing extensible arrows"
+ "extpfeil.js")
+ (const :tag "HTML: access to HTML features like styles, classes, IDs and links"
+ "HTML.js") ; TODO: check name
+ (const :tag "mhchem: implements LaTeX mhchem package macros" "mhchem.js")
+ (const :tag "noErrors: prevents TeX error messages from being displayed"
+ "noErrors.js")
+ (const :tag "noUndefined: undefined control sequences shown as their macro names"
+ "noUndefined.js")
+ (repeat :tag "Others" :inline t string)))))
(defcustom org-html-mathjax-template
"<script type=\"text/x-mathjax-config\">
@@ -1243,9 +1278,9 @@ For further information about MathJax options, see the MathJax documentation:
displayIndent: \"%INDENT\",
\"HTML-CSS\": { scale: %SCALE,
- linebreaks: { automatic: \"%LINEBREAKS\" },
- webFont: \"%FONT\"
- },
+ linebreaks: { automatic: \"%LINEBREAKS\" },
+ webFont: \"%FONT\"
+ },
SVG: {scale: %SCALE,
linebreaks: { automatic: \"%LINEBREAKS\" },
font: \"%FONT\"},
@@ -1253,7 +1288,8 @@ For further information about MathJax options, see the MathJax documentation:
TeX: { equationNumbers: {autoNumber: \"%AUTONUMBER\"},
MultLineWidth: \"%MULTLINEWIDTH\",
TagSide: \"%TAGSIDE\",
- TagIndent: \"%TAGINDENT\"
+ TagIndent: \"%TAGINDENT\",
+ extensions: [\"%EXTENSIONS\"]
}
});
</script>
@@ -1904,19 +1940,26 @@ INFO is a plist used as a communication channel."
(when (and (memq (plist-get info :with-latex) '(mathjax t))
(org-element-map (plist-get info :parse-tree)
'(latex-fragment latex-environment) #'identity info t nil t))
- (let ((template (plist-get info :html-mathjax-template))
- (options (plist-get info :html-mathjax-options))
- (in-buffer (or (plist-get info :html-mathjax) "")))
+ (let* ((template (plist-get info :html-mathjax-template))
+ (options (plist-get info :html-mathjax-options))
+ (in-buffer-extensions (plist-get info :html-mathjax-extensions))
+ (extensions-string (when (org-string-nw-p in-buffer-extensions)
+ (format " extensions: (%s)" in-buffer-extensions)))
+ (in-buffer (concat (or (plist-get info :html-mathjax) "") " "
+ (or extensions-string ""))))
(dolist (e options (org-element-normalize-string template))
(let ((name (car e))
(val (nth 1 e)))
- (when (string-match (concat "\\<" (symbol-name name) ":") in-buffer)
+ (when (string-match (format "\\<%s:" name) in-buffer)
(setq val
(car (read-from-string (substring in-buffer (match-end 0))))))
- (unless (stringp val) (setq val (format "%s" val)))
(while (string-match (concat "%" (upcase (symbol-name name)))
template)
- (setq template (replace-match val t t template))))))))
+ (setq template (replace-match (cond
+ ((listp val) (mapconcat 'symbol-name val ", "))
+ ((stringp val) val)
+ (t (format "%s" val)))
+ t t template))))))))
(defun org-html-format-spec (info)
"Return format specification for preamble and postamble.
--
2.15.0
next prev parent reply other threads:[~2017-11-02 13:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-01 1:30 MathJax beyond org-html-mathjax-options? Lawrence Bottorff
2017-11-02 13:12 ` Rasmus [this message]
2017-11-03 17:29 ` Lawrence Bottorff
2017-11-03 17:40 ` Rasmus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fu9w7rk7.fsf@gmx.us \
--to=rasmus@gmx.us \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).