我在 Linux 上使用最新的 TeXLive,并且已经gnuplot
安装。我也安装了gnuplottex
包。
然后,我尝试编译基本gnuplottex CTAN例子,示例-pdf.tex;然而,我得到了这个:
$ pdflatex -shell-escape test.tex
...
! Undefined control sequence.
\gnuplotverbatimwrite ...e \openout \verbatim@out
#1 \BeforeStream \let \do ...
l.7 ...f,terminaloptions={font ",10" linewidth 3}]
? X
(完整日志这里)
有人知道如何让这个基本示例发挥作用吗?
答案1
我已经更新了软件包并修复了错误,很快就会出现在您附近的 CTAN 镜像中。谢谢大家!
答案2
我也遇到过此错误消息,并使用了您的解决方案。它对于较小的文档非常有效,这意味着文件中的 gnuplot-streams 数量少于 13 个。
不幸的是,从那时起,我在博士论文的大型文件中遇到了一个新错误:“ no room for a new \write
”。如果您的文件中有超过 13 个 gnuplot 图形,就会发生这种情况,就我的情况而言,目前我有大约 30 个。
但是,最后我也在 Heiko Oberdiek 的 de.comp.text.tex 中找到了解决方案:只需将您的:更改\newwrite\verbatim@out
为:\@ifundefined{verbatim@out}{\newwrite\verbatim@out}{}%
这样可以避免每个 gnuplot 流阻塞一个写入寄存器,并且不会再发生错误。
答案3
好的,我想我明白了 - 我认为这是包本身的一个错误。
首先,根据上面的错误信息,'未定义的控制序列' 似乎发生在\verbatim@out
。我首先尝试使用 .tex 文件中的 来调试宏\tracingmacros=1
,但这并没有告诉我太多信息。
然后我读了一点verbatim.pdf——LaTeX 的 verbatim 和 verbatim* 环境的新实现。,其中写道:
作为最后一个重要示例,我们描述了名为 verbatimwrite 的环境的定义。它将其主体中的所有文本写入一个文件,该文件的名称作为参数给出。我们假设名为 \verbatim@out 的流号已通过 \newwrite 宏保留。
啊哈...好吧,gnuplottex.dtx(以及gnuplottex.sty
生成的相应内容)实际上根本没用\newwrite
!!
因此我只是/PATH/TO/texlive/texmf-dist/tex/latex/gnuplottex/gnuplottex.sty
在文本编辑器中打开了我的代码,并\newwrite\verbatim@out
在第 84 行之后插入了一个代码 - 因此它周围的代码现在如下所示:
...
\newcounter{fignum}
\def\figname{\jobname-gnuplottex-fig\thefignum}
\def\gnuplotverbatimwrite#1{%
\newwrite\verbatim@out % <===== ADDED HERE!!
\def\BeforeStream
{\message{Opening gnuplot stream #1}%
\immediate\write\verbatim@out{\string set terminal \gnuplotterminal \gnuplotterminaloptions}
\immediate\write\verbatim@out{\string set output '\figname.\gnuplottexextension{\gnuplotterminal}'}
}
\@bsphack
\immediate\openout \verbatim@out #1
\BeforeStream%
...
...现在基本示例似乎可以工作了:)(不过,我真的不知道这是否就是全部内容 :))
干杯!