вывод ::Поместите разделители вокруг многострочных строк
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
output::fence(left, right, string, <width, <base>>)
output::fence(left, right, string) заключает многострочную строку в разделители, обозначенные left и right
Можно использовать output::fence в сочетании с strprint, чтобы перегрузить print (и таким образом, стандартный экран вывод) для симпатичной печати. Обратите внимание на то, что это не влияет набранный, выводят.
Установите TEXTWIDTH на 75:
TEXTWIDTH := 75:
Во-первых, задайте область, которая использует output::fence для вывода:
domain Fence
print := x -> output::fence("(", ")", extop(x, 1));
new := x -> new(dom, x);
end_domain:Fence ожидает строку в своем конструкторе. Вывод использует output::fence, чтобы поместить круглые скобки вокруг входа:
print(Plain, Fence("abc"))(abc)
Строки высоты два только частично помещаются в круглых скобках для непротиворечивости с симпатичным принтером:
print(Plain, Fence("abc\ndef"), sin(x^2))abc 2 (def), sin(x )
Строки высоты больше чем два полностью заключаются в скобки:
print(Plain, Fence("abc\ndef\nghi"))/ abc \ | def | \ ghi /
Установите TEXTWIDTH на 75:
TEXTWIDTH := 75:
Следующий шаг в использовании output::fence должен заключить выражения в круглые скобки. Для этого информация от strprint полезна:
domain FenceExpr
print := proc(x)
local str, h1, w1, h, w, b;
begin
[str, h1, w1, h, w, b] := strprint(All, extop(x));
output::fence("{", "]", str, w, b);
end_proc;
new := x -> new(dom, x);
end_domain:Шестой операнд возвращаемого значения strprint(All, …) должен быть дан output::fence, чтобы выровнять базовые линии правильно:
print(Plain, FenceExpr(x), FenceExpr(x^2), FenceExpr(x^2/2*y))
{ 2 --
2 { x y |
{x], {x ], { ---- |
{ 2 --
strprint реагирует на TEXTWIDTH и может возвратить строку, состоящую или больше чем одну логическую строку. В этом случае ограждение возвращаемая строка приводит к странным результатам:
print(Plain, FenceExpr(_plus(x.i $ i = 0..30)))
{ x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 \
--
{ \
|
{ + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24 + x\
25 |
{ \
|
{ + x26 + x27 + x28 + x29 + x30 \
--
Здесь, строка с добавленными символами разделителя слишком широка для TEXTWIDTH. Кроме того, output::fence не позволяет вам управлять разрывами строки. Поэтому это - хорошая практика, чтобы не помещать большие разделители налево и право на длинные строки. Например, abs распечатывает в функциональном обозначении для длинных аргументов:
print(Plain, abs(_plus(x.i $ i = 0..30)))
abs(x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24 + x25 + x26 + x27 + x28 + x29 + x30)
|
Строки, указывающие на тип разделителя: "(", ")", "[", "]", "[+", "+]", "{", "}", "|", "|", или "|". |
|
Строка, чтобы заключить |
|
Ширина строки, чтобы заключить. Значения по умолчанию к ширине самой широкой строки в |
|
Базовая линия строки, считаемой от первой строки. Значения по умолчанию к нижней строке строки. Если установлено в |
Строка