Как предотвратить перенос вывода Maxima tex1?

#maxima

#максимальные

Вопрос:

Я вызвал Maxima tex1 из пакетного скрипта следующим образом:

 maxima --very-quiet -r "tex1(solve(8*x^2 7*x 5));" | grep -v false > output.txt
  

и я получил output.txt следующее:

  left[ x=-{{sqrt{111},i 7}over{16}} , x={{sqrt{111},i-7}over{16}} righ
t] 
  

это недопустимо в качестве входного файла (La) TeX.

Как предотвратить перенос вывода Maxima tex1 ?

Ответ №1:

Извините за поздний ответ.

Вместо

tex1(решить(8 * x ^ 2 7 * x 5));

написать:

?princ(tex1(решить(8 * x ^ 2 7 * x 5)))$

Проблема в том, что строка, возвращаемая tex1, печатается средством форматирования дисплея (той же функцией, которая печатала бы строку, если бы вы использовали Maxima в интерактивном сеансе). Средство форматирования отображения разбивает строки на линейные символы (по умолчанию = 79) и вставляет обратную косую черту. Вместо этого для ваших целей вы хотите полностью избежать форматирования дисплея, поэтому вы печатаете строку с помощью ?princ (функция Lisp для простой печати строки) и завершает ввод с помощью «$» вместо «;», чтобы сообщить Maxima не вызывать средство форматирования дисплея.

Обратите внимание, что жестко запрограммированная константа 70 в MYPRINC здесь не играет роли. MYPRINC не вызывается в приведенном примере.

Ответ №2:

К сожалению, это жестко запрограммировано в Maxima. Способ решить эту проблему — отредактировать функцию myprinc, расположенную в файле maxima/src/mactex.lisp . Существует cond форма, которая имеет значение 70. там написано, что он должен читать linel вместо 70. Если вы перекомпилируете maxima после внесения этого изменения, то будет работать следующее:

 maxima --very-quiet -r "linel: 1000$ tex1(solve(8*x^2 7*x 5));" | grep -v false > output.txt
  

В любом случае, я отправлю исправление к списку максимумов как можно СКОРЕЕ, чтобы в будущих версиях программы не было этого недостатка.

Комментарии:

1. @jmbr: Я также получаю ошибку при вызове tex1(expand((x y z)^3)); 🙁

2. @xport: у меня все работает нормально, но я использую последнюю версию Maxima для Git (возможно, в этом причина).

3. @xport: paste.lisp.org/display/122568 Я уже отправил небольшой патч к списку максимумов, давайте посмотрим, что скажут разработчики.

4. Ошибка появилась после изменения исходного кода? Если да, то подождите, пока разработчики не скажут что-нибудь о моем патче. В противном случае опубликуйте там сообщение об ошибке. Я просто скопировал и вставил вывод.

5. @xport: В таком случае, да, заполните отчет об ошибке. Вы можете написать bug_report(); внутри Maxima, и это укажет вам на средство отслеживания ошибок. Что касается проблемы копирования и вставки из wxMaxima, я не знаю, я использую Maxima внутри Emacs, но я думаю, вы могли бы вызвать Maxima в консоли и скопировать и вставить оттуда. Извините, что я не могу больше помочь вам с этой проблемой.