目录结构

目录结构

请问,如何将 epslatex 图形直接包含到主 latex 文件中,比如说main.texmain.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.texfigure.pdf

现在返回到文档的根文件夹(其中main.tex是)并main.tex使用任何可以处理 PDF 文件的引擎进行编译(不是latex、而是pdflatexxelatexlualatex)。

完毕!

评论

使用此方法,您可以获得图形的 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

相关内容