31

简短的问题:如何_在 gnuplot 的标题中显示(下划线)字符,该字符是从 gnuplot 中的变量名分配的?

详细信息:我有类似以下代码:

items = "foo_abc foo_bcd bar_def"
do for [item in items] {
  set title item
  set output item.eps
  plot item."-input.txt" using 1:2 title item with linespoints
}

这适用于 gnuplot,只是标题从 foo_abc 更改为 foo a bc。我不知道是否要使用转义字符,因为我不希望它出现在文件名中。我用单引号和双引号尝试了几个不同的选项,但我还没有找到我需要的。

4

5 回答 5

27

而不是foo_abc,写foo\\\_abc

于 2017-04-26T09:19:08.177 回答
22

大多数生成标签的 gnuplot 命令都接受一个noenhanced关键字,该关键字将阻止 gnuplot 仅对该字符串使用增强文本。在这种情况下,只需执行以下操作就足够了:

set title item noenhanced

另一种方法是创建一个函数,该函数将在将字符串传递给时从字符串中删除不需要的文本set output

remove(x,s)=(i0=strstrt(s,x),i0 ? remove(x,s[:i0-1].s[i0+strlen(x):]):s)
# Makes me wish gnuplot syntax was more pythonic :-p
#TODO:  Write a `replace` function :-).  These just might go into my ".gnuplot" file...

我使用内联函数来查找x字符串中第一次出现的索引s。然后,我通过字符串连接和切片删除该事件,并再次递归调用该函数以删除下一个事件。如果找不到索引(strstrt返回 0),那么我们只返回放入的字符串。现在你可以这样做:

set output remove('\',item)
set title item
于 2012-12-01T02:44:01.423 回答
18

下划线来自将标题视为“增强文本”。使用关闭它

设置键 noenhanced

于 2017-04-27T02:05:19.833 回答
17

如果您使用的是增强的 eps 终端,这就是您首先需要转义下划线的原因。今天还有另一个相关的问题,稍微解释了这个问题。设置终端时,请尝试:

set terminal postscript noenhanced <whatever else here...>

这对我有用(Arch linux,gnuplot 4.7.0)。如果增强终端是必不可少的,下面是我找到的部分解决方案。假设是下划线总是出现在字符串中的相同位置。

set terminal postscript enhanced
items = 'foo\_abc foo\_bcd bar\_def'
do for [item in items] {
  set output item[1:3].item[5:*].'.eps'
  set title item
  plot sin(x)
}

这样,您可以转义下划线,并且文件名中不会出现 \。注意 'items' 字符串使用单引号;有关详细信息,请参阅先前链接的问题。

于 2012-12-01T01:08:47.340 回答
0

我对标题中的下划线也有同样的问题:比如我需要写4_3子帧,我需要增强的后记。最简单的方法原来来自相邻的帖子:``如果您使用的是增强的 eps 终端,这就是您首先需要转义下划线的原因。今天还有另一个相关的问题,稍微解释了这个问题。” - gnuplot 中的@是如何产生的? 所以,我听从了他们的建议,这很有效:

plot 'LC.stats' u 3:4 ti "{/=15 1350 stars in C18 4\_3 subframe}" - 下划线前的双转义字符。

于 2015-09-30T08:01:46.257 回答