xfig with latex

最近在写毕业论文,偶尔会使用xfig画一些图,然后插入到论文中去,一般情况下直接在xfig中导出eps格式的图片,再在latex中插入即可,但是当所画的图要包含数学公式时,上述操作显然不可行,经过一番研究,找到了xifg和latex完美结合的方法。

打开xfig的specialtext选项

可以在启动xfig时加入specialtext选项使得xfig给每个文本框设置一个special flag,个人添加的启动参数如下:

1
xfig -specialtext -latexfonts -startlatexFont default

方便起见,个人在所使用的shell配置文件.zshrc中添加了别名:

1
alias xfig="xfig -specialtext -latexfonts -startlatexFont default"

当然如果不增加启动参数,也可以进入xfig后进行设置,选择文本工具后软件底部会出现相应的配置。

xfig中导出latex编译所需文件

画完一张图后,在xfig中导出时选择”Combined PS/LaTeX (both parts)”,这会导出两个文件:filename.pstex和filename.pstex_t,这两个文件是后面使用latex编译生成支持数学公式的图片所需的。

使用latex编译生成所需图片

新建一个temp.tex,插入以下文本:

1
2
3
4
5
6
7
8
9
10
\documentclass[12pt]{article}
\usepackage{amssymb,amsmath,graphics,epsfig,color}
\pagestyle{empty}

\begin{document}

\begin{figure}
\input{filename.pstex_t}
\end{figure}
\end{document}

上述tex文件包含了从xfig中导出的文件,然后使用xelatex编译即可得到所需的图片。

自动化

当然上述操作还是相对繁琐的,因此写了个xfig2eps的bash脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
TMP_DIR=/tmp
cp $1.pstex_t $TMP_DIR/temp.pstex_t
cp $1.pstex $TMP_DIR/
echo -E "\documentclass[12pt,twoside]{article}
\usepackage{amssymb,amsmath,graphics,epsfig,color}
\usepackage{tensor, bm}
\pagestyle{empty}

\begin{document}

\begin{figure}
\input{temp.pstex_t}
\end{figure}
\end{document}" > $TMP_DIR/xfig_to_eps.tex
cd $TMP_DIR
latex xfig_to_eps.tex > /dev/null && dvips -E -o xfig_to_eps.eps xfig_to_eps.dvi > /dev/null
result=$?
rm temp.pstex_t $1.pstex xfig_to_eps.tex xfig_to_eps.dvi xfig_to_eps.aux xfig_to_eps.log > /dev/null
if [ "$result" == 0 ]; then
cd - > /dev/null
mv $TMP_DIR/xfig_to_eps.eps $1.eps
rm $1.pstex_t $1.pstex
else
cd - > /dev/null
echo "convert failed"
fi

如下运行脚本,就可以在当前目录得到名为filename.eps的图片:

1
xfig2eps filename # make sure filename.pstex and filename.pstex is under current directory

xfig中字体大小显示不正确的问题

使用xfig过程中,发现改变字体大小,画图过程中显示的字体大小永远不变,但是导出的图片中字体的大小是正确的,解决方式是安装gsfonts-x11。