在gnuplot标题中显示下划线而不是下标

在gnuplot标题中显示下划线而不是下标,gnuplot,Gnuplot,简短问题: 如何在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 } 除了标题从foo_abc更改为fooabc之外,这

简短问题: 如何在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
}

除了标题从foo_abc更改为fooabc之外,这在gnuplot中也可以使用。我不知道是否要使用转义字符,因为我不希望文件名中出现转义字符。我尝试了几个不同的单引号和双引号选项,但我还没有找到我需要的。

如果您使用的是增强型eps终端,这就是您首先需要转义下划线的原因。今天有一个例子可以解释这个问题。设置终端时,请尝试:

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

通过这种方式,您可以转义下划线,而不会在文件名中显示\。注意“items”字符串使用单引号;有关详细信息,请参阅前面链接的问题。

大多数生成标签的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...
我使用内联函数查找字符串
s
中第一次出现的
x
的索引。然后,我通过字符串连接和切片删除该事件,并再次递归调用该函数以删除下一个事件。如果找不到索引(
strstrt
返回0),那么我们只返回放入的字符串。现在您可以执行以下操作:

set output remove('\',item)
set title item

我对标题中的下划线也有同样的问题:比如我需要写4_3子帧,我需要增强的postscript。最简单的方法是从相邻的帖子中找到:``如果您使用的是增强型eps终端,这就是您首先需要转义下划线的原因。今天还有一个相关的问题,可以稍微解释一下这个问题 因此,我听从了他们的建议,这起了作用:

绘制'LC.stats'u3:4ti“{/=C18 4\\ u3子帧中的15 1350颗星”} 下划线前的双转义字符


foo\\\\\\\\\\\\\\\\\\\\\\\/code>改为
foo\\\\\\\\\\\\\\\\\\\\ abc
,下划线来自将标题视为“增强文本”。使用


set key noenhanced

在您的情况下,下划线是否始终位于字符串名称中的同一位置?也就是说,will len('foo')==len('bar'))?在这种情况下,我可能有一个部分的解决方案。没有,我给出的示例中正好有这些。好的。您是否尝试过在postscript终端上使用
noenhanced
选项?我刚刚尝试过,这似乎现在起作用,尽管我不知道Enhanced和noenhanced之间的区别,或者我以后是否需要这些功能。是吗你的答案解释了发生了什么,如果需要的话,我可以使用其他技术来获取包含转义字符和不包含转义字符的名称。谢谢。你可以通过使用内联递归函数来消除将``放在同一位置的限制。(内联部分也可以放松……但它有助于避免反复评估
strstrstrt
函数:)。回答得很好。+1给了我一个更进一步的想法。当您的CSV文件在第一行提供绘图键时,
set key autotitle columnhead noenhanced
也可以使用此功能。回答得很好!我不知道单个标签的
noenhanced
标志。我想制作类似于您的递归f函数,但不知怎的,我错过了
strstrstrt
函数。@andyras——我为
remove
函数感到非常自豪——因此我对可能将其放入我的
~/.gnuplot
文件中的评论:)完美:直截了当地说,当OP只谈论标题时,不会笨拙地删除其他地方的增强功能。这是最好的答案!
set output remove('\',item)
set title item