用于复制.tex文件的Python脚本,只需很小的更改

时间:2016-06-14 17:55:34

标签: python scripting latex

我有一封LaTeX格式的信。我想在python中编写一个带有一个参数(收件人)的短脚本,并创建一个带有通用字母格式和收件人的.tex文件。

    from sys import argv
    script, addressee = argv
    file = open('newletter.tex', 'w')
    file.write("\begin{Document} Dear " + addressee + ", \n Greetings, how are you? Sincerely, Me \end{Document}")
    file.close()

写出大块文本是否有更好的功能?此外,您可以看到.tex文件将包含编程语法 - 只要它被强制转换为字符串,python会忽略它吗?我需要强制一个大块来串?提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果您直接在解释器中输入print "\begin...",您会注意到结果将省略字符串前面的\b。这是因为\b是一个字符,print语句(或者如果你在3.x中的函数)识别(它碰巧是退格键)。

为了避免这种混淆,你可以使用"原始字符串",在python中用预先挂起的' r'表示:

>>> a = "\begin"
>>> b = r"\begin"
>>> print a
egin
>>> print b
\begin
>>>

通常,在使用字符串表示文件路径或其他可能包含\字符的内容时,您应该使用原始字符串。

至于将信息插入模板,我建议使用format()函数而不是字符串连接。为此,您的字符串将如下所示:

r"\begin{{Document}} Dear {} \n Greetings, how are you? Sincerely, Me \end{{Document}}".format(addressee)

函数的参数(在本例中为addressee)将插入到字符串中的每个{}中。出于这个原因,应该按字面解释的大括号必须通过将它们包含在一起进行转义。

答案 1 :(得分:1)

我首先将创建tex文件的方法设置为letter.tex,并将收件人设置为QXQ_ADDRESSEE_QXQ。

在python脚本中,我将整个文件读入内存。当您从文件中读取时,它将被视为具有正确转义的原始字符串。

with open('letter.tex', 'r') as f:
   raw_letter = f.readlines()

然后只需进行替换并将字符串写入文件。

raw_letter.replace("QXQ_ADDRESSEE_QXQ", newname)
with open('newletter.tex', 'w') as f:
  f.write(raw_letter)