Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I escape latex code received through user input?

I read in a string from a GUI textbox entered by the user and process it through pandoc. The string contains latex directives for math which have backslash characters. I want to send in the string as a raw string to pandoc for processing. But something like "\theta" becomes a tab and "heta".

How can I convert a string literal that contains backslash characters to a raw string...?

Edit:

Thanks develerx, flying sheep and unutbu. But none of the solutions seem to help me. The reason is that there are other backslashed-characters which do not have any effect in python but do have a meaning in latex.

For example '\lambda'. All the methods suggested produce

\\lambda 

which does not go through in latex processing -- it should remain as \lambda.

Another edit:

If i can get this work, i think i should be through. @Mark: All three methods give answers that i dont desire.

a='\nu + \lambda + \theta';  b=a.replace(r"\\",r"\\\\");  c='%r' %a;  d=a.encode('string_escape'); print a  u + \lambda +   heta print b  u + \lambda +   heta print c '\nu + \\lambda + \theta' print d \nu + \\lambda + \theta 
like image 766
Vijay Murthy Avatar asked Aug 31 '11 20:08

Vijay Murthy


2 Answers

Python’s raw strings are just a way to tell the Python interpreter that it should interpret backslashes as literal slashes. If you read strings entered by the user, they are already past the point where they could have been raw. Also, user input is most likely read in literally, i.e. “raw”.

This means the interpreting happens somewhere else. But if you know that it happens, why not escape the backslashes for whatever is interpreting it?

s = s.replace("\\", "\\\\") 

(Note that you can't do r"\" as “a raw string cannot end in a single backslash”, but I could have used r"\\" as well for the second argument.)

If that doesn’t work, your user input is for some arcane reason interpreting the backslashes, so you’ll need a way to tell it to stop that.

like image 183
flying sheep Avatar answered Oct 03 '22 20:10

flying sheep


If you want to convert an existing string to raw string, then we can reassign that like below

s1 = "welcome\tto\tPython" raw_s1 = "%r"%s1 print(raw_s1) 

Will print

welcome\tto\tPython 
like image 24
prasad Avatar answered Oct 03 '22 22:10

prasad