请问,如何将 epslatex 图形直接包含到主 latex 文件中,比如说main.tex
?main.tex
有第三方提供的自己的模板。我在main.tex
文件中使用此命令来包含图:
\def \Fig{figures/results1/figure}
...
\begin{figure*}[thpb]
\centerline{
\subfigure[]{\bimOther{\input{\Fig}} }
...
}
\end{figure*}
其中图形首先在 gnuplot 下生成,如下所示
set terminal epslatex 8 color colortext
set output '/tmp/figure.tex'
...
set macros
filename = "'/tmp/data/signal.dat'"
plot @filename u 1:2 w l ls 1 linecolor rgb "red" notitle
问题是,在使用\input
命令时,主 latex 文件 (main.tex) 将查找 gnuplot 指定的路径,而不是其核心中指定的路径,即figures/results1/
我们的示例中的路径。这不允许可移植性。假设我们有不同的连续试验结果,即图 1、....、图 n。在注意到 /tmp 文件在每次试验后都会被恢复后,如何包含它们?
一个解决方案是为每次试验创建一个单独的 gnuplot 代码,但这显然是不正常的!
有什么帮助吗?我花了一天多的时间试图解决这个问题……
答案1
目录结构
假设目录结构如下
main.tex
figures/
-- results1/
-- -- figure.gnuplot
文件内容
这两个文档文件的内容如下
figure.gnuplot
:
#!/usr/bin/env gnuplot
set term epslatex color
set output '/tmp/temp.tex'
# BEGIN plotting commands
plot sin(x)
# END plotting commands
set output # Closes the temporary output files.
!sed 's|includegraphics{/tmp/temp}|includegraphics{figures/results1/figure}|' < /tmp/temp.tex > figure.tex
!epstopdf /tmp/temp.eps --outfile='figure.pdf'
main.tex
:
\documentclass{scrartcl}
\usepackage{graphicx}
\begin{document}
\input{figures/results1/figure.tex}
\end{document}
复现说明
进入目录figures/results1/
并执行
gnuplot figure.gnuplot
将出现两个文件:figure.tex
和figure.pdf
。
现在返回到文档的根文件夹(其中main.tex
是)并main.tex
使用任何可以处理 PDF 文件的引擎进行编译(不是latex
、而是pdflatex
、xelatex
或lualatex
)。
完毕!
评论
使用此方法,您可以获得图形的 PDF 文件,而不是需要转换为 PDF 的 EPS 文件。
另一方面,您需要为每个新图更改所有文件名(也可能是目录)。
答案2
使用 bash 脚本替换文件的另一种方法:
#/bin/bash
MY_PATH=$(pwd)
subpath()
{
echo "$1" | rev | cut -d"/" -f1-$2 | rev
}
BASE=$(subpath $MY_PATH 2)
for f in *.tex
do
echo "fixing gnuplot tex file - $f"
NAME=$(basename $f .tex)
mv $f $f.back
sed "s|${NAME}|${BASE}/${NAME}|" $f.back > $f
rm $f.back
done