Implement MathJax support

* lisp/org-exp.el (org-export-with-LaTeX-fragments): New default t, which
now means to use MathJax processing for HTML.  Also allow new value
`dvipng' to force the old image processing.
(org-infile-export-plist): Parse for MATHJAX setup line.
* lisp/org-html.el (org-export-html-mathjax-options): New option.
(org-export-html-mathjax-config): New function.
(org-export-html-mathjax-template): New option.
(org-export-html-preprocess): Call the LaTeX snippet processor with an
additional argument to declare special ways of processing.
(org-export-as-html): Bind the dynamical variable
`org-export-have-math'.  Insert the MathJax script template when it is
needed by the document.
* lisp/org.el (org-preview-latex-fragment): Call `org-format-latex' with
the additional processing argument.
(org-export-have-math): New variable, for dynamic scoping.
(org-format-latex): Implement specific ways of processing.  New
function argument for processing type.
(org-org-menu): Remove the entry to configure LaTeX snippet
processing.

MathJax is now the default for displaying math in a browser.
This commit is contained in:
Carsten Dominik 2010-08-13 14:22:16 +02:00
parent d17cc96fc7
commit 999078b0bf
4 changed files with 275 additions and 72 deletions

View File

@ -363,6 +363,7 @@ HTML export
* Links in HTML export:: How links will be interpreted and formatted * Links in HTML export:: How links will be interpreted and formatted
* Tables in HTML export:: How to modify the formatting of tables * Tables in HTML export:: How to modify the formatting of tables
* Images in HTML export:: How to insert figures into HTML output * Images in HTML export:: How to insert figures into HTML output
* Math formatting in HTML export:: Beautiful math also on the web
* Text areas in HTML export:: An alternative way to show an example * Text areas in HTML export:: An alternative way to show an example
* CSS support:: Changing the appearance of the output * CSS support:: Changing the appearance of the output
* JavaScript support:: Info and Folding in a web browser * JavaScript support:: Info and Folding in a web browser
@ -439,12 +440,17 @@ Using header arguments
Specific header arguments Specific header arguments
* var:: Pass arguments to code blocks * var:: Pass arguments to code blocks
* results:: Specify the type of results and how they will be collected and handled * results:: Specify the type of results and how they will
be collected and handled
* file:: Specify a path for file output * file:: Specify a path for file output
* dir:: Specify the default directory for code block execution * dir:: Specify the default (possibly remote)
directory for code block execution
* exports:: Export code and/or results * exports:: Export code and/or results
* tangle:: Toggle tangling and specify file name * tangle:: Toggle tangling and specify file name
* no-expand:: Turn off variable assignment and noweb expansion during tangling * comments:: Toggle insertion of comments in tangled
code files
* no-expand:: Turn off variable assignment and noweb
expansion during tangling
* session:: Preserve the state of code evaluation * session:: Preserve the state of code evaluation
* noweb:: Toggle expansion of noweb references * noweb:: Toggle expansion of noweb references
* cache:: Avoid re-evaluating unchanged code blocks * cache:: Avoid re-evaluating unchanged code blocks
@ -452,6 +458,7 @@ Specific header arguments
* colnames:: Handle column names in tables * colnames:: Handle column names in tables
* rownames:: Handle row names in tables * rownames:: Handle row names in tables
* shebang:: Make tangled files executable * shebang:: Make tangled files executable
* eval:: Limit evaluation of specific code blocks
Miscellaneous Miscellaneous
@ -8818,12 +8825,9 @@ is a macro system based on Donald E. Knuth's @TeX{} system. Many of the
features described here as ``La@TeX{}'' are really from @TeX{}, but for features described here as ``La@TeX{}'' are really from @TeX{}, but for
simplicity I am blurring this distinction.} is widely used to typeset simplicity I am blurring this distinction.} is widely used to typeset
scientific documents. Org-mode supports embedding La@TeX{} code into its scientific documents. Org-mode supports embedding La@TeX{} code into its
files, because many academics are used to reading La@TeX{} source code, and files, because many academics are used to writing and reading La@TeX{} source
because it can be readily processed into images for HTML production. code, and because it can be readily processed to produce pretty output for a
number of export backends.
It is not necessary to mark La@TeX{} macros and code in any special way.
If you observe a few conventions, Org-mode knows how to find it and what
to do with it.
@menu @menu
* Special symbols:: Greek letters and other symbols * Special symbols:: Greek letters and other symbols
@ -8867,7 +8871,7 @@ La@TeX{}, see the variable @code{org-entities} for the complete list.
@samp{...} are all converted into special commands creating hyphens of @samp{...} are all converted into special commands creating hyphens of
different lengths or a compact set of dots. different lengths or a compact set of dots.
If you would like to see entities displayed as utf8 characters, use the If you would like to see entities displayed as UTF8 characters, use the
following command@footnote{You can turn this on by default by setting the following command@footnote{You can turn this on by default by setting the
variable @code{org-pretty-entities}, or on a per-file base with the variable @code{org-pretty-entities}, or on a per-file base with the
@code{#+STARTUP} option @code{entitiespretty}.}: @code{#+STARTUP} option @code{entitiespretty}.}:
@ -8908,6 +8912,9 @@ convention, or use, on a per-file basis:
#+OPTIONS: ^:@{@} #+OPTIONS: ^:@{@}
@end example @end example
@noindent With this setting, @samp{a_b} will not be interpreted as a
subscript, but @samp{a_@{b@}} will.
@table @kbd @table @kbd
@kindex C-c C-x \ @kindex C-c C-x \
@item C-c C-x \ @item C-c C-x \
@ -8920,31 +8927,31 @@ format sub- and superscripts in a WYSIWYM way.
@cindex La@TeX{} fragments @cindex La@TeX{} fragments
@vindex org-format-latex-header @vindex org-format-latex-header
With symbols, sub- and superscripts, HTML is pretty much at its end when Going beyond symbols and sub- and superscripts, a full formula language is
it comes to representing mathematical formulas@footnote{Yes, there is needed. Org-mode can contain La@TeX{} math fragments, and it supports ways
MathML, but that is not yet fully supported by many browsers, and there to process these for several export backends. When exporting to La@TeX{},
is no decent converter for turning La@TeX{} or ASCII representations of the code is obviously left as it is. When exporting to HTML, Org invokes the
formulas into MathML. So for the time being, converting formulas into @uref{http://www.mathjax.org, MathJax library} (@pxref{Math formatting in
images seems the way to go.}. More complex expressions need a dedicated HTML export}) to process and display the math@footnote{If you plan to use
formula processor. To this end, Org-mode can contain arbitrary La@TeX{} this regularly or on pages with significant page views, you should install
fragments. It provides commands to preview the typeset result of these @file{MathJax} on your own server in order to limit the load of our server.}.
fragments, and upon export to HTML, all fragments will be converted to Finally, it can also process the mathematical expressions into
images and inlined into the HTML document@footnote{The La@TeX{} export images@footnote{For this to work you need to be on a system with a working
will not use images for displaying La@TeX{} fragments but include these La@TeX{} installation. You also need the @file{dvipng} program, available at
fragments directly into the La@TeX{} code.}. For this to work you @url{http://sourceforge.net/projects/dvipng/}. The La@TeX{} header that will
need to be on a system with a working La@TeX{} installation. You also be used when processing a fragment can be configured with the variable
need the @file{dvipng} program, available at @code{org-format-latex-header}.} that can be displayed in a browser or in
@url{http://sourceforge.net/projects/dvipng/}. The La@TeX{} header that DocBook documents.
will be used when processing a fragment can be configured with the
variable @code{org-format-latex-header}.
La@TeX{} fragments don't need any special marking at all. The following La@TeX{} fragments don't need any special marking at all. The following
snippets will be identified as La@TeX{} source code: snippets will be identified as La@TeX{} source code:
@itemize @bullet @itemize @bullet
@item @item
Environments of any kind. The only requirement is that the Environments of any kind@footnote{When @file{MathJax} is used, only the
@code{\begin} statement appears on a new line, preceded by only environment recognized by @file{MathJax} will be processed. When dvipng is
whitespace. used to create images, any La@TeX{} environments will be handled.}. The only
requirement is that the @code{\begin} statement appears on a new line,
preceded by only whitespace.
@item @item
Text within the usual La@TeX{} math delimiters. To avoid conflicts with Text within the usual La@TeX{} math delimiters. To avoid conflicts with
currency specifications, single @samp{$} characters are only recognized as currency specifications, single @samp{$} characters are only recognized as
@ -8972,12 +8979,26 @@ If you need any of the delimiter ASCII sequences for other purposes, you
can configure the option @code{org-format-latex-options} to deselect the can configure the option @code{org-format-latex-options} to deselect the
ones you do not wish to have interpreted by the La@TeX{} converter. ones you do not wish to have interpreted by the La@TeX{} converter.
@vindex org-export-with-LaTeX-fragments
LaTeX processing can be configured with the variable
@code{org-export-with-LaTeX-fragments}. The default setting is @code{t}
which means @file{MathJax} for HTML, and no processing for DocBook, ASCII and
LaTeX backends. You can also set this variable on a per-file basis using one
of these lines:
@example
#+OPTIONS: LaTeX:t @r{Do the right thing automatically (MathJax)}
#+OPTIONS: LaTeX:dvipng @r{Force using dvipng images}
#+OPTIONS: LaTeX:nil @r{Do not process La@TeX{} fragments at all}
#+OPTIONS: LaTeX:verbatim @r{Verbatim export, for jsMath or so}
@end example
@node Previewing LaTeX fragments, CDLaTeX mode, LaTeX fragments, Embedded LaTeX @node Previewing LaTeX fragments, CDLaTeX mode, LaTeX fragments, Embedded LaTeX
@subsection Previewing LaTeX fragments @subsection Previewing LaTeX fragments
@cindex LaTeX fragments, preview @cindex LaTeX fragments, preview
La@TeX{} fragments can be processed to produce preview images of the If you have @file{dvipng} installed, La@TeX{} fragments can be processed to
typeset expressions: produce preview images of the typeset expressions:
@table @kbd @table @kbd
@kindex C-c C-x C-l @kindex C-c C-x C-l
@ -8999,14 +9020,6 @@ some aspects of the preview. In particular, the @code{:scale} (and for HTML
export, @code{:html-scale}) property can be used to adjust the size of the export, @code{:html-scale}) property can be used to adjust the size of the
preview images. preview images.
During HTML export (@pxref{HTML export}), all La@TeX{} fragments are
converted into images and inlined into the document if the following
setting is active:
@lisp
(setq org-export-with-LaTeX-fragments t)
@end lisp
@node CDLaTeX mode, , Previewing LaTeX fragments, Embedded LaTeX @node CDLaTeX mode, , Previewing LaTeX fragments, Embedded LaTeX
@subsection Using CDLa@TeX{} to enter math @subsection Using CDLa@TeX{} to enter math
@cindex CDLa@TeX{} @cindex CDLa@TeX{}
@ -9224,7 +9237,7 @@ tags: @r{turn on/off inclusion of tags, may also be @code{not-in-toc}}
<: @r{turn on/off inclusion of any time/date stamps like DEADLINES} <: @r{turn on/off inclusion of any time/date stamps like DEADLINES}
*: @r{turn on/off emphasized text (bold, italic, underlined)} *: @r{turn on/off emphasized text (bold, italic, underlined)}
TeX: @r{turn on/off simple @TeX{} macros in plain text} TeX: @r{turn on/off simple @TeX{} macros in plain text}
LaTeX: @r{turn on/off La@TeX{} fragments} LaTeX: @r{configure export of La@TeX{} fragments. Default @code{auto}}
skip: @r{turn on/off skipping the text before the first heading} skip: @r{turn on/off skipping the text before the first heading}
author: @r{turn on/off inclusion of author name/email into exported file} author: @r{turn on/off inclusion of author name/email into exported file}
email: @r{turn on/off inclusion of author email into exported file} email: @r{turn on/off inclusion of author email into exported file}
@ -9357,6 +9370,7 @@ language, but with additional support for tables.
* Links in HTML export:: How links will be interpreted and formatted * Links in HTML export:: How links will be interpreted and formatted
* Tables in HTML export:: How to modify the formatting of tables * Tables in HTML export:: How to modify the formatting of tables
* Images in HTML export:: How to insert figures into HTML output * Images in HTML export:: How to insert figures into HTML output
* Math formatting in HTML export:: Beautiful math also on the web
* Text areas in HTML export:: An alternative way to show an example * Text areas in HTML export:: An alternative way to show an example
* CSS support:: Changing the appearance of the output * CSS support:: Changing the appearance of the output
* JavaScript support:: Info and Folding in a web browser * JavaScript support:: Info and Folding in a web browser
@ -9492,7 +9506,7 @@ tables, place something like the following before the table:
#+ATTR_HTML: border="2" rules="all" frame="all" #+ATTR_HTML: border="2" rules="all" frame="all"
@end example @end example
@node Images in HTML export, Text areas in HTML export, Tables in HTML export, HTML export @node Images in HTML export, Math formatting in HTML export, Tables in HTML export, HTML export
@subsection Images in HTML export @subsection Images in HTML export
@cindex images, inline in HTML @cindex images, inline in HTML
@ -9529,7 +9543,41 @@ support text viewers and accessibility, and align it to the right.
@noindent @noindent
and you could use @code{http} addresses just as well. and you could use @code{http} addresses just as well.
@node Text areas in HTML export, CSS support, Images in HTML export, HTML export @node Math formatting in HTML export, Text areas in HTML export, Images in HTML export, HTML export
@subsection Math formatting in HTML export
@cindex MathJax
@cindex dvipng
La@TeX{} 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 @code{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 MathJax on your own server in order to limit
the load of our server.} To configure @file{MathJax}, use the variable
@code{org-export-html-mathjax-options} or insert something like the following
into the buffer:
@example
#+MATHJAX: align:"left" mathml:t path:"/MathJax/MathJax.js"
@end example
@noindent See the docstring of the variable
@code{org-export-html-mathjax-options} for the meaning of the parameters in
this line.
If you prefer, you can also request that La@TeX{} are processed into small
images that will be inserted into the browser page. Before the availability
of MathJax, this was the default method for Org files. This method requires
that the @file{dvipng} program is available on your system. You can still
get this processing with
@example
#+OPTIONS: LaTeX:dvipng
@end example
@node Text areas in HTML export, CSS support, Math formatting in HTML export, HTML export
@subsection Text areas in HTML export @subsection Text areas in HTML export
@cindex text areas, in HTML @cindex text areas, in HTML
@ -11455,10 +11503,10 @@ The following header arguments are defined:
directory for code block execution directory for code block execution
* exports:: Export code and/or results * exports:: Export code and/or results
* tangle:: Toggle tangling and specify file name * tangle:: Toggle tangling and specify file name
* no-expand:: Turn off variable assignment and noweb
expansion during tangling
* comments:: Toggle insertion of comments in tangled * comments:: Toggle insertion of comments in tangled
code files code files
* no-expand:: Turn off variable assignment and noweb
expansion during tangling
* session:: Preserve the state of code evaluation * session:: Preserve the state of code evaluation
* noweb:: Toggle expansion of noweb references * noweb:: Toggle expansion of noweb references
* cache:: Avoid re-evaluating unchanged code blocks * cache:: Avoid re-evaluating unchanged code blocks

View File

@ -471,20 +471,34 @@ This option can also be set with the +OPTIONS line, e.g. \"TeX:nil\"."
:group 'org-export-latex :group 'org-export-latex
:type 'boolean) :type 'boolean)
(defcustom org-export-with-LaTeX-fragments nil (defcustom org-export-with-LaTeX-fragments t
"Non-nil means convert LaTeX fragments to images when exporting to HTML. "Non-nil means process LaTeX math fragments for HTML display.
When set, the exporter will find LaTeX environments if the \\begin line is When set, the exporter will find and process LaTeX environments if the
the first non-white thing on a line. It will also find the math delimiters \\begin line is the first non-white thing on a line. It will also find
like $a=b$ and \\( a=b \\) for inline math, $$a=b$$ and \\[ a=b \\] for and process the math delimiters like $a=b$ and \\( a=b \\) for inline math,
display math. $$a=b$$ and \\[ a=b \\] for display math.
This option can also be set with the +OPTIONS line, e.g. \"LaTeX:t\". This option can also be set with the +OPTIONS line, e.g. \"LaTeX:mathjax\".
Allowed values are:
nil Don't do anything.
verbatim Keep eveything in verbatim
dvipng Process the LaTeX fragments to images.
This will also include processing of non-math environments.
t Do MathJax preprocessing if there is at least on math snippet,
and arrange for MathJax.js to be loaded.
The default is nil, because this option needs the `dvipng' program which The default is nil, because this option needs the `dvipng' program which
is not available on all systems." is not available on all systems."
:group 'org-export-translation :group 'org-export-translation
:group 'org-export-latex :group 'org-export-latex
:type 'boolean) :type '(choice
(const :tag "Do not process math in any way" nil)
(const :tag "Obsolete, use dvipng setting" t)
(const :tag "Use dvipng to make images" dvipng)
(const :tag "Use MathJax to display math" mathjax)
(const :tag "Leave math verbatim" verbatim)))
(defcustom org-export-with-fixed-width t (defcustom org-export-with-fixed-width t
"Non-nil means lines starting with \":\" will be in fixed width font. "Non-nil means lines starting with \":\" will be in fixed width font.
@ -675,12 +689,13 @@ modified) list.")
(let ((re (org-make-options-regexp (let ((re (org-make-options-regexp
(append (append
'("TITLE" "AUTHOR" "DATE" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE" '("TITLE" "AUTHOR" "DATE" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE"
"MATHJAX"
"LINK_UP" "LINK_HOME" "SETUPFILE" "STYLE" "LINK_UP" "LINK_HOME" "SETUPFILE" "STYLE"
"LATEX_HEADER" "LATEX_CLASS" "LATEX_HEADER" "LATEX_CLASS"
"EXPORT_SELECT_TAGS" "EXPORT_EXCLUDE_TAGS" "EXPORT_SELECT_TAGS" "EXPORT_EXCLUDE_TAGS"
"KEYWORDS" "DESCRIPTION" "MACRO" "BIND" "XSLT") "KEYWORDS" "DESCRIPTION" "MACRO" "BIND" "XSLT")
(mapcar 'car org-export-inbuffer-options-extra)))) (mapcar 'car org-export-inbuffer-options-extra))))
p key val text options a pr style p key val text options mathjax a pr style
latex-header latex-class macros letbind latex-header latex-class macros letbind
ext-setup-or-nil setup-contents (start 0)) ext-setup-or-nil setup-contents (start 0))
(while (or (and ext-setup-or-nil (while (or (and ext-setup-or-nil
@ -712,6 +727,8 @@ modified) list.")
(setq text (if text (concat text "\n" val) val))) (setq text (if text (concat text "\n" val) val)))
((string-equal key "OPTIONS") ((string-equal key "OPTIONS")
(setq options (concat val " " options))) (setq options (concat val " " options)))
((string-equal key "MATHJAX")
(setq mathjax (concat val " " mathjax)))
((string-equal key "BIND") ((string-equal key "BIND")
(push (read (concat "(" val ")")) letbind)) (push (read (concat "(" val ")")) letbind))
((string-equal key "XSLT") ((string-equal key "XSLT")
@ -748,6 +765,8 @@ modified) list.")
(setq p (plist-put p :latex-class latex-class))) (setq p (plist-put p :latex-class latex-class)))
(when options (when options
(setq p (org-export-add-options-to-plist p options))) (setq p (org-export-add-options-to-plist p options)))
(when mathjax
(setq p (plist-put p :mathjax mathjax)))
;; Add macro definitions ;; Add macro definitions
(setq p (plist-put p :macro-date "(eval (format-time-string \"$1\"))")) (setq p (plist-put p :macro-date "(eval (format-time-string \"$1\"))"))
(setq p (plist-put p :macro-time "(eval (format-time-string \"$1\"))")) (setq p (plist-put p :macro-time "(eval (format-time-string \"$1\"))"))

View File

@ -209,6 +209,112 @@ settings with <style>...</style> tags."
;;;###autoload ;;;###autoload
(put 'org-export-html-style-extra 'safe-local-variable 'stringp) (put 'org-export-html-style-extra 'safe-local-variable 'stringp)
(defcustom org-export-html-mathjax-options
'((path "http://orgmode.org/mathjax/MathJax.js")
(scale "100")
(align "center")
(indent "2em")
(mathml nil))
"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.
You can also customize this for each buffer, using something like
#+MATHJAX: scale:\"133\" align:\"right\" mathml:t path:\"/MathJax/\""
: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))))
(defun org-export-html-mathjax-config (template options in-buffer)
"Insert the user setup into the matchjax template."
(let (name val (yes " ") (no "// ") 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))))
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
template))
(defcustom org-export-html-mathjax-template
"<script type=\"text/javascript\" src=\"%PATH\">
<!--/*--><![CDATA[/*><!--*/
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: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ],
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\"
}
}
});
/*]]>*///-->
</script>"
"The MathJax setup for XHTML files."
:group 'org-export-html
:type 'string)
(defcustom org-export-html-tag-class-prefix "" (defcustom org-export-html-tag-class-prefix ""
"Prefix to class names for TODO keywords. "Prefix to class names for TODO keywords.
Each tag gets a class given by the tag itself, with this prefix. Each tag gets a class given by the tag itself, with this prefix.
@ -439,7 +545,13 @@ This may also be a function, building and inserting the postamble.")
(file-name-nondirectory (file-name-nondirectory
org-current-export-file))) org-current-export-file)))
org-current-export-dir nil "Creating LaTeX image %s" org-current-export-dir nil "Creating LaTeX image %s"
nil nil (eq (plist-get parameters :LaTeX-fragments) 'verbatim))) nil nil
(cond
((eq (plist-get parameters :LaTeX-fragments) 'verbatim) 'verbatim)
((eq (plist-get parameters :LaTeX-fragments) 'mathjax ) 'mathjax)
((eq (plist-get parameters :LaTeX-fragments) t ) 'mathjax)
((eq (plist-get parameters :LaTeX-fragments) 'dvipng ) 'dvipng)
(t nil))))
(goto-char (point-min)) (goto-char (point-min))
(let (label l1) (let (label l1)
(while (re-search-forward "\\\\ref{\\([^{}\n]+\\)}" nil t) (while (re-search-forward "\\\\ref{\\([^{}\n]+\\)}" nil t)
@ -812,6 +924,7 @@ PUB-DIR is set, use this as the publishing directory."
(buffer-substring (buffer-substring
(if region-p (region-beginning) (point-min)) (if region-p (region-beginning) (point-min))
(if region-p (region-end) (point-max)))) (if region-p (region-end) (point-max))))
(org-export-have-math nil)
(lines (lines
(org-split-string (org-split-string
(org-export-preprocess-string (org-export-preprocess-string
@ -835,6 +948,16 @@ PUB-DIR is set, use this as the publishing directory."
:LaTeX-fragments :LaTeX-fragments
(plist-get opt-plist :LaTeX-fragments)) (plist-get opt-plist :LaTeX-fragments))
"[\r\n]")) "[\r\n]"))
(mathjax
(if (or (eq (plist-get opt-plist :LaTeX-fragments) 'mathjax)
(and org-export-have-math
(eq (plist-get opt-plist :LaTeX-fragments) t)))
(org-export-html-mathjax-config
org-export-html-mathjax-template
org-export-html-mathjax-options
(or (plist-get opt-plist :mathjax) ""))
""))
table-open type table-open type
table-buffer table-orig-buffer table-buffer table-orig-buffer
ind item-type starter didclose ind item-type starter didclose
@ -904,6 +1027,7 @@ lang=\"%s\" xml:lang=\"%s\">
<meta name=\"description\" content=\"%s\"/> <meta name=\"description\" content=\"%s\"/>
<meta name=\"keywords\" content=\"%s\"/> <meta name=\"keywords\" content=\"%s\"/>
%s %s
%s
</head> </head>
<body> <body>
<div id=\"content\"> <div id=\"content\">
@ -922,6 +1046,7 @@ lang=\"%s\" xml:lang=\"%s\">
(or charset "iso-8859-1") (or charset "iso-8859-1")
date author description keywords date author description keywords
style style
mathjax
(if (or link-up link-home) (if (or link-up link-home)
(concat (concat
(format org-export-html-home/up-format (format org-export-html-home/up-format

View File

@ -15880,7 +15880,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(concat "ltxpng/" (file-name-sans-extension (concat "ltxpng/" (file-name-sans-extension
(file-name-nondirectory (file-name-nondirectory
buffer-file-name))) buffer-file-name)))
default-directory 'overlays msg at 'forbuffer) default-directory 'overlays msg at 'forbuffer 'dvipng)
(message msg "done. Use `C-c C-c' to remove images."))))) (message msg "done. Use `C-c C-c' to remove images.")))))
(defvar org-latex-regexps (defvar org-latex-regexps
@ -15894,8 +15894,9 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil)) ("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil))
"Regular expressions for matching embedded LaTeX.") "Regular expressions for matching embedded LaTeX.")
(defvar org-export-have-math nil) ;; dynamic scoping
(defun org-format-latex (prefix &optional dir overlays msg at (defun org-format-latex (prefix &optional dir overlays msg at
forbuffer protect-only) forbuffer processing-type)
"Replace LaTeX fragments with links to an image, and produce images. "Replace LaTeX fragments with links to an image, and produce images.
Some of the options can be changed using the variable Some of the options can be changed using the variable
`org-format-latex-options'." `org-format-latex-options'."
@ -15909,7 +15910,7 @@ Some of the options can be changed using the variable
(org-format-latex-header-extra (org-format-latex-header-extra
(plist-get (org-infile-export-plist) :latex-header-extra)) (plist-get (org-infile-export-plist) :latex-header-extra))
(cnt 0) txt hash link beg end re e checkdir (cnt 0) txt hash link beg end re e checkdir
executables-checked executables-checked string
m n block linkfile movefile ov) m n block linkfile movefile ov)
;; Check the different regular expressions ;; Check the different regular expressions
(while (setq e (pop re-list)) (while (setq e (pop re-list))
@ -15925,9 +15926,26 @@ Some of the options can be changed using the variable
(not (eq (get-char-property (match-beginning n) (not (eq (get-char-property (match-beginning n)
'org-overlay-type) 'org-overlay-type)
'org-latex-overlay)))) 'org-latex-overlay))))
(if protect-only (setq org-export-have-math t)
(cond
((eq processing-type 'verbatim)
;; Leave the text verbatim, just protect it
(add-text-properties (match-beginning n) (match-end n) (add-text-properties (match-beginning n) (match-end n)
'(org-protected t)) '(org-protected t)))
((eq processing-type 'mathjax)
;; Prepare for MathJax processing
(setq string (match-string n))
(if (equal m "$")
(save-excursion
(delete-region (match-beginning n) (match-end n))
(goto-char (match-beginning n))
(insert (org-add-props (concat "\\(" (substring string 1 -1)
"\\)")
'(org-protected t))))
(add-text-properties (match-beginning n) (match-end n)
'(org-protected t))))
((or (eq processing-type 'dvipng) t)
;; Process to an image
(setq txt (match-string n) (setq txt (match-string n)
beg (match-beginning n) end (match-end n) beg (match-beginning n) end (match-end n)
cnt (1+ cnt)) cnt (1+ cnt))
@ -15981,7 +15999,8 @@ Some of the options can be changed using the variable
(delete-region beg end) (delete-region beg end)
(insert (org-add-props link (insert (org-add-props link
(list 'org-latex-src (list 'org-latex-src
(replace-regexp-in-string "\"" "" txt)))))))))))) (replace-regexp-in-string
"\"" "" txt)))))))))))))
;; This function borrows from Ganesh Swami's latex2png.el ;; This function borrows from Ganesh Swami's latex2png.el
(defun org-create-formula-image (string tofile options buffer) (defun org-create-formula-image (string tofile options buffer)
@ -17650,14 +17669,6 @@ See the individual commands for more information."
(org-inside-LaTeX-fragment-p)] (org-inside-LaTeX-fragment-p)]
["Insert citation" org-reftex-citation t] ["Insert citation" org-reftex-citation t]
"--" "--"
["Export LaTeX fragments as images"
(if (featurep 'org-exp)
(setq org-export-with-LaTeX-fragments
(not org-export-with-LaTeX-fragments))
(require 'org-exp))
:style toggle :selected (and (boundp 'org-export-with-LaTeX-fragments)
org-export-with-LaTeX-fragments)]
"--"
["Template for BEAMER" org-insert-beamer-options-template t]) ["Template for BEAMER" org-insert-beamer-options-template t])
"--" "--"
("MobileOrg" ("MobileOrg"