簡単な質問: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からfooに変更されることを除いて、これはgnuplotで正常に機能しますa紀元前。エスケープ文字をファイル名に含めたくないので、エスケープ文字を使用するかどうかはわかりません。一重引用符と二重引用符を使用していくつかの異なるオプションを試しましたが、必要なものがまだ見つかりません。
拡張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'文字列に一重引用符を使用していることに注意してください。詳細については、以前にリンクされた質問を参照してください。
ラベルを生成するほとんどの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
の代わりに foo_abc
、 書く foo\\\_abc
。
アンダースコアは、タイトルを「拡張テキスト」として扱うことから得られます。を使用してそれをオフにします
強化されたキーの設定
タイトルのアンダースコアについても同じ問題がありました。たとえば、4_3サブフレームを作成する必要があり、拡張されたポストスクリプトが必要でした。最も簡単な方法は、隣接する投稿からのものであることが判明しました。 `ʻ拡張epsターミナルを使用している場合は、そもそもアンダースコアをエスケープする必要があるのはそのためです。今日、この問題を少し説明する別の関連する質問がありました。 " @はgnuplotでどのように生成されますか? それで、私は彼らのアドバイスに従い、これはうまくいきました:
plot'LC.stats 'u 3:4 ti "{/ = 15 C18 4\_3サブフレームの1350スター}"-アンダースコアの前に二重エスケープ文字。