Emacs - Org - LaTeX - triky #1
GNU Emacs a jeho rozšírenie org-mode sú pomerne známe programy aj ľuďom, ktorí Emacs nepoužívajú. Dokonca pre niektorých bola existencia org-mode dôvodom na to, aby to Emacsom skúsili. Niektorí ostali pri plain Emacs-e, niektorí si ho priohli na spôsob Vim-u. A niektorí si org-mode obľúbili aj pre jeho možnosť šikovne tvoriť LaTeX dokumenty.
Malá evolúcia
V dávnej minulosti som publikoval príspevok, v ktorom som opísal, ako nahradzujem textový procesor emacsom so známym org módom a ako to exportujem do pdf. Krátko na to, aj vplyvom klasického vnútorného nepokoja, som prešiel na používanie LaTeX-u… ale nie len tak ledabolo, avšak opäť exportom z org. A toto sa u mňa uplatnilo asi najviac, pretože sa jedná o kombináciu značkového jazyka (org), WYSIWYM (What You See Is What You Mean) prístupu a možnosťou kombinácie org s príkazmi LaTeX-u.
Aby som sa neopakoval, tak nebudem spomínať prednosti a spôsob práce s org. Len v skratke spomeniem niektoré zaujímavosti a následne sa zameriam na veci, ktoré sa mne zdajú praktické a môžu sa niekomu zapáčiť.
Čiastočne si pritom pomôžem príkladmi z prednášky, ktorú som mal v júli 2024 na Žilinskej univerzite (konferencia OSSConf). Tá vyšla v papierovom zborníku, ale prekvapivo zatiaľ ten (ešte) nie je na stiahnutie v elektronickej verzii a od konferencie sa web neupdatoval.
Pripomienka: čo je to org?
Org-mode, označovaný aj org-mode, ORG, org je rozšírením GNU Emacs-u, ktoré slúži na organizáciu a spravovanie textových informácií. Je určené na písanie poznámok, úloh, plánovanie projektov a iné organizačné účely. Org-mode umožňuje vytvárať hierarchické zoznamy, sledovať časové harmonogramy a má ďalšie funkcie, ktoré umožňujú efektívnejšiu prácu s textom. Org-mode tiež poskytuje možnosť exportu dokumentov do rôznych formátov (HTML, PDF, LaTeX, ODT…). Dajú sa v ňom efektívne tvoriť tabuľky, dá sa previazať s inými programami. Dá sa povedať, že to nie je len značkovací jazyk, ale efektívne prostredie na ľubovoľnú prácu s informáciami v textovej podobe.
Syntax dokumentu v Org-mode (pri písaní LaTeX dokumentov)
V Org-mode existuje špeciálna sekcia (časť dokumentu), ktorá sa používa na skrytie dodatočných informácií alebo obsahu, nazývaná drawer. Táto sekcia (sekcie) je vizuálne skrytá z pohľadu užívateľa, ale môže byť, podľa potreby a požiadavky, zobrazená.
Vloženie tejto sekcie v dokumente, ktorý sa má exportovať do LaTeX-u sa vykonáva zadaním kľúčového slova :HEADER:
a je ukončená reťazcom :END:
Môže vyzerať nasledovne (krátené):
:HEADER: #+LATEX_CLASS: article #+LATEX_CLASS_OPTIONS: [a4paper] #+SETUPFILE: ~/.emacs.d/org-headers/org-latex-setupfile.org #+LATEX_HEADER: \usepackage{lmodern} #+LATEX_HEADER: \usepackage{subcaption} \usepackage{listings} #+TITLE: *Demo \LaTeX{} dokument vytváraný v /org mode/* #+DATE: <2025-02-09 Ne> #+OPTIONS: toc:t num:t title:t :END:
Z príkladu je zrejmé, že #+LATEX_CLASS: article
, #+LATEX_CLASS_OPTIONS: [a4paper]
, #+LATEX_HEADER: \usepackage{lmodern}
atď., sú príkazy, ktoré sa vložia do preambuly .tex
dokumentu, pričom v jednej tejto direktíve, ktorých počet nie je obmedzený, možno použiť viac LaTeX-ových príkazov oddelených medzerou; #+OPTIONS: toc:t num:t title:t
a #+OPTIONS: d:(not "DR2")
sú dodatočné príkazy pre generovanie .tex dokumentu.
A nakoniec opakované časti preambuly je možné dať i do iného súboru a tak zásadne zprehľadniť hlavičku dokumentu - slúži na to direktíva #+SETUPFILE:
.
A teda, #+
udávajú interné príkazy a parametre dokumentu v org-mode.
A teraz podstatná myšlienka:
Jednou z výhod org-mode je (aj) to, že môžeme ľubovoľne kombinovať formátovacie značky a príkazy org-mode s príkazmi LaTeX-u.
To znamená, že tabuľky - veľká to sila i bolesť LaTeX-u - môžeme vytvárať automatizovaným spôsobom, ako bolo uvedené v spomínanom staršom článku. Príjemnou vlastnosťou je možnosť zadávania vzorcov a týmto využiť org-mode ako dobre použiteľný tabuľkový procesor (najmä ak uvážime, že vzorce možno zadávať i ako funkcie jazyka Elisp, so všetkými výhodami (i nevýhodami 😉)).
A taktiež vkladať do dokumentu obrázky.
A značkovaním možno definovať rezy písma.
Ako taká tabuľka môže vyzerať, je na nasledujúcom obrázku:
![]() |
Obr. 1: Tabuľka v org-mode, s vloženým vzorcom, opisom, formátovaním.
|
GNUPLOT
GNUPLOT asi netreba predstavovať, stručne sa dá povedať, že je to slobodný program na tvorbu grafov a vizualizáciu dát, vybavený vlastným skriptovacím jazykom, kompatibilný s POSIX štandardmi.
V Emacs-e je dlhodobo prítomné rozšírenie s názvom gnuplot-mode, ktoré slúži na editáciu skriptov spomínaného programu. Funkcie tohto rozšírenia môžu byť volané z org-mode, a vstupnými dátami môže byť tabuľka vytvorená priamo v org-mode. Stručný príklad:
Majme tabuľku s náhodnými číslami:
#+CAPTION: Náhodné čísla #+NAME: tab3 #+PLOT: title:"Tab. 3" ind:1 deps(2:3) type:2d with:histograms set:"yrange [0:]" #+PLOT: set:"xlabel 'os x'" set:"ylabel 'os y'" set:"linewidth 20" #+PLOT: labels:("p.č." "B" "C") file:"graf1.png" | p.č. | B | C | |---------+-----+-----| | 1 | 145 | 89 | | 2 | 60 | 61 | | 3 | 69 | 133 | | 4 | 160 | 109 | | 5 | 50 | 109 | | 6 | 43 | 95 | |---------+-----+-----| | priemer | 88 | 99 | #+TBLFM: @>$2=vmean(@2..@-1);%.0f :: @>$3=vmean(@2..@-1);%.0f
Pomocou niekoľkých parametrov #+PLOT
môžeme upresniť vzhľad výsledného grafu, definovať rady údajov, a mnohé iné vlastnosti výsledného grafu.
V našom prípade sa po zavolaní funkcie org-plot/gnuplot
(ak je kurzor v tabuľke alebo jej hlavičke) vytvorí súbor graf1.png
, ktorý môže byť použitý v inom mieste súboru.
Výstup z tejto tabuľky je na obrázku nižšie.
![]() |
Obr. 2: Graf vytvorený pomocou GNUPLOT, vložený v LaTeX dokumente.
|
Náhľad na PDF dokument v okne Emacsu
Staré programy ako WordPerfect (do verzie 5.1), StarWriter a hoci aj v našich končinách populárny Text602, mali možnosť grafického náhľadu na výsledný dokument. Org-mode disponuje niekoľkými exportnými funkciami a jednou z nich je aj export do PDF súboru, pomocou funkcie org-latex-export-to-pdf
. Postupné vyvolanie menu a jeho položky sa vykonáva klávesovou skratkou C-e l o
, čo môže byť nepohodlné, a navyše sa PDF dokument otvára v externom prehliadači, predvolene MuPDF.
Jednoduchou funkciou:
(defun make-pdf-from-org-via-latex (&optional arg) "Make PDF and display it via LaTeX{}" (interactive) (save-buffer) (latex-popup-message "\nProsím čakaj. \n\nPDF sa generuje") (org-latex-export-to-pdf) (switch-to-buffer (concat (file-name-base (buffer-name)) ".pdf")) (revert-buffer t t) (previous-buffer) (latex-popup-close)) (define-key org-mode-map (kbd "<f9>") 'make-pdf-from-org-via-latex)
môžeme v druhom okne prehliadať vygenerovaný PDF súbor.
Navyše, ak máme aktívny zvolený región, alebo zobrazenú len časť dokumentu (funkcie narrow-to-*
), generuje sa nám len preambula a viditeľná/označená časť dokumentu, čo môže byť výhodné pri veľkých súboroch.
![]() |
Obr 3: „Side-by-side preview.“
|
Záver
Na dnes aj stačilo. Nabudúce si povieme, ako rýchlo hľadať a zadávať špeciálne symboly, tiež unicode znaky, ako spustiť malý program v jazyku C alebo bash priamo v dokumente. Ešte dám priaznivcom LaTeX-u do pozornosti starší zápisok ako rýchlo vkladať opakované obrázky alebo piktogramy do dokumentu.
Pre pridávanie komentárov sa musíte prihlásiť.
Zaujímavý blog a pekne spracovaný :-)
Ďakujem. Viem, že LaTeX je hodne okrajová téma, zvlášť mimo akademickej sféry, ale pre mňa je to denný nástroj, a preto sa ho snažím vždy nejako lepšie obsiahnuť, pochopiť a zjednodušiť si s ním prácu.