How can I escape LaTeX special characters inside django templates?

后端 未结 2 1767
无人共我
无人共我 2020-12-31 07:09

I have this django template which I use to generate LaTeX files

\\documentclass[11pt]{report}

\\begin{document}
\\begin{table}
    \\centering
    \\begin{t         


        
相关标签:
2条回答
  • 2020-12-31 07:23

    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.

    0 讨论(0)
  • 2020-12-31 07:38

    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{}
    
    0 讨论(0)
提交回复
热议问题