2013-04-28 1 views
9

은 내가 LaTeX의 파일 장고 템플릿에서 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} 

그러나 그들에 특수 문자를 포함 할 수 있도록 내 컬럼없이 매우 큰

를 생성하기 위해 사용이 장고 템플릿을 가지고있다. 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

+0

또는 r '\ ensuremath {<}'및 r '\ suremath {>}' – sastanin

14

코드의 제안을 포함한 Alex의 답변, 원하는 경우 복사 - 붙여 넣기 :

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

관련 문제