How can I escape LaTeX special characters inside django templates?
django, pdflatex, python
Solution
Alex's answer including suggestions in code, if you want to copy-paste:
import re
def tex_escape(text):
"""
:param text: a plain text message
:return: the message escaped to appear correctly in LaTeX
"""
conv = {
'&': r'\&',
'%': r'\%',
'$': r'\$',
'#': r'\#',
'_': r'\_',
'{': r'\{',
'}': r'\}',
'~': r'\textasciitilde{}',
'^': r'\^{}',
'\\': r'\textbackslash{}',
'<': r'\textless{}',
'>': r'\textgreater{}',
}
regex = re.compile('|'.join(re.escape(str(key)) for key in sorted(conv.keys(), key = lambda item: - len(item))))
return regex.sub(lambda match: conv[match.group()], text)
See Easiest way to replace a string using a dictionary of replacements? for replacement approach.
Problem
I have this django template which I use to generate LaTeX files ``` \documentclass[11pt]{report} \begin{document} \begin{table} \centering \begin{tabular}{lcr} \hline {% for col in head %} \textbf{ {{col}} } {% if not forloop.last %} & {% endif %} {% endfor %} \\ \hline {% for row in table %} {% for cell in row %} {% if not forloop.last %} & {% endif %} {% endfor %} \\ {% endfor %} \hline \end{tabular} \caption{Simple Phonebook} \label{tab:phonebook} \end{table} \end{document} ``` But my no of columns are very large so they can contain any special characters in them. I am getting error while generating pdf file. How can I escape all the text in all columns?