On 03/02/2015 05:40 PM, alb wrote:
Hi Dave,

Dave Angel <da...@davea.name> wrote:
[]
or use a raw string:

i = r'\\ref{fig:abc}'

Actually that'd be:
    i = r'\ref{fig:abc}'

Could you explain why I then see the following difference:

In [56]: inp = r'\\ref{fig:abc}'

print inp
   and you should get
     \\ref{fig:abc}


In [57]: print pypandoc.convert(inp, 'latex', format='rst')
\textbackslash{}ref\{fig:abc\}


In [58]: inp = r'\ref{fig:abc}'

print inp
    and you should get
       \ref{fig:abc}

This is NOT the same.

The rules are not arbitrary. They're quite necessary, and it's the same for lots of different languages. When in a regular literal, the backslash is an escape character that combines with the following character. When in a raw literal, the backslash is a backslash, unless it's at the end of the string, in which case it's not the end of the string, it's an escaped quotation. (Or something. Just don't use *trailing* backslash in a raw literal)


In [59]: print pypandoc.convert(inp, 'latex', format='rst')
ref\{fig:abc\}

The two results are clearly *not* the same, even though the two inp
/claim/ to be the same...


When I said backslashes are not special in data read from a file, I should also say neither are quotes, or tabs, or anything else. Python just reads them in, and stuffs them into a string object. Newlines are special if you use readline(), but if you use read(), they're not special either (except on MSDOS compatible variants, which use two bytes for newline. Even there, if you read a file in "b" mode, they're not special either.

So your code is going to mostly be getting strings from files, or from calculations, and these backslashes won't be special. It's only in *testing* that you usually deal with this literal stuff. Or in places where the data is fixed, and hardcoded in the source.


--
DaveA
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to