Как экспортировать выражение в файл изображения, чтобы размер автоматически подстраивался под размер выражения?

Я использую этот оригинальный код, опубликованный экспертом Maple Acer некоторое время назад в usenet, который позволяет экспортировать выражение в файл изображения.

Это работает хорошо, но я не могу понять, как изменить его, чтобы решить эту проблему: нужно указать в коде ширину создаваемого изображения. Я буду использовать эти изображения в своем латексном документе. Но я не знаю заранее высоты изображения, так как это зависит от того, насколько большим будет выражение. Так что, если я скажу ему использовать width=700, это создаст слишком много пустого пространства над и под выражением.

Выражение будет решением ODE. Есть ли какая-либо опция, которую можно использовать, чтобы указать Maple создать изображение, которое соответствует размеру экспортируемого изображения автоматически, без лишнего пустого пространства вокруг него? При нормальном разрешении?

Я думаю, 2 примера помогут показать проблему. Сначала я запускаю код Acer. Это не установлено для создания файла.eps. измените расширение на другой gif или jpeg, чтобы сделать другие типы.

restart:

exportexpression:=proc( ee, filenm::string,
                        {width::posint:=640},
                        {fontsize::posint:=11} )
   uses plots;
   plotsetup('eps','plotoutput'=filenm,
             'plotoptions'=cat("width=",width));
   print(display(textplot([0,0,typeset(ee)],
                          'font'=["times","roman",fontsize]),
                 'axes'='none',
                 'view'=-0.5..0.5,'scaling'='constrained'));
   fclose(filenm):
   plotsetup('default');
   NULL;

end proc:

Затем в отдельную ячейку выполнения, я пишу (вышеуказанный код должен быть сохранен сначала в некоторой папке, так что изображение создается в той же папке)

ode:=diff(y(x),x)+(y(x))^2=a*x+b;  
r:=dsolve(ode,y(x));
fn:=".\\file2.eps";
exportexpression( r, fn, width=700, fontsize=12 );

И это производит этот файл изображения file2.eps:

Mathematica графика

Вы можете увидеть, сколько пустого пространства потрачено впустую. изменение кода для использования width=300 сейчас производит

Mathematica графика

Что не то, что я хотел.

То, что я действительно хочу, - это создать изображение в формате EPS с фиксированным разрешением, но обрезать его так, чтобы над или под изображением не было пустого пустого пространства. Называется сжать, чтобы соответствовать, или такой? т. е. ограничивающая рамка eps должна просто заключать в себе выражение.

Я даже не мог понять, как заставить его использовать width=7in, так что теперь он использует пиксели. Позже я буду читать эти изображения в латекс, и я могу масштабировать их позже, если необходимо, используя латекс \includegraphics[scale=] команда.

Использование Maple 18.01 на окнах.

Клен PS сюжет

Кленовый сюжет

1 ответ

Решение

Основная проблема здесь в том, что ваш eps Файл имеет черную рамку, поэтому программа обрезки не будет работать. Я предлагаю вывести файл postscript без рамки, а затем использовать system команда позвонить ps2eps обрезать изображение. В этом случае процедура выглядит следующим образом.

exportexpression:=proc( ee , filenm :: string , { width :: posint := 640 } , 
                                                { fontsize :: posint := 11 } )

   uses plots;

   local f :

   f := cat( filenm , ".ps" ) :

   plotsetup( 'ps' , 'plotoutput' = f , 'plotoptions' = cat( "width = " , width ,
                                                                       ", noborder" ) ) :

   print( display( textplot( [ 0 , 0 , typeset( ee ) ] , 
             'font' = [ "times" , "roman" , fontsize ] ) , 'axes' = 'none' ,
                             'view' = -0.5 .. 0.5 , 'scaling' = 'constrained' ) ) :

   fclose( f ) :

   system( cat( "ps2eps -B -f " , f ) ) :

   plotsetup( 'default' ) :

   return :

end proc :

Обратите внимание, что вы должны вызывать это, используя имя файла без расширения.

Другие вопросы по тегам