如何修改 gnuplottex.sty 文件以将井号 (#) 写入绘图文件?

如何修改 gnuplottex.sty 文件以将井号 (#) 写入绘图文件?

我在调整 .sty 文件以满足我的需求时遇到了问题。这些问题是由 tex 中的井号 # 的特殊含义(以及我的无能)引起的。问题:

未经修改的“gnuplottex.sty”文件来自格努普特克斯软件包部分内容如下:

\def\figname{\jobname-gnuplottex-fig\thefignum}

\def\gnuplotverbatimwrite#1{%
    \def\BeforeStream
    {\message{Opening gnuplot stream #1}%
        \immediate\write\verbatim@out{\string !/usr/bin/gnuplot -p}
        \immediate\write\verbatim@out{\string set terminal \gnuplotterminal \gnuplotterminaloptions}
\immediate\write\verbatim@out{\string set output '\figname.\gnuplottexextension{\gnuplotterminal}'}
    }

包写入文件可能被命名为test-gnuplottex-fig1.gnuplot。 .sty 文件中引用的行特别负责该文件的以下内容:

set terminal tikz
set output 'test-gnuplottex-fig1.tex'

想要读取文件

#!/usr/bin/gnuplot -p
set terminal tikz
set output 'test-gnuplottex-fig1.tex'

但是井号 (#) 带来了一个问题:当我编辑引用的部分时gnuplottex.sty

\def\figname{\jobname-gnuplottex-fig\thefignum}

\def\gnuplotverbatimwrite#1{%
    \def\BeforeStream
    {\message{Opening gnuplot stream #1}%
        \immediate\write\verbatim@out{\string #!/usr/bin/gnuplot -p}
        \immediate\write\verbatim@out{\string set terminal \gnuplotterminal \gnuplotterminaloptions}
\immediate\write\verbatim@out{\string set output '\figname.\gnuplottexextension{\gnuplotterminal}'}
    }

它会产生错误:

l.89 ... \immediate\write\verbatim@out{\string #! /usr/bin/gnuplot -p} ! \BeforeStream 定义中的参数编号非法。"

\immediate\write\verbatim@out{\string \#!/usr/bin/gnuplot -p}如果我像在文件中那样转义哈希,则其中会有一个额外的反斜杠,而不是真正转义哈希:

 \#!/usr/bin/gnuplot -p
 set terminal tikz
 set output 'test-gnuplottex-fig1.tex'

在这种情况下,我该如何以正确的方式转义井号字符以便读取该行#!/usr/bin/gnuplot

答案1

不要修改包文件gnuplottex.sty。而是重新定义相关命令。

\documentclass{article}
\usepackage{gnuplottex}

\makeatletter
\edef\gnuplot@hashmark{\string#}
\def\gnuplotverbatimwrite#1{%
  \def\BeforeStream
    {\message{Opening gnuplot stream #1}%
     \immediate\write\verbatim@out{\gnuplot@hashmark!/usr/bin/gnuplot -p}
     \immediate\write\verbatim@out{set terminal \gnuplotterminal \gnuplotterminaloptions}
     \immediate\write\verbatim@out{set output '\figname.\gnuplottexextension{\gnuplotterminal}'}
    }
    \@bsphack
    \immediate\openout \verbatim@out #1
    \BeforeStream%
    \let\do\@makeother\dospecials
    \catcode`\^^M\active
    \def\verbatim@processline{%
        \immediate\write\verbatim@out
        {\the\verbatim@line}}%
    \verbatim@start}
\makeatother

\begin{document}
\begin{gnuplot}
abc
\end{gnuplot}
\end{document}

这导致写作

#!/usr/bin/gnuplot -p
set terminal latex
set output 'gplote-gnuplottex-fig1.tex'
abc

\string请注意,我从定义中删除了几个无用的命令。

由于\write扩展了标记,因此当它找到时\gnuplot@hashmark它会将其扩展为的“安全”版本#

您还应该尝试请求修复错误。

相关内容