Emacs - Org - LaTeX - triky #1

09.02 | 17:05 | Richard | Richard

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.

    • RE: Emacs - Org - LaTeX - triky #1 10.02 | 09:18
      Avatar Pavel Q4OS, DistroWatch  Administrátor

      Zaujímavý blog a pekne spracovaný :-)

      • RE: Emacs - Org - LaTeX - triky #1 13.02 | 15:07
        Avatar Richard Antix  Používateľ

        Ď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.