I just joined a new Slack workspace, and was growing weary of using the codecogs equation editor just to paste in an image of some latex math into Slack.
It took a bit of effort, but I thought I would document the process for anyone who is curious.
You need:
– Slack, obviously
– A Linux server, accessible from anywhere
– Familiarity with some command line
I have a digital ocean droplet hosting this webpage, running Ubuntu 16.04.
First, SSH into your server.
git clone https://github.com/colbygk/mathslax.git
sudo apt-get install nodejs npm
cd mathslax
Second, you will probably need an updated version of node.
sudo npm install -g n
sudo n latest
Third, get mathslax ready.
make install
npm audit fix
Fourth, navigate to slack chat -> Workspace name -> Customize slack -> Apps -> Search for Slash Commands
, install that integration.
Go to Custom Integrations
-> Slash Commands -> Add Configuration
Enter some settings:
Command: /math
URL: http://yourServerName:yourConfiguredPortNumber/slashtypeset
Customize Name: LatexBot
yourServerName
should be your webpage name; e.g., mine is srmart.in
yourConfiguredPortNumber
should be the port that the mathslax server will listen on. E.g., 7777
Write down or copy the Token that is generated for you.
Fifth, in your SSH session or server, create a simple script for launching the mathslax server
#!/bin/sh
cd /usr/local/bin/mathslax
SERVER=yourServerName PORT=yourConfiguredPortNumber SLACK_AUTH_TOKEN="TheToken" node server.js
Save that to /usr/local/bin/tex.sh
, and mark as executable
sudo mv tex.sh /usr/local/bin/tex.sh
sudo chown root:root /usr/local/bin/tex.sh
sudo chmod a+x /usr/local/bin/tex.sh
Sixth, move mathslax to a location. I did not follow best practices; this should probably be in /opt, /usr/share, or some other directory, but whatever.
cd ~
sudo mv mathslax /usr/local/bin/
sudo chown -R root:root /usr/local/bin/mathslax
Finally, create a systemd services script, and place it in /etc/systemd/system/mathslax.service
[Unit]
Description=MathSlax
After=network.target
[Service]
ExecStart=/usr/local/bin/tex.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Then:
sudo systemctl enable mathslax.service
sudo systemctl start mathslax.service
You may need to enable the port in your firewall. If using UFW, then it’s simply sudo ufw allow yourConfiguredPortNumber
In slack, you can then type:
/math \begin{align}y &\sim p(\mu, \sigma) // \mu &\sim N(0,1) \\ \sigma &\sim N^+ N(0,1)\end{align}
And get an image of those three aligned sampling statements.
Edit
Part two. The bot method.
On your server,
git clone https://github.com/sand500/SlackLateX.git
cd SlackLateX
npm install fs
npm install request
npm install websocket
Create a file /usr/local/bin/texbot.sh
with:
#!/bin/sh
cd /usr/local/bin/SlackLateX
node ./bot.js
Create a file /etc/systemd/system/SlackLateX.service
with:
[Unit]
Description=SlackLateX
After=network.target
[Service]
ExecStart=/usr/local/bin/texbot.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Go to your slack chat workspace -> Apps -> Install Slack bots
-> Add configuration:
Customize name: latexbot
Copy the API token, paste it into /usr/local/bin/SlackLateX/secret.txt
Then simply invite latexbot into the channel, and start the bot sudo systemctl start SlackLateX
Now you can type $\pi$
to get a rendering of the pi symbol (or any other latex equation). This method improves upon the first method because it’s channel-specific, and you can edit latex code, which will re-render.
There’s an app for this now on the Slack app store.
https://apps.rocketbooster.net/math
This RocketBooster app doesn’t render Latex, as far as I can see
Is there a code for Mac users?
There is now an app in the Slack App Directory called latexbot (https://nobitasoft.com/latexbot).