На данный момент это звучит так, как будто не связано с (La) TeX. Не могли бы вы уточнить, насколько вопрос актуален для сайта?
@ Джейк: ой, звучит так, будто ты прав! как убрать этот вопрос? Куда это относится? Переполнение стека ?
1
Использование \n; таким образом set title "this is a\n two line title".
@ Джейк: спасибо. Да, я ищу автоматическую упаковку. Я не знаю длину строки заранее (или даже ее содержание). Итак, Ян, я бы не знал, куда положить \ n! Пример: заговор sin (x) с title = "ExpertNoob" 15 раз!
Ответы:
3
Вы должны отредактировать данные в вашем файле и вставить \nв поле, откуда анализируется заголовок.
Gnuplot распознает \nи разорвет линию в этой точке. В противном случае вам нужно вручную ввести заголовок и добавить \nв нужную вам позицию.
Важно отметить, что \ngnuplot учитывает это только при наличии "string"вместо 'string'.
Если вы не можете редактировать данные в вашем файле, вы можете использовать строковые функции в gnuplot. С помощью strlen("string")вы можете найти длину вашей строки, а затем с помощью substr("string",begin,end)вас можно разделить строки.
foo = "my data"
length = strlen(foo) #get string length
length2 = sprintf("%1.d", length / 2) #round halved down string length to find center char
foo1 = substr(foo, 0, length2) #get first half of string
foo2 = substr(foo, length2, length) #get second half of string
titlestring = foo1.\n.foo2 #make new title string with newline character
#
# Miscellaneous neat things you can do using the string variables code
#
set print "stringvar.tmp"
print ""
print "Exercise substring handling"
print ""
beg = 2
end = 4
print "beg = ",beg," end = ",end
foo = "ABCDEF"
print "foo = ",foo
print "foo[3:5] = ",foo[3:5]
print "foo[1:1] = ",foo[1:1]
print "foo[5:3] = ",foo[5:3]
print "foo[beg:end] = ",foo[beg:end]
print "foo[end:beg] = ",foo[end:beg]
print "foo[5:] = ",foo[5:]
print "foo[5:*] = ",foo[5:*]
print "foo[:] = ",foo[:]
print "foo[*:*] = ",foo[*:*]
print "foo.foo[2:2] = ",foo.foo[2:2]
print "(foo.foo)[2:2]= ",(foo.foo)[2:2]
print ""
print "foo[1:1] eq 'A' && foo[2:2] ne 'X' = ", \
(foo[1:1] eq 'A' && foo[2:2] ne 'X') ? "true" : "false"
unset print
set label 1 system("cat stringvar.tmp") at graph 0.1, graph 0.9
unset xtics
unset ytics
set yrange [0:1]
plot 0
Вместе с функцией strlenвы сможете создать свое решение для автоматической обработки ваших данных в gnuplot и разместить символ новой строки там, где вы хотите (например, после каждого 20-го символа).
Если вы хотите разбить слова, вы должны использовать:
wordnumber = word(foo) #get number of words
wordernumber2 = sprintf("%1.d", wordnumber / 2) #round down half of #words
do for [i=0:wordnumber2] { #add half of words to string
string = string.word(foo,i)
}
string = string.\n #add newline to string
do for [i=wordnumber2:wordnumber] { #add 2nd half of words
string = string.word(foo,i)
}
На самом деле, это решение было затронуто в комментарии, и ОП сказал: «Я ищу автоматическую упаковку. Я заранее не знаю содержимого строки, поэтому я не знаю, куда ее поместить \n!»
Скотт
Я уточнил свой ответ, который должен включать решение для вырезания, вставки и упаковки строк.
Виктор ван Сантен
Намного лучше. Но, если я правильно понимаю ваш ответ, он разобьет «Путеводитель автостопом по галактике» на «G автостопщика» и «uide to the Galaxy». Перенос слов обычно означает разрыв в пробеле.
Скотт
Вы можете разбить слова следующим образом: <br> words("string")возвращает количество слов в строке. word("string",n)возвращает n-е слово в строке. Однако длинные слова (особенно в немецком, но также составные слова в английском) могут потенциально превышать количество символов, разрешенных в одной строке. Поэтому вырезание на основе символов лучше для неизвестной строки. Со словами это привело бы к сложной программе, которую я бы предпочел использовать на языках сценариев, таких как perl / python. Предварительная обработка файлов, вставка новых строк (в дополнение к другому форматированию) более простым способом.
Виктор ван Сантен
Я добавил пример, который обрабатывает слова и добавляет новую строку после половины слов. У него есть проблемы, если половина слов все еще слишком длинна для одной строки, но вы должны получить представление о том, как это расширить ;-)
\n
; таким образомset title "this is a\n two line title"
.Ответы:
Вы должны отредактировать данные в вашем файле и вставить
\n
в поле, откуда анализируется заголовок.Gnuplot распознает
\n
и разорвет линию в этой точке. В противном случае вам нужно вручную ввести заголовок и добавить\n
в нужную вам позицию.Важно отметить, что
\n
gnuplot учитывает это только при наличии"string"
вместо'string'
.Если вы не можете редактировать данные в вашем файле, вы можете использовать строковые функции в gnuplot. С помощью
strlen("string")
вы можете найти длину вашей строки, а затем с помощьюsubstr("string",begin,end)
вас можно разделить строки.Вот полный список функций gnuplot:
http://gnuplot.sourceforge.net/docs_4.2/node53.html
В итоге у вас будет что-то вроде
Для получения дополнительной информации обратитесь к демонстрационному сценарию строковой переменной gnuplot:
http://gnuplot.sourceforge.net/demo/stringvar.html
где приведены такие примеры:
Вместе с функцией
strlen
вы сможете создать свое решение для автоматической обработки ваших данных в gnuplot и разместить символ новой строки там, где вы хотите (например, после каждого 20-го символа).Если вы хотите разбить слова, вы должны использовать:
Для этого требуется gnuplot 4.4+
источник
\n
!»words("string")
возвращает количество слов в строке.word("string",n)
возвращает n-е слово в строке. Однако длинные слова (особенно в немецком, но также составные слова в английском) могут потенциально превышать количество символов, разрешенных в одной строке. Поэтому вырезание на основе символов лучше для неизвестной строки. Со словами это привело бы к сложной программе, которую я бы предпочел использовать на языках сценариев, таких как perl / python. Предварительная обработка файлов, вставка новых строк (в дополнение к другому форматированию) более простым способом.