tex2imgsrc: (La)TeX expression to <img src...>

Script here: tex2imgsrc

What's this? / なにするものぞ

Convert \LaTeX coded sentences to image file and output <img src="..."> notation to standard output. It's very handy to write formulas in HTML especially with SSI. This script is for the people who are disappointed to MathML because of its terrible complexity.

LaTeX の文法で書いたもの(主に数式など)を画像にし、 その画像へのリンクを示す <img src="..."> を 標準出力に出します。SSIを有効化したHTML文書で 数式を書くのに便利。MathMLの「手書きを寄せつけないあまりの複雑さ」に がっかりした人用。

<!--#exec cmd="tex2imgsrc -Fred -T '\[\oint f(z)dz \]' oint.png"-->

$\Downarrow$

\[\oint f(z)dz \]

Examples / 使用例

Simple, from command line / コマンドラインでの簡単使用

The command line below generates hoge.png, which depicts `y=f(x)' in mathematical form[like this: $y = f(x)$ ], as well as img-src tag, which can be pasted to HTML file to include the image of formula.

tex2imgsrc '$y=f(x)$' hoge.png
<img src="hoge.png" class="teximg" alt='$y=f(x)$' width="131" height="39">

上記のようにすると `y=f(x)' をビシっと数式にした画像 hoge.png が生成され、同時にその画像を取り込むための img src タグ が標準出力に出てきます。

More comfortable via SSI / SSIでもっと楽に

