From b2d532ea28eaaf0b7b2cf225c713c8a8d3f4a3bf Mon Sep 17 00:00:00 2001 From: Benjamin Tan Date: Thu, 8 Feb 2018 20:54:21 +0800 Subject: [PATCH] Allow users to customise MathJax options. Ref. #1856, #2006, #2045. This is a more open approach to allow customisation of all MathJax options instead of select options only. --- README.md | 2 ++ plugin/math/math.js | 39 ++++++++++++++++++++++++++++----------- test/examples/math.html | 24 +++++++++++++++++++++++- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c0d019a..d935a82 100644 --- a/README.md +++ b/README.md @@ -1203,6 +1203,8 @@ Reveal.initialize({ math: { mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js', config: 'TeX-AMS_HTML-full' // See http://docs.mathjax.org/en/latest/config-files.html + // pass other options into `MathJax.Hub.Config()` + TeX: { Macros: macros } }, dependencies: [ diff --git a/plugin/math/math.js b/plugin/math/math.js index 7867376..29445cd 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -7,19 +7,26 @@ var RevealMath = window.RevealMath || (function(){ var options = Reveal.getConfig().math || {}; - options.mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js'; - options.config = options.config || 'TeX-AMS_HTML-full'; - options.tex2jax = options.tex2jax || { - inlineMath: [['$','$'],['\\(','\\)']] , - skipTags: ['script','noscript','style','textarea','pre'] }; + var mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js'; + var config = options.config || 'TeX-AMS_HTML-full'; + var url = mathjax + '?config=' + config; - loadScript( options.mathjax + '?config=' + options.config, function() { + var defaultOptions = { + messageStyle: 'none', + tex2jax: { + inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ], + skipTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ] + }, + skipStartupTypeset: true + }; - MathJax.Hub.Config({ - messageStyle: 'none', - tex2jax: options.tex2jax, - skipStartupTypeset: true - }); + defaults( options, defaultOptions ); + defaults( options.tex2jax, defaultOptions.tex2jax ); + options.mathjax = options.config = null; + + loadScript( url, function() { + + MathJax.Hub.Config( options ); // Typeset followed by an immediate reveal.js layout since // the typesetting process could affect slide height @@ -35,6 +42,16 @@ var RevealMath = window.RevealMath || (function(){ } ); + function defaults( options, defaultOptions ) { + + for ( var i in defaultOptions ) { + if ( !options.hasOwnProperty( i ) ) { + options[i] = defaultOptions[i]; + } + } + + } + function loadScript( url, callback ) { var head = document.querySelector( 'head' ); diff --git a/test/examples/math.html b/test/examples/math.html index d35e827..73484d7 100644 --- a/test/examples/math.html +++ b/test/examples/math.html @@ -82,6 +82,14 @@ \] +
+

TeX Macros

+ + Here is a common vector space: + \[L^2(\R) = \set{u : \R \to \R}{\int_\R |u|^2 < +\infty}\] + used in functional analysis. +
+

The Lorenz Equations

@@ -153,6 +161,14 @@ \]
+ +
+

TeX Macros

+ + Here is a common vector space: + \[L^2(\R) = \set{u : \R \to \R}{\int_\R |u|^2 < +\infty}\] + used in functional analysis. +
@@ -170,7 +186,13 @@ math: { // mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js', - config: 'TeX-AMS_HTML-full' + config: 'TeX-AMS_HTML-full', + TeX: { + Macros: { + R: '\\mathbb{R}', + set: [ '\\left\\{#1 \\; ; \\; #2\\right\\}', 2 ] + } + } }, dependencies: [