Added --webtex option for HTML math.

+ Added --webtex command-line option, with optional parameter.
  (Defaults to using google charts API.)
+ Added WebTeX HTMLMathMethod.
+ Removed MimeTeX HTMLMathMethod.  (WebTeX is generic and subsumes it.)
+ Modified --mimetex option to use WebTeX.
+ Thanks to lpeterse for the idea and some of the code.
This commit is contained in:
John MacFarlane 2010-07-15 19:01:00 -07:00
parent 8757da76b0
commit 57a91f3b6a
6 changed files with 70 additions and 30 deletions

30
README
View file

@ -351,8 +351,8 @@ For further documentation, see the `pandoc(1)` man page.
directly; this provides portability at the price of efficiency. If
you plan to use math on several pages, it is much better to link to
a copy of `LaTeXMathML.js`, which can be cached. (See `--jsmath`,
`--gladtex`, and `--mimetex` for alternative ways of dealing with
math in HTML.)
`--gladtex`, `--webtex`, and `--mimetex` for alternative ways of
dealing with math in HTML.)
`--mathml`
: causes `pandoc` to convert all TeX math to MathML.
@ -364,21 +364,29 @@ For further documentation, see the `pandoc(1)` man page.
TeX math in HTML, Slidy, or S5. The *url* should point to the jsMath
load script (e.g. `jsMath/easy/load.js`). If it is provided, a link
to it will be included in the header of standalone HTML documents.
(See `--latexmathml`, `--mimetex`, and `--gladtex` for alternative
ways of dealing with math in HTML.)
(See `--latexmathml`, `--mimetex`, `--webtex`, and `--gladtex` for
alternative ways of dealing with math in HTML.)
`--gladtex`*[=url]*
: causes TeX formulas to be enclosed in `<eq>` tags in HTML, Slidy, or
S5 output. This output can then be processed by [gladTeX] to produce
links to images with the typeset formulas. (See `--latexmathml`,
`--jsmath`, and `--mimetex` for alternative ways of dealing with
math in HTML.)
`--jsmath`, `--webtex`, and `--mimetex` for alternative ways of
dealing with math in HTML.)
`--mimetex`*[=url]*
: causes TeX formulas to be replaced by `<img>` tags linking to the
[mimeTeX] CGI script, which will produce images with the typeset
formulas. (See `--latexmathml`, `--jsmath`, and `--gladtex` for alternative
ways of dealing with math in HTML.)
formulas. (See `--latexmathml`, `--jsmath`, `--webtex`, and
`--gladtex` for alternative ways of dealing with math in HTML.)
`--webtex`*[=url]*
: causes TeX formulas to be replaced by `<img>` tags linking to an
external service that converts TeX formulas to images. The formula
will be concatenated with the URL provided. If no URL
is specified, the Google Chart API is used. (See `--latexmathml`,
`--jsmath`, `--mimetex`, and `--gladtex` for alternative ways of
dealing with math in HTML.)
`-i` or `--incremental`
: causes all lists in Slidy or S5 output to be displayed incrementally by
@ -1241,6 +1249,12 @@ command-line options selected:
gladtex -d myfile-images myfile.htex
# produces myfile.html and images in myfile-images
6. If the `--webtex` option is used, TeX formulas will be converted
to `<img>` tags that link to an external script that converts
formulas to images. The formula will be URL-encoded and concatenated
with the URL provided. If no URL is specified, the Google Chart
API will be used (`http://chart.apis.google.com/chart?cht=tx&chl=`).
Inline TeX
----------

View file

@ -136,6 +136,11 @@ should pipe input and output through `iconv`:
: Render TeX math using the mimeTeX CGI script. If *URL* is not specified,
it is assumed that the script is at `/cgi-bin/mimetex.cgi`.
\--webtex=*URL*
: Render TeX math using an external script. The formula will be
concatenated with the URL provided. If *URL* is not specified, the
Google Chart API will be used.
-i, \--incremental
: Make list items in Slidy or S5 display incrementally (one by one).

View file

@ -457,7 +457,7 @@ data HTMLMathMethod = PlainMath
| LaTeXMathML (Maybe String) -- url of LaTeXMathML.js
| JsMath (Maybe String) -- url of jsMath load script
| GladTeX
| MimeTeX String -- url of mimetex.cgi
| WebTeX String -- url of TeX->image script.
| MathML (Maybe String) -- url of MathMLinHTML.js
deriving (Show, Read, Eq)

