我在调整 .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
它会将其扩展为的“安全”版本#
。
您还应该尝试请求修复错误。