(If you have already configured SSI, skip to the section `write HTML documents with formula'.)

Configure SSI on the beforehand to use. If your server is running apache, and if its configuration allows your web directory to override configuration, put ./.htaccess as below:

Options +Includes
AddType text/html .shtml
AddHandler server-parsed .shtml

まずSSIを有効化しましょう(既に使えている場合は読み飛ばして 実例解説へ)。文書ディレクトリの .htaccess を上記のようにします。もちろんApacheの設定で AllowOverride されてないとエラーになるのでこのへんは管理者(たぶんあなた自身?)と 相談しましょう。

Write this simple HTML in a file whose name ends with `.shtml' to confirm your SSI is working or not. If your browser displays `Hello World!', it wowrks fine.

<html>
<head>
<title>SSI test</title>
</head>
<body>
<h1>Hello</h1>
<!--#exec cmd="echo World!"-->
</body>
</html>

SSIが効いてるか上のようなHTML文書を .shtml という拡張子の適当な ファイルに保存して開いてみましょう。ブラウザで開いて Hello World と出ればOKです。

Okay, go ahead. Write HTML documents with formula as follows:

math.shtml / math.shtml(non-parsed)

<html>
<head>
<title>Math-image test</title>
<style type="text/css">
<!--
img.teximg {vertical-align: middle;}
-->
</style>
</head>

<body>
<p>Mean:
<!--#exec cmd="./tex2imgsrc '$\sum_{i=1}^nxi\over{n}$' mean.jpg"-->
</p>

<p>Stddev:
<!--#exec cmd="./tex2imgsrc '$
\sqrt{\sum(x_i-\bar{x})^2
  \over{n-1}
}
$' stddev.png"-->
</p>
</body>
</html>

Then, type this command to scan all #exec lines and generate all image files.

tex2imgsrc -s math.shtml

Note that you should generate all images before publishing that web page. If images files does not exist, or image files are not matched with LaTeX-source lines, tex2imgsrc called via httpd tries to generate/update image in vain, because that process has no write permission.

上記のように tex2imgsrc -s で math.shtml にある全てのSSI行を 実行して必要な画像ファイルを生成します。簡単でしょ?

ただし、ページ公開前に全ての画像ファイルを生成しておいて下さい。 生成していないもの、あるいはソースのLaTeX行と対応が取れていない状態で ブラウザ経由でページアクセスすると、httpdによって起動されたtex2imgsrc が画像を生成しようとするものの、書き込み権限がなくて失敗します。

もしHTML書きにyahtml を使っているなら変数 yahtml-lint-program"./tex2imgsrc -s" をセットしておけば [prefix] t j で一発変換できます。

$Id: yahtml.el,v efc3819f749b 2010-09-12 10:59 +0900 yuuji $

以降のyahtmlならHTMLソースの先頭付近に

<!-- #lint ./tex2imgsrc -s -->

と入れておけば自動的に利用されます(-sの部分が&#45;sでもOK)。

なんだ、Webに数式書くのが苦痛じゃなくなったよ。

Without SSI / SSIがどうしても使えないけど...

You can use SSI notation, '<!--#exec cmd="..."-->' even if your server does not support SSI. Expand all SSI lines in shtml beforehand by `tex2imgsrc -S'.

tex2imgsrc -S src.shtml > index.html

SSIが使えないサーバでも、SSI用に書いた記法を展開する `tex2imgsrc -S' を使えば画像作成とimgタグへの展開を事前に行なえます。 上記のコマンドライン例のようにしておくことで、src.shtml をSSI展開した結果が index.html に書き込まれ、同時に画像生成も 行なわれます。

Requirements / 必要なツール

This script requires the following utilities.

Inside / 仕組

If you can't make tex2imgsrc work well, try these steps.

  1. Check color capability of LaTeX2e.

    color.tex

    \documentclass{article}
    \pagestyle{empty}
    \usepackage{color}
    \begin{document}
    \textcolor{red}{Tomato!}
    \end{document}
    
  2. See the color.
    xdvi color.dvi
    
  3. Convert it to EPS.
    dvips -E -o color.eps color.dvi
    gs color.eps  (for confirmation)
    
  4. Convert EPS to png/jpg.
    convert -density 200 color.eps color.png
    (or)
    pstopnm -stdout -dpi=200 -portrait color.eps | pnmtopng > color.png
    

Generally, troubles occur at conversion processes. Please check configuration of dvips or ImageMagick.

Options / オプション

-e              echo only(no exec)              プロセス起動せず表示のみ
-s file(s)      exec all SSIs in HTML files     shtmlを読んで一括画像生成
-S SHTML >HTML  Expand SSI lines in SHTML       shtmlをhtmlに変換
-p PT           pt size of document             LaTeXドキュメントのpt指定
-d DPI          set eps DPI (200)               EPSのdpi値 200がデフォルト
-t TEXCMD       set latex command               使用するタイプセッタ
-F COLOR        set textcolor                   文字色
-B COLOR        set background color            背景色
-c CLS          set documentclass(jarticle)
-C CLASS        set css-class name (teximg)     img要素に付加するクラス名

Colors can be specified by basic color, named color, rgb/cmyk specs. The basic colors are black, blue, cyan, green, magenta, red, white and yellow. The named colors are such as Apricot, Aquamarine, Bittersweet and so on defined in colordvi.tex, which may be seen as below.

less `kpsewhich colordvi.tex`

The rgb/cmyk values are specified as comma-separated triple/quadruple real numbers between 0 and 1. Thus, these color specs for -F (or -B) option below are all acceptable.

-F white
-F VioletRed
-F 0.2,0.4,0.5
-F 0.9,0.8,0.5,0.2

Options are passed also via environment variable. The textcolor, for example, is passed by $FG. So these two lines are equivalent.

FG=BlueGreen tex2imgsrc '$y=\sin(\theta)$' yst.png
tex2imgsrc -FBlueGreen '$y=\sin(\theta)$' yst.png

This can be convenient when you specify same options to all tex2imgsrc commands in a HTML documents. If you decide to specify `-F Brown -d 180' for all images, make a wrapper to tex2imgsrc like this:

#!/bin/sh
exec env - PATH=$PATH FG=Brown DPI=180 ./tex2imgsrc "$@"

Then, rewrite all `tex2imgsrc' in SSI-exec lines to the name of wrapper above. More environment variables are available. Please take a look at the beginning part of script.

Consideration / SSIって平気?

Perhaps you may see the notes on SSI security issue, do not worry if you write .shtml files manually.

SSIを闇雲に危険と書いてあるページを見かけるかもしれませんが、 これは管理者が知らない人にSSIを含んだWebページを置かせる場合の問題であって、 SSIを含むファイルを手動で書いているのであれば問題ありません。 自分が管理しているサーバならその点を把握したうえで 有効化すればよいでしょう。逆に仮にこのようなスクリプトをCGIとして 設置するとクロスサイトスクリプティングの危険に晒されるので よっぽど危険です。

もしSSIを許可してくれるサーバがなくてお困りなら、シェルの使える gentei.org をどうぞ:-)

Want to use, but doesn't work / 使いたいけど動かね

I'll try to fix your problem. Send me a report with detail.

直します(たぶん)。できるだけ状況を詳しく書いて連絡下さい。


yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]