如何在python中格式化LaTeX字符串?

时间:2011-07-12 22:55:52

标签: python string latex format

我正在编写一个应用程序,其中一部分功能是生成LaTeX CV,所以我发现自己处于一种情况,我有像

这样的字符串
\begin{document}
\title{Papers by AUTHOR}
\author{}
\date{}
\maketitle
\begin{enumerate}

%%   LIST OF PAPERS
%%   Please comment out anything between here and the
%%   first \item
%%   Please send any updates or corrections to the list to
%%   XXXEMAIL???XXX

%\usepackage[pdftex, ...

我想填充动态信息,例如电子邮件地址。由于LaTeX本身的格式,使用{email}语法的.format不起作用,也不会使用带有%(email)语法的字典。编辑:特别是,像“\ begin {document}”这样的字符串(LaTeX中的一个命令)应该按字面意思保留,不能替换.format,像“%%”这样的字符串(LaTeX中的注释)也应该是离开,没有替换填充字典。这样做的合理方法是什么?

2 个答案:

答案 0 :(得分:12)

为什么这不起作用?

>>> output = r'\author{{email}}'.format(email='user@example.org')
>>> print output
\author{email}

编辑:使用双花括号来“转义”只有LaTeX才能理解的文字花括号:

>>> output = r'\begin{{document}} ... \author{{{email}}}'.format(
... email='user@example.org')
>>> print output
\begin{document} ... \author{user@example.org}

答案 1 :(得分:3)

您不能使用新的format语法来避免转义{}

这应该有效:

>>> a = r'''
\title{%(title)s}
\author{%(author)s}
\begin{document}'''

>>> b = a % {'title': 'My Title', 'author': 'Me, Of course'}
>>> print(b)

\title{My Title}
\author{Me, Of course}
\begin{document}

您应该使用原始字符串r'something',以避免将\转义为\\

PS:您应该查看txt2tags,一个Python脚本,将t2t格式的文本转换为html,latex,markdown等。检查源代码,看看这些转换是如何完成的。