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?

Original source

Related problems