Как экспортировать выражение в файл изображения, чтобы размер автоматически подстраивался под размер выражения?
Я использую этот оригинальный код, опубликованный экспертом 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:
Вы можете увидеть, сколько пустого пространства потрачено впустую. изменение кода для использования width=300
сейчас производит
Что не то, что я хотел.
То, что я действительно хочу, - это создать изображение в формате EPS с фиксированным разрешением, но обрезать его так, чтобы над или под изображением не было пустого пустого пространства. Называется сжать, чтобы соответствовать, или такой? т. е. ограничивающая рамка eps должна просто заключать в себе выражение.
Я даже не мог понять, как заставить его использовать width=7in, так что теперь он использует пиксели. Позже я буду читать эти изображения в латекс, и я могу масштабировать их позже, если необходимо, используя латекс \includegraphics[scale=]
команда.
Использование Maple 18.01 на окнах.
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 :
Обратите внимание, что вы должны вызывать это, используя имя файла без расширения.