I have used TeXmacs on and off over my college years. Just today, I came across it again when I wanted to write a quick mathematical proof to share with one of my colleagues and did not feel like waiting for LaTeX to install on my machine.

Going through the TeXmacs installation directory, I come across something I wasn’t expecting

```
$ ls /Applications/TeXmacs-1.99.12.app/Contents/Resources/share/TeXmacs/plugins
...
mathematica
...
```

Mathematica! that’s cool, I think to myself. Over the last 2 months or so, I have also been trying to learn some mathematica programming and this seemed like something that could make it more useful for me. I looked around in the TeXmacs GUI but could not find any mentions of Mathematica. Having no clue, I went to the mathematica plugin directory to see if I can find something there. One particular file caught my attention

```
bin/tm_mathematica
```

Without much thought, I execute it

```
$ ./bin/tm_mathematica
Mathematica seems not to be installed
```

That’s weird, I’m pretty sure I have mathematica installed. Let’s look at `bin/tm_mathematica`

.

```
MATH0=`which math`
if [ $? -ne 0 ]
then error "Mathematica seems not to be installed"
fi
```

Aha! It detects if mathematica is installed by check if the `math`

executable exists. I’m not sure why I did not have this executable. I had a vague memory of calling the `math`

executable on my university’s machine but that was a few years ago. I looked through the mathematica installation directory to see if I could find any clues.

```
$ ls /Applications/Mathematica.app/Contents/MacOS
MathKernel
Mathematica
MathematicaServer
WolframKernel
wolfram
wolframscript
```

`MathKernel`

looked promising so I fired it up and it seemed to be just like `math`

. At this point, I go ahead and create a script `/usr/local/bin/math`

```
#!/bin/bash
/Applications/Mathematica.app/Contents/MacOS/MathKernel "$@"
```

Now that I had math, the `bin/tm_mathematica`

script could proceed. I ran the script again. This time, I see that it tries to compile a C file but fails due to missing headers (mathlink.h) and libraries (libML64i4 and a few others). I look at the script again and see that the rest of the script does a bunch of stuff but most importantly:

1) Create the environment variable `MATHLINK_PATH`

2) Call `make -f Makefile.lazy`

Looking at `Makefile.lazy`

which is present in the mathematica plugin directory, I see that it calls

```
gcc -m64 -o $(TEXMACS_HOME_PATH)/bin/tm_mathematica.bin src.lazy/tm_mathematica.c -I $(MATHLINK_PATH) -L $(MATHLINK_PATH) -lML64i4 -lm -lpthread -lrt -lstdc++ -ldl -luuid
```

To figure out what `MATHLINK_PATH`

should be, I run:

```
$ locate mathlink.h
/Applications/Mathematica.app/Contents/Documentation/English/System/ReferencePages/Files/mathlink.h.nb
/Applications/Mathematica.app/Contents/Frameworks/mathlink.framework/Versions/4/Headers/mathlink.h
/Applications/Mathematica.app/Contents/Frameworks/mathlink.framework/Versions/4.36/Headers/mathlink.h
/Applications/Mathematica.app/Contents/SystemFiles/Links/MathLink/DeveloperKit/MacOSX-x86-64/CompilerAdditions/mathlink.framework/Versions/4/Headers/mathlink.h
/Applications/Mathematica.app/Contents/SystemFiles/Links/MathLink/DeveloperKit/MacOSX-x86-64/CompilerAdditions/mathlink.framework/Versions/4.36/Headers/mathlink.h
/Applications/Mathematica.app/Contents/SystemFiles/Links/MathLink/DeveloperKit/MacOSX-x86-64/CompilerAdditions/mathlink.h
```

Since `MATHLINK_PATH`

has been used both as an include directory and a link directory, it must contain both, a header and a library. `/Applications/Mathematica.app/Contents/SystemFiles/Links/MathLink/DeveloperKit/MacOSX-x86-64/CompilerAdditions`

was the only path which met those conditions so set that as the `MATHLINK_PATH`

in `bin/tm_mathematica`

.

Next, I notice that `Makefile.lazy`

referred to `TEXMACS_HOME_PATH`

. This was not being set in `tm_mathematica`

so I go ahead and also set that in the script.

```
export MATHLINK_PATH="/Applications/Mathematica.app/Contents/SystemFiles/Links/MathLink/DeveloperKit/MacOSX-x86-64/CompilerAdditions"
export TEXMACS_HOME_PATH="$HOME/.TeXmacs"
```

I run `bin/tm_mathematica`

again and this time things actually seem to move, however, I again end up with a bunch of linker errors. After a little bit of googling I come across this page https://community.wolfram.com/groups/-/m/t/610879 which talked about linking errors.

Here are the contents of that page:

Question

On OS X 10.11 with Mathematica 10.0.0.0 while linking I get a slew of errors starting with the following. I am using clang-700.1.76. I suspect I am missing some library in linking, but cannot seem to find where this is coming from. Any help would be much appreciated.

Undefined symbols for architecture x86_64: “_CFDictionaryCreate”, referenced from: MLAlertdarwin in libMLi4.a(mlosx.c.o) MLRequestdarwin in libMLi4.a(mlosx.c.o) MLConfirmdarwin in libMLi4.a(mlosx.c.o)

Answer

In case anyone else runs into this I was able to solve it with the following:

compile with cc link with g++ (both are clang++ modulo a configuration prefix and gxx-include dir)

In linking used the flags: -stdlib=libstdc++ -framework Foundation -lc++

Reading this, I modify Makefile.lazy to use this:

```
$(TEXMACS_HOME_PATH)/bin/tm_mathematica.bin: src.lazy/tm_mathematica.c
cc -c src.lazy/tm_mathematica.c -I $(MATHLINK_PATH) -o /tmp/tm_mathematica.o
g++ /tmp/tm_mathematica.o -L $(MATHLINK_PATH) -lMLi4 -lm -lpthread -luuid -ldl -framework Foundation -lc++ -o $(TEXMACS_HOME_PATH)/bin/tm_mathematica.bin
```

I also had to install `ossp-uuid`

to be able to use `-luuid`

in the Makefile.

```
brew install ossp-uuid
```

On running `bin/tm_mathematica`

again, everything goes smoothly.

Next I start TeXmacs to see if I actually had access to mathematica now.

Insert -> Session -> Mathematica

There it was!

On starting the Mathematica session I get the text “Mathematica” and the usual mathematica prompt “In[1]” in red which I did not like because all that red seemed like there was some error however everything seemed to work fine.

Out of curiosity, I check `src.lazy/tm_mathematica.c`

and there I see

```
fputs("\2latex:\\red Mathematica",stdout);
while (1) {
/* Prompt */
printf("\2prompt#\\red In[%1d]:= {}\5\5",InNum++);
fflush(stdout);
if (getline(&input,&size,stdin)>=0) command(input);
}
```

I change the “red” to “blue”, re-run `bin/tm_mathematica`

, restart TeXmacs, start mathematica session and sure enough, I see a blue prompt this time. This is all for the time being but there are a few limitations I would like to find a solution to:

1) Plotting does not work 2) Mathlink seems to have been deprecated in favor of WSTP 3) The tm_mathematica script does not work out of the box