# How can I render equations in an API response as an image file

I would like to make an API call, that returns a mixture of text and mathematical equations, and save the rendered output as an image file.

So far I’ve been trying pyplot library in Python, but results are not consistent. It seems the response from the API needs some pre-processing before pyplot can render it (such as replacing [ with $) even then it only gets rendered correctly on some of the cases. Simple formatting such as wrapping breaks the rendering. Is there a known, consistently working way of rendering equations? Python is preferred but I don’t have to use it. Ideally I would like to generate PNGs, but can be other formats as well. Intention is to run the rendering algorithm for 100s of prompts hence I am looking a solution that can be repeated without human intervention. Thanks in advance Edit: See below post for a more robust solution. 1 Like Hi @elmstedt , Thanks for your reply. Is this actually working for you ? I may be doing something wrong. I use this prompt: Explain solution of 3x+5=0, use latex notation and create a full latex document It outputs: \begin{document} \title{Solution of the Equation$3x+5=0$} \author{Your Name} \date{} \maketitle We want to solve the equation$3x+5=0$for$x. To do this, we first subtract 5 from both sides of the equation: \begin{align*} 3x+5 &= 0 \\ 3x+5-5 &= 0-5 \\ 3x &= -5 \end{align*} Next, we divide both sides by 3 to solve forx: \begin{align*} \frac{3x}{3} &= \frac{-5}{3} \\ x &= -\frac{5}{3} \end{align*} Therefore, the solution to the equation3x+5=0$is$x = -\frac{5}{3}. \end{document}  When I pass this to latex, I get many errors, undefined control sequence, environment align* not defined, misplaced alignment character & and more. Not familiar with LaTex so I might be doing something silly. Ok, it works. Needed adding following on top of the document: \documentclass[12pt]{article} \usepackage{amsmath} \oddsidemargin=0pt \topmargin=0pt \textwidth=6.5in \textheight=8.5in  I think the first two lines were required, rest doing some additional formatting. Resultant pgn doesn’t look very nice but I suppose it needs further formatting. Perhaps outside the scope of this forum. Thanks a lot for the help. 1 Like Yeah, I was going to note that you’re missing the preamble. Anyway, for standalone equations I put this together which works nicely. tex2img.sh #!/bin/bash output_filename="eq.png" while getopts e:o: flag do case "{flag}" in
e) latex_equation=${OPTARG};; o) output_filename=${OPTARG};;
esac
done

if [ -z "$latex_equation" ]; then echo "Usage:$0 -e '<LaTeX equation>' [-o <output filename>]"
exit 1
fi

output_format="${output_filename##*.}" if ! command -v pdflatex &> /dev/null; then echo "pdflatex could not be found. Please install it using:" echo "sudo apt-get install texlive" exit 1 fi if ! command -v convert &> /dev/null; then echo "ImageMagick's convert could not be found. Please install it using:" echo "sudo apt-get install imagemagick" exit 1 fi if [ "$output_format" == "svg" ]; then
if ! command -v pdf2svg &> /dev/null; then
echo "pdf2svg could not be found. Please install it using:"
echo "sudo apt-get install pdf2svg"
exit 1
fi
fi

pdflatex -jobname=temp <<EOT > /dev/null 2>&1
\documentclass[border=2mm]{standalone}
\usepackage{amsmath}
\begin{document}
$$latex_equation$$
\end{document}
EOT

if [ "$output_format" == "svg" ]; then pdf2svg temp.pdf "$output_filename" > /dev/null 2>&1
else
convert -density 300 temp.pdf -quality 90 "\$output_filename" > /dev/null 2>&1
fi

rm temp.aux temp.log temp.pdf


Which you can then call like,

png
./tex2img.sh -e 'e^{i\pi} + 1 = 0' -o euler.png -d 800


webp
./tex2img.sh -e 'e^{i\pi} + 1 = 0' -o euler.webp -d 800


etc…