Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I want to make use of Mathematica as the backend to solve some computations used in my LaTeX input file. As I have no knowledge to make it in Mathematica, I used Maxima as explained in the following steps that I got somewhere on the internet.

Step 1

Download and install Maxima.

Step 2

Create a batch file named cas.bat (for example) as follows.

rem cas.bat
echo off
set PATH=%PATH%;"C:\Program Files (x86)\Maxima-5.31.2\bin"
maxima --very-quiet -r %1 > solution.tex

Save the batch in the same directory in which your input file below exists. It is just for the sake of simplicity.

Step 3

Create the input file named main.tex (for example) as follows.

% 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}

Step 4

Compile the input file with pdflatex -shell-escape main and you will get a nice output as follows.

enter image description here

Questions

Apparently the output of Maxima is as follows. I don't know how to make it cleaner.

solution.tex

                                       1
                                       -
                                       2
$${{15}\over{4}}$$
                                     false

Now, my questions are

  • how to implement the scenario above in Mathematica?
  • if Mathematica also produces the unnecessary texts, how to remove such texts?
  • if Mathematica also produces the same output format, how to obtain just \frac{15}{4} without $$...$$?
share|improve this question
add comment

1 Answer 1

up vote 26 down vote accepted

This is a good application for the highly underused Splice function which has been in Mathematica since version 1 (I don't recall it ever being used on this site).

  1. Create a file called main.mtex with the following text:

    \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}
    $ <* f[x_] := x^2 - 5 x + 6; f[1/2] *> $
    \end{document}
    

    Everything you want Mathematica to evaluate should be written between <* *>.

  2. In Mathematica, run Splice["main.mtex"] (replace with the correct path to your file). The Splice function reads the file and replaces the text between <* *> with its Mathematica output. The default output for input files with the extension .mtex is TeXForm, which mostly does a good job of translating to LaTeX for non-complicated expressions.

  3. Compile the main.tex file that is created as an output of Splice.

    enter image description here


Rather than using a TeX macro to expand the equation, I would suggest using Mathematica here as well. Here's a modified example:

\documentclass[preview,border=12pt,12pt]{standalone}
\usepackage{amsmath}
% <* f[x_] := x^2 - 5 x +6 *>
\begin{document}
\section{Problem}
Evaluate $ <* f[x] *> $ for $x=\frac 1 2$.

\section{Solution}
$$ <* f[1/2] *> $$

\end{document}

The definition f[x_] will be available to Mathematica throughout the splice operation and we can use this to make the text replacement as well. I think it would be a much simpler solution than hacking something together with TeX/interpreting the macro in Mathematica. Note that I commented out the f[x_] definition in TeX, because Mathematica outputs Null for that operation, which gets inserted as \text{Null} and we don't want that. The result is the same (perhaps better than using the TeX macro):

enter image description here

share|improve this answer
    
Perhaps not here, but stackoverflow.com/a/1688457/353410 –  belisarius Dec 2 '13 at 2:06
    
@DonutE.Knot You can create a MathematicaScript. I don't have the time to do this now, but you can look at questions and answers here using this. How to use Mathematica functions in Python programs? and Reading from STDIN, or: how to pipe data into Mathematica might be of use. –  rm -rf Dec 2 '13 at 2:45
    
How to show * for multiplication in x^2 -5 x+6 produced by Splice? Some plotting macros (PSTricks) need the *. –  Please don't touch Dec 2 '13 at 3:20
1  
Underused indeed. I do not recall ever having used it, but it is a very good match for this question. +1! –  Sjoerd C. de Vries Dec 2 '13 at 10:34
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.