output::fence

Поместите разделители вокруг многострочных строк

Блокноты 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 (и таким образом, стандарт экранирует выход) для симпатичной печати. Обратите внимание на то, что это не влияет набранный, выводят.

Примеры

Пример 1

Установите 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 /

Пример 2

Установите 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)

Параметры

left, right

Строки, указывающие на тип разделителя: "(", ")", "[", "]", "[+", "+]", "{", "}", "|", "|", или "|".

string

Строка, чтобы заключить

width

Ширина строки, чтобы заключить. Значения по умолчанию к ширине самой широкой линии в string.

base

Базовая линия строки, считаемой от первой линии. Значения по умолчанию к нижней строке строки. Если установлено в -1, базовая линия вертикально сосредоточена.

Возвращаемые значения

Строка

Смотрите также

Функции MuPAD