diff options
author | Matt Huszagh <huszaghmatt@gmail.com> | 2020-02-16 16:52:02 -0800 |
---|---|---|
committer | Bastien <bzg@gnu.org> | 2020-02-24 11:16:01 +0100 |
commit | 860cfe7f139779466eb9f5b02229172340660d58 (patch) | |
tree | 358d6bfedbfb9ed013289aa80295fcef9d661f34 | |
parent | 14a56eb915da06b001c811ad6c23727b75bb58aa (diff) | |
download | org-mode-860cfe7f139779466eb9f5b02229172340660d58.tar.gz |
Add an option to convert LaTeX fragments to HTML
* lisp/org.el (org-latex-to-html-convert-command): New option to
convert a LaTeX fragment directly into HTML.
(org-format-latex): Use the new option.
(org-format-latex-as-html): Do the conversion and return HTML.
* lisp/ox-html.el (org-html-with-latex): Document the 'html symbol.
(org-html-format-latex): This custom HTML conversion, like MathJax,
doesn't require preprocessing.
(org-html-latex-fragment): Use the new option.
This allows you to set a custom command
`org-latex-to-html-convert-command' that will take as input a LaTeX
fragment and use it to generate HTML for export. This is very
open-ended in the sense that you can use any shell-command you
want. This has been added in order to use latexml, but you could
use any other tool that generates HTML output text.
-rw-r--r-- | lisp/org.el | 29 | ||||
-rw-r--r-- | lisp/ox-html.el | 9 |
2 files changed, 36 insertions, 2 deletions
diff --git a/lisp/org.el b/lisp/org.el index 8b88744..dafdc99 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -3198,6 +3198,22 @@ When using LaTeXML set this option to (const :tag "None" nil) (string :tag "\nShell command"))) +(defcustom org-latex-to-html-convert-command nil + "Command to convert LaTeX fragments to HTML. +This command is very open-ended: the output of the command will +directly replace the LaTeX fragment in the resulting HTML. +Replace format-specifiers in the command as noted below and use +`shell-command' to convert LaTeX to HTML. +%i: The LaTeX fragment to be converted. + +For example, this could be used with LaTeXML as +\"latexmlc 'literal:%i' --profile=math --preload=siunitx.sty 2>/dev/null\"." + :group 'org-latex + :package-version '(Org . "9.5") + :type '(choice + (const :tag "None" nil) + (string :tag "\nShell command"))) + (defcustom org-preview-latex-default-process 'dvipng "The default process to convert LaTeX fragments to image files. All available processes and theirs documents can be found in @@ -15617,6 +15633,10 @@ Some of the options can be changed using the variable (if (string= (match-string 0 value) "$$") (insert "\\[" (substring value 2 -2) "\\]") (insert "\\(" (substring value 1 -1) "\\)")))) + ((eq processing-type 'html) + (goto-char beg) + (delete-region beg end) + (insert (org-format-latex-as-html value))) ((assq processing-type org-preview-latex-process-alist) ;; Process to an image. (cl-incf cnt) @@ -15782,6 +15802,15 @@ inspection." ;; Failed conversion. Return the LaTeX fragment verbatim latex-frag))) +(defun org-format-latex-as-html (latex-frag) + "Convert LaTeX to HTML with a custom conversion command. +`LATEX-FRAG' is the latex fragment +Set the custom command with `org-latex-to-html-convert-command'." + (let ((cmd (format-spec org-latex-to-html-convert-command + `((?i . ,latex-frag))))) + (message "Running %s" cmd) + (setq shell-command-output (shell-command-to-string cmd)))) + (defun org--get-display-dpi () "Get the DPI of the display. The function assumes that the display has the same pixel width in diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 602c539..319f178 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -775,6 +775,8 @@ e.g. \"tex:mathjax\". Allowed values are: `verbatim' Keep everything in verbatim `mathjax', t Do MathJax preprocessing and arrange for MathJax.js to be loaded. + `html' Use `org-latex-to-html-convert-command' to convert + LaTeX fragments to HTML. SYMBOL Any symbol defined in `org-preview-latex-process-alist', e.g., `dvipng'." :group 'org-export-html @@ -2769,12 +2771,13 @@ CONTENTS is nil. INFO is a plist holding contextual information." (defun org-html-format-latex (latex-frag processing-type info) "Format a LaTeX fragment LATEX-FRAG into HTML. PROCESSING-TYPE designates the tool used for conversion. It can -be `mathjax', `verbatim', nil, t or symbols in +be `mathjax', `verbatim', `html', nil, t or symbols in `org-preview-latex-process-alist', e.g., `dvipng', `dvisvgm' or `imagemagick'. See `org-html-with-latex' for more information. INFO is a plist containing export properties." (let ((cache-relpath "") (cache-dir "")) - (unless (eq processing-type 'mathjax) + (unless (or (eq processing-type 'mathjax) + (eq processing-type 'html)) (let ((bfn (or (buffer-file-name) (make-temp-name (expand-file-name "latex" temporary-file-directory)))) @@ -2888,6 +2891,8 @@ CONTENTS is nil. INFO is a plist holding contextual information." (cond ((memq processing-type '(t mathjax)) (org-html-format-latex latex-frag 'mathjax info)) + ((memq processing-type '(t html)) + (org-html-format-latex latex-frag 'html info)) ((assq processing-type org-preview-latex-process-alist) (let ((formula-link (org-html-format-latex latex-frag processing-type info))) |