2013-05-23 11 views
11

Il mio problema è che, voglio costruire un generatore di lettere, che prima costruisce un file in lattice da input dell'utente, e poi lo compila via latex in PDF.Come eseguire un modello Golang quando "{" o "}" si trovano nella parte statica del modello?

Il modello contiene più righe come questo:

\setkomavar{signature}{{{.Name}}} 

La parte latex è \setkomavar{signature}{}, e la parte template da go è {{.Name}}.

Quando provo a caricare il modello, getta questo errore:

panico: Modello: letter.tmpl: 72: inaspettato "}" al comando

C'è un trucco per aiutare la gestione parser una tale situazione?

Grazie in anticipo,

Tino

risposta

13

Usa Template.Delims per impostare i delimitatori di un testo non in conflitto. {{ e }} sono solo i valori predefiniti, questo metodo consente di selezionare altri delimitatori.

Metodo alternativo: In te template, dove desideri del lattice { e }, è possibile inserire un testo sicuro, invece, come dire #( e )# e poi fare una sostituzione "globale" sulla uscita dal modello. Tuttavia, impostare i delimitatori è molto più facile da IMO e probabilmente più performante, se questo è importante.

+0

Grazie, che quello che avevo bisogno di sapere! – user2326871

0

ero in precedenza facendo questo con la creazione della funzione di modello:

func texArg(s interface{}) string { 
    return fmt.Sprintf("{%v}", s) 
} 

che ho registrato come arg utilizzando template.Funcs. Poi, nel mio modello ho avuto:

\textbf{{.Name | arg}} 

Penso @ risposta di zzzz di cui sopra è meglio come questo va in pezzi quando hai bisogno di nido, ma ho pensato di lasciare questo qui per un approccio alternativo.

0

mia soluzione adhok era:

\barcode{{print "{" .Barcode}}} 
0

Una soluzione migliore è in realtà di utilizzare solo il costruito nel operatori spazi bianchi, come:

\setkomavar{signature}{ {{- .Name -}} } 

Il - all'inizio e alla fine rimuoverà spazio tra quel token e il prossimo token non-template.

Speranza che aiuta, vedere the docs per maggiori dettagli