2012-04-19 26 views
1

標題說明全部。我有以下代碼,第9和18行包含所述字符。沒有使用chr(92)的方法嗎?text_widget.insert(1.0,「\」)只會顯示一個斜線

def Conversion(self): 
    self.t=self.input.Read() 
    self.columns=1  
    for i in range(len(self.t)): 
     if self.t[i]==chr(9): 
      self.columns+=1 
     elif self.t[i]==chr(10): 
      break    
    self.c="\begin{tabular} ["  
    self.c+="c"*self.columns 
    self.c+="] \n" 
    for i in range(len(self.t)): 
     #self.c+=str(ord(self.t[i])) 
     #self.c+=" " 
     if self.t[i]==chr(9): 
      self.c+='&' 
     elif self.t[i]==chr(10): 
      self.c+='\\' 
      self.c+="\n" 
     else: 
      self.c+=self.t[i] 
    self.c+="\end{tabular}" 
    self.output.Write(self.c) 

而且我.WRITE方法是這樣的:

class Output: 
def __init__(self,master,x): 
    self.v=Text(master,width=x) 
    self.v.pack(side=RIGHT) 
    self.v.insert(1.0,"LaTeX code") 
def Write (self,input): 
    self.input=input 
    if self.v.get(1.0,END)=="": 
     self.v.insert(1.0,self.input) 
    else: 
     self.v.delete(1.0,END) 
     self.v.insert(1.0,self.input) 

回答

4

嘗試轉義字符\,你需要每次在文本中\,寫兩個\這樣的:

self.c='\\begin{tabular} [' 

或使用raw strings

self.c=r'\begin{tabular} [' 
+0

第一種方法給出了三個斜槓('///')的錯誤,但第二個方法完美地工作。你能解釋一下實際上做了什麼嗎?什麼是逃避? – 2012-04-19 15:29:33

+1

對於第一種方法:每次你需要一個\,寫_two_。這就是爲什麼\\\會失敗,但\\\\將工作。對於第二種方法,'r''字符串被稱爲[原始字符串](http://docs.python.org/reference/lexical_analysis.html#string-literals),並使用不同的規則來解釋反斜槓轉義序列 – 2012-04-19 15:33:52

+2

有一些字符在字符串中有特殊含義(例如:'''''''用於編寫不可見字符:'\ n','\ t' ...或'「',用於指定字符串的末尾轉義是指在字符串中使用這些字符(這些字符而不是他們的抽象角色),它是通過在Python中(以及其他許多語言)通過在前面添加'''''來完成的,例如'「Mark說\「你好!\」。「',或者你的情況''\\」' – FabienAndre 2012-04-19 16:05:23