我想利用Maxima作为后端来解决我的LaTeX输入文件中使用的一些计算。 我做了以下步骤。
下载并安装Maxima。
创建名为cas.bat
的批处理文件(例如),如下所示。
rem cas.bat
echo off
set PATH=%PATH%;"C:\Program Files (x86)\Maxima-5.31.2\bin"
maxima --very-quiet -r %1 > solution.tex
将批处理保存在下面输入文件所在的同一目录中。这只是为了简单起见。
创建名为main.tex
的输入文件(例如),如下所示。
% main.tex
\documentclass[preview,border=12pt,12pt]{standalone}
\usepackage{amsmath}
\def\f(#1){(#1)^2-5*(#1)+6}
\begin{document}
\section{Problem}
Evaluate $\f(x)$ for $x=\frac 1 2$.
\section{Solution}
\immediate\write18{cas "x: 1/2;tex(\f(x));"}
\input{solution}
\end{document}
使用pdflatex -shell-escape main
编译输入文件,您将获得一个不错的输出,如下所示。
!
完成。
显然Maxima的输出如下。我不知道如何让它更清洁。
solution.tex
1
-
2
$${{15}\over{4}}$$
false
现在,我的问题是
\frac{15}{4}
的情况下获得$$...$$
?答案 0 :(得分:10)
(1)要抑制输出,请使用美元符号(即$
)而不是分号(即;
)终止输入表达式。
(2)要获得TeX-ified表达式sans环境分隔符(即$$
),请调用tex1
而不是tex
。请注意tex1
返回一个字符串,您必须自己打印(tex
会为您打印)。
将这些想法与您展示的内容相结合,我认为您的程序可能如下所示:
"x: 1/2$ print(tex1(\f(x)))$"
我想您可能会发现Maxima邮件列表很有帮助。 [1]我很确定已经有多次尝试创建一个系统,例如你描述的系统。你也可以看一下[2]。
[1] http://maxima.sourceforge.net/maximalist.html [2] http://maxima.sourceforge.net/relatedprojects.html
答案 1 :(得分:3)
如果您真的想使用LaTeX,那么maxiplot包就是答案。它提供了一个maxima
环境,您可以在其中输入Maxima命令。处理LaTeX文件时,会生成Maxima批处理文件。使用Maxima处理此文件并再次处理LaTeX文件以排版Maxima生成的方程式。
如果您希望使用实时排版进行2D数学输入,请使用TeXmacs。它是一个跨平台的文档创作环境(如果你愿意,可以使用类固醇的文字处理器),包括Maxima,Mathematica和更多科学计算工具的插件。如果您对排版需要或不满意,可以将文档导出到LaTeX。
答案 2 :(得分:2)
我无法找到任何方法在Maxima内部完全清理Maxima的输出。它始终回显输入行,并始终在输出后写入一些空格。以下是完成清理的perl脚本示例。
#!/usr/bin/perl
use strict;
my $var = $ARGV[0];
my $expr = $ARGV[1];
sub do_maxima_to_tex {
my $m = shift;
my $c = "maxima --batch-string='exptdispflag:false; print(tex1($m))\$'";
my $e = `$c`;
my @x = split(/\(%i\d+\)/,$e); # output contains stuff like (%i1)
my $f = pop @x; # remove everything before the echo of the last input
while ($f=~/\A /) {$f=~s/\A .*\n//} # remove echo of input, which may be more than one line
$f =~ s/\\\n//g; # maxima breaks latex tokens in the middle at end of line; fix this
$f =~ s/\n/ /g; # if multiple lines, get it into one line
$f =~ s/\s+\Z//; # get rid of final whitespace
return $f;
}
my $e1 = do_maxima_to_tex("diff($expr,$var,1)");
my $e2 = do_maxima_to_tex("diff($expr,$var,2)");
print <<TEX;
The first derivative is \$$e1\$. Differentiating a second time,
we get \$$e2\$.
TEX
如果您将此脚本命名为a.pl,则执行
a.pl z 3*z^4
输出:
The first derivative is $12\,z^3$. Differentiating a second time,
we get $36\,z^2$.
对于OP的应用程序,像这样的脚本可能是latex文件中write18调用的内容。
答案 3 :(得分:1)
我知道这是一个很老的帖子。 OP提出的问题的极好的答案。我像OP一样长时间在命令行上使用--very-quiet -r
选项,但是在maxima version 5.43.2
中它们的行为有所不同。参见maxima command line v5.43 is behaving differently than v5.41。我通过交叉引用来回答这个问题,因为在将这些答案合并到您的解决方案中时,请确保也合并了这些命令行标志的行为更改。