#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 в консоли и скопировать и вставить оттуда. Извините, что я не могу больше помочь вам с этой проблемой.