Как не дать Maxima tex1 обернуть вывод? - PullRequest
0 голосов
/ 11 июня 2011

Я вызвал 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 свернуть вывод?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

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

Вместо

TEX1 (решение (8 * х ^ 2 + 7 * х + 5));

запись:

? Princ (TEX1 (решение (8 * х ^ 2 + 7 * х + 5))) $

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

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

1 голос
/ 11 июня 2011

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

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

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

...