DokumentumgenerálásÁllapot: 2026-10
Biztonságos LaTeX YAML-szövegből
Hogyan kerül a YAML-ben tárolt szabad szöveg LaTeX-sablonba úgy, hogy ne törje el a buildet, és a sablon olvasható LaTeX maradjon.
Kutatási kérdés: Hogyan kerülhet tetszőleges YAML-szöveg LaTeX-sablonba úgy, hogy egy speciális karakter soha ne törje el a fordítást?
Projektigény
A CV és a motivációs levél szövege YAML-ben van, és LaTeX-en keresztül PDF-fé fordul. A tartalomban gyakori a &, %, #, _ és $, amely LaTeX-ben vezérlőkarakter, nyers LaTeX pedig nem lehet benne.
Módszer és ellenőrzés
- Jinja2 LaTeX-barát delimiterekkel (\VAR{}, \BLOCK{}, \#{}), trim_blocks és lstrip_blocks mellett.
- Escape a Jinja2 finalize hookjában, így minden változókimenetre lefut; az autoescape kikapcsolva marad, mert HTML-re készült.
- Jelölő típus (Raw) a már biztonságos LaTeX-szövegre, és külön URL-szűrő.
- pytest LaTeX nélkül: speciális karakterek, backslash és kapcsos zárójel, kiemelésjelek, páratlan jelölés, hiányzó érték, URL-szűrő és a blokk-tagek üres sorai. A teljes build nyolc PDF-et fordít két nyelven, két változatban.
Eredmények
- Az alapértelmezett {{ }} delimiterek ütköznek a LaTeX kapcsos zárójeleivel; saját delimiterekkel a sablon olvasható LaTeX marad.
- A finalize-beli escape-et egyetlen változónál sem lehet elfelejteni, ezért biztonságosabb a változónkénti szűrőnél.
- A kétszeres escape ellen egyetlen jelölő típus elég.
- A \href-ben lévő URL-ben csak a % és a # escape-elendő; a teljes escape elrontja a linket.
- trim_blocks és lstrip_blocks nélkül a blokksorok üres sorokat hagynak, amit a LaTeX bekezdéstörésnek vesz.
- A YAML flow mappingben egy idézőjel nélküli vessző csendben extra kulcsot hoz létre; a nyelvi párok ellenőrzése ezt build hibává teszi.
Döntés
Escape a finalize-ban, a Raw mint kifejezett kivétel, és külön URL-szűrő. A tartalomban egyetlen jelölés megengedett, a **kiemelés**, amelyet a build \textbf{}-re fordít.
Korlátok és nyitott kérdések
- A pdfLaTeX-szel használt karakterkészletre ellenőrizve; a Unicode-különlegességek, például matematikai jelek nincsenek tesztelve.
- A kiemelésen kívül nincs szövegközi jelölés, például link vagy lista a folyó szövegben.