用 dvipng 来快速生成公式图片

October 28, 2008 – 12:29 pm

LaTeX用 LaTeX 可以生成漂亮的公式,这是众所周知的。但是并不是总是会用 LaTeX 来做整个文档。例如,虽然我也用 beamer 做过 slides ,但是我还是觉得用 PowerPoint 或者类似的工具可以更方便地做出漂亮的幻灯片来。又比如我在写 blog 的时候想要插入一个公式,等等。这个时候我通常会临时建一个 TeX 文档,输入这个公式,生成出 PDF ,用阅读器打开,然后截图。虽然已经这样做了许多许多次了,但是其实这个过程非常无聊,而且我喜欢透明的背景,截图是白色的背景的话,有时候不能很好地融入到场景之中。

但是其实输出为 PDF 格式只是 LaTeX 文档的一种渲染方式,要得到一个透明背景的 png 其实也是非常方便的事情。我以前在用 Muse 做笔记的时候就有一个像 MediaWiki 那样的 latex 标签可以直接书写 LaTeX 公式,结果会自动转化为图片嵌入到生成的文档中去,效果就像这个页面显示的那样。

虽然不会像 Muse 那么方便,不过我想至少可以写一个简单的脚本来简化这个过程。首先是要新建一个空的 LaTeX 模板,并且需要把框架写好(例如,将页面布局设置为 empty ,没有页眉页脚之类的,因为只需要一个公式所占的那部分内容),引用一些常用的宏包:

\documentclass{article}
\usepackage{amsmath}
\usepackage{fullpage}
\usepackage{amssymb}
\usepackage[usenames]{color}
\usepackage{latexsym}
\usepackage[mathscr]{eucal}
\pagestyle{empty}
 
\begin{document}
 
\end{document}

然后是用 latex 命令将其编译为 dvi 文件,最后用 dvipng 命令转化为 png 格式的图片即可。整个脚本如下:

#!/bin/bash
 
TMPFILE=/tmp/tex2png.tmp.tex
if ! [[ -e $TMPFILE ]]; then
        cat <<eof > $TMPFILE
\documentclass{article}
\usepackage{amsmath}
\usepackage{fullpage}
\usepackage{amssymb}
\usepackage[usenames]{color}
\usepackage{latexsym}
\usepackage[mathscr]{eucal}
\pagestyle{empty}
 
\begin{document}
 
\end{document}
EOF
fi
 
vim $TMPFILE +11
cd /tmp
latex $TMPFILE
dvipng ${TMPFILE%.tex}.dvi -T tight -x 5000 -bg transparent -o eq.png
echo "Equation generated to /tmp/eq.png"

不过这其实是一个相当 ad hoc 的脚本了,虽然没有立即删掉上一次编辑的公式的 TeX 源码,但是如果下次做的时候会覆盖前一次的代码,之后再要想做一点小修改也是需要整个公式重新写一遍的。应该最方便的还是像 Muse 那样直接嵌入 LaTeX 标签的 WordPress 插件,不过一来我没有精力去做那样的插件,二来就算有现成的插件,我也不想再服务器上瞎折腾什么 LaTeX 之类的。总之能用就行吧! :)

最后,其实还可以用一下这里的 ImageMagick 脚本给公式加个阴影什么的,就像本文一开头的那个 LaTeX 的字样一样。

  1. 2 Responses to “用 dvipng 来快速生成公式图片”

  2. 有一个把latex公式转化成ascii字符的东西不错,虽然没多大用
    http://freshmeat.net/projects/brightmare/

    By chunhao on Oct 29, 2008

  3. 如果这是在文档和幻灯片中用用公式还是现成的软件省事,ms的office 2007就可以满足了。要在其它地方使用确实比较麻烦

    By maxint on May 15, 2009

Post a Comment