首页 > 解决方案 > 如何在 gnuplot 中使用 `set term push` 和 `set term pop`

问题描述

我在 Arch Linux 上使用 gnuplot 5.2.7。我想临时更改终端的配置,绘制一些东西,然后恢复它(我的初始化文件中没有终端配置)。我认为pop并且push可以用于这种效果,但我没有成功。

这就是我在 gnuplot 会话中所做的。首先,我将终端设置为wxt并按下它,然后绘制一个正弦波:

gnuplot> set term wxt 1 ; set term push

Terminal type is now 'wxt'
Options are '1 enhanced'
   pushed terminal wxt 1 enhanced
gnuplot> plot sin(x)

到目前为止,这有效。现在我想暂时将背景更改为青色,然后恢复为默认背景:

gnuplot> set term wxt 1 background "cyan"

Terminal type is now 'wxt'
Options are '1 background '#00ffff' enhanced'
gnuplot> plot sin(x)
gnuplot> set term pop
   restored terminal is wxt 1 background '#00ffff' enhanced
gnuplot> 

如您所见,pop终端并没有恢复背景。下一个情节出现了青色背景。

Gnuplot 的手册 (pdf)在第 257 页中指出:

该命令在恢复时set term push记住当前终端,包括其设置。set term pop

我究竟做错了什么?

标签: gnuplot

解决方案


从 gnuplot 手册:

命令 set term push 记住当前终端,包括其设置,而 set term pop 恢复它。这相当于保存期限和加载期限,但不访问文件系统。因此,它们可以用于实现终端打印后的平台独立恢复,例如。gnuplot 启动后会自动推送默认终端或启动文件中的终端。因此,可移植脚本可以依赖 set term pop 恢复给定平台上的默认终端,除非已明确推送另一个终端。

实际上,我并不完全清楚terminal pushand的好处是terminal pop什么?好吧,恢复默认终端。我(目前)能想到的唯一优势是,在较长的 gnuplot 脚本中,当您来回切换到不同的终端时,您不必一次又一次地输入默认终端的所有参数。如果您更改某些终端设置,否则您将不得不更改脚本中的所有匹配项。

也许以下内容对您有用:在代码的开头将您的终端与您的背景或其他设置定义为字符串变量,然后将它们作为宏调用@。所以有了这个,我看不出调用@TerminalDefaultand之间有什么区别set terminal pop,除了@TerminalDefault如果你以前有相同的终端但只是使用不同的设置,它也会恢复。

代码:

### workaround for terminal push & pop with same terminal but different settings
reset session

TerminalDefault = 'set term wxt 0 background "white"'
TerminalCyan = 'set term wxt 0 background "cyan"'
TerminalYellow = 'set term wxt 0 background "yellow"'
TerminalPNG = 'set term png background "green"'

@TerminalDefault
plot x
pause -1 TerminalDefault

@TerminalCyan
plot x**2
pause -1 TerminalCyan

@TerminalPNG
set output "Test.png"
plot x**3
set output
pause -1 TerminalPNG

@TerminalDefault
plot x**4
pause -1 TerminalDefault

### end of code

推荐阅读