2011-07-12 4 views
8

Piszę aplikację, których część funkcji jest generowanie LaTeX CV, więc znalazłem się w sytuacji, gdzie mam ciągi jakJak sformatować ciąg znaków LaTeX w python?

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

której chciałbym, aby wypełnić z dynamicznych informacji, na przykład adres e-mail. Ze względu na format samego LaTeX, format .format ze składnią {email} nie będzie działał, ani też nie będzie używał słownika ze składnią% (email). Edycja: w szczególności ciągi takie jak "\ begin {document}" (polecenie w LaTeX) powinny być pozostawione dosłownie tak jak są, bez zamiany z .format, a napisy takie jak "%%" (komentarz w LaTeX) również powinny być lewo, bez zastąpienia z wypełniacza słownika. Jaki jest rozsądny sposób na zrobienie tego?

+0

Działając przy założeniu, że tak naprawdę nie chcę pisać %% dla% wszędzie ... –

+0

Jakiej wersji Python używasz? str.format() jest nowy w wersji 2.6 – Usagi

+0

Obecnie używa 2.7 –

Odpowiedz

9

Dlaczego to nie zadziała?

>>> output = r'\author{{email}}'.format(email='[email protected]') 
>>> print output 
\author{email} 

edit: Użyj podwójnych nawiasów klamrowych do „ucieczki” dosłowny nawiasów klamrowych, że tylko LaTeX rozumie i:

>>> output = r'\begin{{document}} ... \author{{{email}}}'.format(
... email='[email protected]') 
>>> print output 
\begin{document} ... \author{[email protected]} 
+0

out = r '' ' ...: \ begin {document} ...: {{email}}' ''. Format (email='[email protected] ') ---- -------------------------------------------------- --------------------- Traceback KeyError (ostatnie ostatnie połączenie) /home/valkyrie/projects/invenio/modules/websearch/lib/ in () KeyError: 'document' –

+1

LaTeX zawiera rzeczy z nawiasami klamrowymi, które powinny być przechowywane niezmodyfikowane (w tym same nawiasy klamrowe). –

+0

Używaj podwójnych nawiasów klamrowych dla tych (w zasadzie ich unikając) – Santa

2

Użytkownik nie może korzystać z nowej składni format aby uniknąć ucieczki { i }.

To powinno działać:

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

Należy stosować surowe ciągi r'something' aby uniknąć ucieczki \ jak \\.

PS: Powinieneś rzucić okiem na txt2tags, skrypt w języku Python, aby przekonwertować tekst sformatowany w t2t na html, latex, markdown itd. Sprawdź kod źródłowy, aby zobaczyć, jak te konwersje są wykonywane.

+0

Narzeka na Komentarze LaTeXa, np Mam wiersz z napisem "% \ usepackage ....", który powoduje, że narzędzie formatujące słownie się składa. Zajrzę jednak do txt2tags, dziękuję! –

+1

Możesz dodawać komentarze po sformatowaniu ... Lub uciec '%' z '\%'. – JBernardo