View file

@ -36,6 +36,7 @@ import Text.Pandoc.Templates
import Text.Pandoc.Readers.TeXMath
import Text.Pandoc.Highlighting ( highlightHtml )
import Text.Pandoc.XML (stripTags, escapeStringForXML)
import Network.HTTP ( urlEncode )
import Numeric ( showHex )
import Data.Char ( ord, toLower )
import Data.List ( isPrefixOf, intersperse )
@ -462,16 +463,20 @@ inlineToHtml opts inline =
-- non-math elements on the page from being treated as math by
-- the javascript
return $ thespan ! [theclass "LaTeX"] $
if t == InlineMath
then primHtml ("$" ++ str ++ "$")
else primHtml ("$$" ++ str ++ "$$")
JsMath _ ->
return $ if t == InlineMath
then thespan ! [theclass "math"] $ primHtml str
else thediv ! [theclass "math"] $ primHtml str
MimeTeX url ->
return $ image ! [src (url ++ "?" ++ str),
case t of
InlineMath -> primHtml ("$" ++ str ++ "$")
DisplayMath -> primHtml ("$$" ++ str ++ "$$")
JsMath _ -> do
let m = primHtml str
return $ case t of
InlineMath -> thespan ! [theclass "math"] $ m
DisplayMath -> thediv ! [theclass "math"] $ m
WebTeX url -> do
let m = image ! [src (url ++ urlEncode str),
alt str, title str]
return $ case t of
InlineMath -> m
DisplayMath -> br +++ m +++ br
GladTeX ->
return $ primHtml $ "<EQ>" ++ str ++ "</EQ>"
MathML _ -> do
@ -484,12 +489,14 @@ inlineToHtml opts inline =
Right r -> return $ primHtml $
ppcElement conf r
Left _ -> inlineListToHtml opts
(readTeXMath str) >>=
return . (thespan !
[theclass "math"])
PlainMath ->
inlineListToHtml opts (readTeXMath str) >>=
return . (thespan ! [theclass "math"]) )
(readTeXMath str) >>= return .
(thespan ! [theclass "math"])
PlainMath -> do
x <- inlineListToHtml opts (readTeXMath str)
let m = thespan ! [theclass "math"] $ x
return $ case t of
InlineMath -> m
DisplayMath -> br +++ m +++ br )
(TeX str) -> case writerHTMLMathMethod opts of
LaTeXMathML _ -> do modify (\st -> st {stMath = True})
return $ primHtml str

View file

@ -40,7 +40,6 @@ import System.Environment ( getArgs, getProgName, getEnvironment )
import System.Exit ( exitWith, ExitCode (..) )
import System.FilePath
import System.Console.GetOpt
import Data.Maybe ( fromMaybe )
import Data.Char ( toLower, isDigit )
import Data.List ( intercalate, isSuffixOf )
import System.Directory ( getAppUserDataDirectory )
@ -282,11 +281,24 @@ options =
, Option "" ["mimetex"]
(OptArg
(\arg opt -> return opt { optHTMLMathMethod = MimeTeX
(fromMaybe "/cgi-bin/mimetex.cgi" arg)})
(\arg opt -> do
let url = case arg of
Just u -> u ++ "?"
Nothing -> "/cgi-bin/mimetex.cgi?"
return opt { optHTMLMathMethod = WebTeX url })
"URL")
"" -- "Use mimetex for HTML math"
, Option "" ["webtex"]
(OptArg
(\arg opt -> do
let url = case arg of
Just u -> u
Nothing -> "http://chart.apis.google.com/chart?cht=tx&chl="
return opt { optHTMLMathMethod = WebTeX url })
"URL")
"" -- "Use web service for HTML math"
, Option "" ["jsmath"]
(OptArg
(\arg opt -> return opt { optHTMLMathMethod = JsMath arg})

View file

@ -855,9 +855,11 @@ Blah
></span
>-Tree</li
><li
>Heres some display math: <span class="math"
>Heres some display math: <br
/><span class="math"
>$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span
></li
><br
/></li
><li
>Heres one that has a line break in it: <span class="math"
>α+ ω × <em