strprint

Распечатайте в строку

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

strprint(<All>, <Unquoted>, <NoNL>, <KeepOrder>, object1, object2, …)

Описание

strprint(objects) возвращает строку, которую print(objects) отобразил бы на экране.

strprint возвращает строку, которая содержит вывод print, отправил бы на экран для тех же аргументов. Эта строка содержит символы `\n', если вывод состоял бы из нескольких строк.

В системах Windows® каждому \n предшествует \r, потому что это - традиционная комбинация конца строки, поскольку это - комбинация конца строки, наследованная от CP/M. Примеры в этой документации принимают систему как UNIX®. Также обратите внимание, что с Набором активированного, \r, \n, \t и \b не будут отображены в строке.

Все опции и зависимости от переменных интерпретированы, как описано в документации print. Особенно, это означает, что PRETTYPRINT влияет на вывод strprint. Перегрузка print учтена. Смотрите ?print для деталей.

Взаимодействия среды

strprint чувствителен к переменным окружения DIGITS, PRETTYPRINT и TEXTWIDTH, и к выходным настройкам Pref::floatFormat, Pref::keepOrder и Pref::trailingZeroes.

Примеры

Пример 1

Строка, возвращенная strprint, когда распечатано с опцией Unquoted, приводит к тому же выводу, как операнды имели бы во-первых:

s := strprint(a*x^2-7):
print(Unquoted, s)
   2
a x  - 7

Это может использоваться, чтобы объединить несколько выходных параметров:

s1 := strprint(a*x^2-7):
s2 := _concat("-" $ TEXTWIDTH)."\n":
s3 := strprint(sin(1/x)):
print(Unquoted, s1.s2.s3)
   2
a x  - 7
---------------------------------------------------------------------------
   / 1 \
sin| - |
   \ x /

В примере выше, вы видите, что вывод strprint не содержит пробелы, обычно используемые для центрирования. Вывод в первом примере был сосредоточен, потому что это использовало только часть текстовой ширины, в то время как строка s1.s2.s3 во втором примере охватывает общую ширину строки и поэтому распечатан выравнивание по левой границе.

Пример 2

В демонстративных целях давайте запишем область, которая помещает выражение в поле. Мы используем то, что strprint возвращает строки начиная с новой строки output::fence и индексируемого присвоения на строки:

domain box
  print := proc(e)
             local ex, str, w;
             save TEXTWIDTH;
           begin
             if TEXTWIDTH > 15 then 
               TEXTWIDTH := TEXTWIDTH - 4;
             end_if;
             ex := extop(e, 1);
             str := strprint(All, ex);
             w := str[5]+4;
             str := output::fence("| ", " |", 
                                  "\n".str[1]."\n",
                                  str[5], str[6]+1);
             str[1..w]     := "+"._concat("-"$w-2)."+";
             str[-w-1..-2] := "+"._concat("-"$w-2)."+";
             str;
           end_proc;

   new := x -> new(dom, x);
end_domain
print(Plain, box(a), box(sin(1/x)))
       +----------+
+---+  |    / 1 \ |
| a |, | sin| - | |
+---+  |    \ x / |
       +----------+
print(Plain, box(box(hold(E=m*c^2))))
+--------------+
| +----------+ |
| |        2 | |
| | E = m c  | |
| +----------+ |
+--------------+

Пример 3

Как последний пример, мы реализуем метод печати для матриц по 5:

M5 := Dom::Matrix(Dom::IntegerMod(5))

Функция стандартного вывода просто помещает “mod 5” позади каждой записи, наследованной от выходного метода Dom::IntegerMod(5):

A := M5([[1,2,3,4],[5,6,7,8],[-2,-3,0,1]])

Мы теперь заменяем этот метод:

M5::print := proc(A)
               local str, h1, w1, h, w, b;
             begin
               [str, h1, w1, h, w, b] := strprint(All, expr(A));
               _concat(str, " " $ w, "[mod 5]");
             end_proc:
print(A):
/ 1, 2, 3, 4 \
|            |
| 0, 1, 2, 3 |
|            |
\ 3, 2, 0, 1 /
              [mod 5]

Также мы можем установить [mod 5] прямо ниже скобок:

M5::print := proc(A)
               local str;
             begin
               str := strprint(expr(A));
               str[-1..-1] := " [mod 5]";
               str
             end_proc:
print(A):
/ 1, 2, 3, 4 \
|            |
| 0, 1, 2, 3 |
|            |
\ 3, 2, 0, 1 / [mod 5]

Параметры

object1, object2, …

Любые объекты MuPAD®

Опции

All

Когда опция, которую All дан, strprint, возвращает дополнительную информацию о строке, сгенерированной путем печати. А именно, это возвращает список, состоящий из

  1. отформатированная строка,

  2. высота (в символах) первой строки,

  3. ширина первой строки,

  4. высота полной строки,

  5. ширина полной строки,

  6. базовая линия, считаемая сверху донизу.

Пример 2 содержит пример кода, который использует эту информацию.

Unquoted

Отобразите символьные строки без кавычек и с расширенными управляющими символами '\n', '\t' и '\b'.

NoNL

Как Unquoted, но никакая новая строка помещается в конец. PRETTYPRINT неявно установлен в FALSE.

KeepOrder

Отобразите операнды сумм (типа "_plus") всегда во внутреннем порядке.

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

DOM_STRING или список DOM_STRING и пяти целых чисел.

Перегруженный

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

Функции MuPAD