2013-04-28 3 views
9

मैं जो मैं LaTeX फ़ाइलोंमैं django टेम्पलेट्स के अंदर लाटेक्स विशेष पात्रों से कैसे बच सकता हूं?

\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} 

लेकिन मेरे कॉलम का कोई बहुत बड़े हैं तो वे उन में कोई विशेष वर्ण कर सकते हैं उत्पन्न करने के लिए उपयोग करने के लिए इस Django टेम्पलेट है। मुझे पीडीएफ फ़ाइल उत्पन्न करते समय त्रुटि मिल रही है।

मैं सभी कॉलम में सभी टेक्स्ट से कैसे बच सकता हूं?

उत्तर

3

कुछ इस तरह करना चाहिए:

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 "&%$#_{}~^\\"])) 

आप अपने चर फिल्टर करने के लिए खुद का टेम्पलेट फ़िल्टर बनाएं

[संपादित करें]:

इस संदर्भ के लिए विशेष वर्ण था, लेटेक्स के लिए, अनुकूलन साथ:

\& \% \$ \# \_ \{ \} \textasciitilde{} \^{} \textbackslash{} 
+1

आर '\ textgreater' r '\ textless' – blueberryfields

+0

या आर '\ suremath {<}' और आर '\ suremath {>}' – sastanin

14

एलेक्स का उत्तर कोड में सुझावों सहित, यदि आप टी चाहते हैं ओ कॉपी-पेस्ट:

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(unicode(key)) for key in sorted(conv.keys(), key = lambda item: - len(item)))) 
    return regex.sub(lambda match: conv[match.group()], text) 

प्रतिस्थापन दृष्टिकोण के लिए Easiest way to replace a string using a dictionary of replacements? देखें।

+0

भी कोड के लिए धन्यवाद शामिल करना न भूलें! मुझे लगता है कि 'textless' और' textgreater' के बाद भी एक जगह होनी चाहिए। मुझे "अपरिभाषित नियंत्रण अनुक्रम" मिला क्योंकि '

+0

बन गया यह बहुत अच्छा है, धन्यवाद! – ikku100

संबंधित मुद्दे