jinja2 tex escaping

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Hi,

ich erstelle mittels eines Jinja2-Templates ein Tex-File. Die Daten, aus einer csv-Datei stammend, möchte ich Tex-konform escapen. Wie kann ich Jinja2 dazu bringen, meine eigene escaping Funktion, statt des HTML-escape, zu benutzen?

Und gibt es eine Sammlung von Ersetzungen für Latex in Python? Ich habe ein Flask-Snippet gefunden, welches jedoch nicht alle Ersetzungen enthält, die ich haben möchte ( "String" -> ``String'').


Edit: Für letzteres habe ich einen Regex gefunden:

Code: Alles auswählen

re.sub(r"'(.+)'", "`\\1'", string)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Hallo JBS,
für die Ersetzungen kannst du im Quellcode von Sphinx nachschauen: hier. Die Datei kannst du dann auch benutzen.

In Jinja ist es einfach eigene Filter zu schreiben. Die fertige Funktion fügst du einfach in dein Environment ein, z. B.:

Code: Alles auswählen

def texescape(value):
    ...

environment.filters['te'] = texescape
Aufruf dann im Template:

Code: Alles auswählen

{{ meine_variable|te }}
Gruß
Whitie
lunar

@jbs Unicode vollständig und korrekt in entsprechende LaTeX-Symbole zu übersetzen, ist so einfach nicht möglich. Selbst die umfangreiche Liste, die Whitie gezeigt hat, ist nicht vollständig, allerdings natürlich eine gute Basis, die die meisten westlichen Sprachen abdeckt.

Nutze XeLaTeX und verwende Unicode in Deinen Daten, um Ersetzungen weitestgehend zu vermeiden. Falls das nicht möglich ist, dann untersuche erst einmal Deine Daten, um festzustellen, was Du überhaupt ersetzen musst, jenseits der Standard-Ersetzungen wie "_" -> "\_". Schließlich ist es nicht unbedingt selbstverständlich, dass Anführungszeichen zu "`'" umgewandelt werden, denn diese Art der Umwandlung hängt ja von der Sprache des Dokuments ab. Speziell Anführungszeichen implementierst Du besser mithilfe des "csquotes"-Pakets.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

So umfangreich muss die Ersetzung nicht sein; Ersetzung von Unicode-Zeichen muss nicht stattfinden.

Ich habe einen eigenen Filter erstellt und ihm im Template verwendet.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jbs hat geschrieben:ich erstelle mittels eines Jinja2-Templates ein Tex-File. Die Daten, aus einer csv-Datei stammend, möchte ich Tex-konform escapen. Wie kann ich Jinja2 dazu bringen, meine eigene escaping Funktion, statt des HTML-escape, zu benutzen?
Das geht nicht. Ich habe dazu mal en Fork gemacht, aber da ist nicht mehr viel passiert und die Motivation war irgendwann weg.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten