Gnuplottex 基本示例因“未定义的控制序列”而失败

Gnuplottex 基本示例因“未定义的控制序列”而失败

我在 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%
...

...现在基本示例似乎可以工作了:)(不过,我真的不知道这是否就是全部内容 :)

干杯!

相关内容