Как отформатировать строку LaTeX в python?

Я пишу приложение, частью функциональности которого является создание LaTeX CVs, поэтому я нахожусь в ситуации, когда у меня есть строки, такие как

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, ...

который я хотел бы заполнить динамической информацией, например, адресом электронной почты. Из-за формата самого латекса .формат с синтаксисом {email} не будет работать, и также не будет использовать словарь с синтаксисом %(email)s. Edit: в частности, такие строки, как "begin{document}" (команда в LaTeX) должны быть оставлены буквально, как они есть, без замены от .формат и строки, такие как "% % " (комментарий в LaTeX), также должны быть оставлены без замены из заполняющего словаря. Какой разумный способ это сделать?

2 ответов


почему это не работает?

>>> 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}

вы не можете использовать новый 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' чтобы избежать побега \ as \.

PS: вы должны взглянуть на txt2tags, скрипт Python для преобразования форматированного текста t2t в html, latex, markdown и т. д. Проверьте исходный код, чтобы увидеть, как выполняются эти преобразования.