2013-04-28 84 views
9

我有我用它來生成LaTeX文件我怎樣才能逃避內部Django模板LaTeX的特殊字符?

\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的模板。生成pdf文件時出現錯誤。

我怎麼能逃避所有列的所有文本?

回答

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

不要忘了還包括r'\ textgreater'r'\ textless' – blueberryfields 2013-05-14 01:55:58

+0

或r'\ ensuremath {<}'和r'\ ensuremath {>}' – sastanin 2014-09-15 10:53:23

14

亞歷克斯的答案包括代碼的建議,如果你想噸o複製粘貼:

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'後'的空間。我得到了「未定義控制序列」,因爲'<了''成了\ textlessa' – 2017-06-16 10:54:19

+0

這是偉大的,謝謝! – ikku100 2017-07-11 13:14:22

相關問題