I have this django template which I use to generate LaTeX files
\\documentclass[11pt]{report}
\\begin{document}
\\begin{table}
\\centering
\\begin{t
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.
Something like this should do:
CHARS = {
'&': r'\&',
'%': r'\%',
'$': r'\$',
'#': r'\#',
'_': r'\letterunderscore{}',
'{': r'\letteropenbrace{}',
'}': r'\letterclosebrace{}',
'~': r'\lettertilde{}',
'^': r'\letterhat{}',
'\\': r'\letterbackslash{}',
}
print("".join([CHARS.get(char, char) for char in "&%$#_{}~^\\"]))
Create you own template filter to filter your variables
[edit]:
This was the special characters for ConText, for LaTex, adapt with:
\& \% \$ \# \_ \{ \} \textasciitilde{} \^{} \textbackslash{}