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

Я вызвал 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?


person xport    schedule 11.06.2011    source источник


Ответы (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

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

person jmbr    schedule 11.06.2011
comment
@jmbr: я также получаю сообщение об ошибке при вызове tex1(expand((x+y+z)^3)); :-( - person xport; 11.06.2011
comment
@xport: у меня работает нормально, но я использую последнюю версию Git Maxima (это может быть причиной). - person jmbr; 11.06.2011
comment
@xport: paste.lisp.org/display/122568 я уже отправил небольшой патч в Список Максима, посмотрим, что скажут разработчики. - person jmbr; 11.06.2011
comment
Ошибка появилась после изменения исходного кода? Если да, то подождите, пока разработчики что-нибудь скажут по поводу моего патча. В противном случае опубликуйте сообщение об ошибке там. Я просто копирую и вставляю вывод. - person jmbr; 11.06.2011
comment
@xport: В таком случае да, заполните отчет об ошибке. Вы можете написать bug_report(); внутри Maxima, и это укажет вам на трекер ошибок. Что касается проблемы с копированием и вставкой из wxMaxima, я не знаю, я использую Maxima внутри Emacs, но я думаю, вы можете вызвать Maxima в консоли и скопировать и вставить оттуда. Извините, что не могу больше помочь вам с этой проблемой. - person jmbr; 11.06.2011

Извините за задержку с ответом.

Вместо

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

записывать:

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

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

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

person Robert Dodier    schedule 11.09.2011