LaTeX: Opakované piktogramy
Miniblog o tom, ako rýchlo vkladať opakované obrázky alebo piktogramy do dokumentu.
1. Motivácia
Práve prekladám jeden návod k stroju, ktorý sme dodali do Srbska. Návod mám v slovenčine, písaný ešte v OpenOffice. Naštastie, nechcú po mne predklad do srbčiny, postačí im aj anglická verzia.
Všetci, ktorí robia kompikované dokumenty v *Office, vedia, že často pri posune nejakého obrázka sa "rozhádže" čast dokumentu, aj keď je obrázok napríklad prichytený k odstavcu. A tiež, že práca s dlhými tabuľkami je neveľmi príjemná. Alebo rozdelenie na virtuálne stránky (niečo ako dva stĺpce).
Ostatne to vtipne demonštruje obrázok nižšie - čo sa stane, ak užívateľ Word-u presunie obrázok 😃.
![]() |
Obr. 0: Trefná ukážka vytvoreného zmätku pri presune obrázka v text. procesore |
Takže je jasné, že dokument spravím v LaTeX-u. A tiež som vedel, že niektoré obrázky sa častokrát opakujú - rôzne bezpečnostné piktogramy podľa normy ISO 7010.
2. Ako na to?
Obrázky sa vkladajú v LaTeX-u pomocou príkazu \\ \includegraphics[width=<šírka>]{<cesta_k_príkazu>}
Ja osobne síce píšem LaTeX-ové dokumenty v org móde pre GNU Emacs, ale ten dokáže príkazy LaTeX-u i značky org navzájom kombinovať.
Takže som si vytvoril súbor my-icons.tex
, ktorý (napríklad, pre poriadok) v preambule LaTeX alebo org dokumentu tzv. "nainkludujem" pomocou príkazu:\include{<cesta_k_súboru>/my-icons.tex}
Samotný my-icons.tex
vyzerá nasledovne:
\newcommand{\icoSafe}[2]{% \ifx\relax#2\relax % \def\secondargument{6ex}% \else \def\secondargument{#2}% \fi % \ifstrequal{#1}{VYKR}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_M001.pdf}}{}% \ifstrequal{#1}{MANUAL}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_M002.pdf}}{}% \ifstrequal{#1}{VYBUCH}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W002.pdf}}{}% \ifstrequal{#1}{BLESK}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W012.pdf}}{}% \ifstrequal{#1}{RESTART}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W018.pdf}}{}% \ifstrequal{#1}{STLAC}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W024.pdf}}{}% \ifstrequal{#1}{VTIAH}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W025.pdf}}{}% \includegraphics[width=\secondargument]{\path}% } \newcommand{\icoSafeMargin}[1]{% \ifstrequal{#1}{VYKR}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_M001.pdf}}{}% \ifstrequal{#1}{MANUAL}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_M002.pdf}}{}% \ifstrequal{#1}{VYBUCH}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W002.pdf}}{}% \ifstrequal{#1}{BLESK}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W012.pdf}}{}% \ifstrequal{#1}{RESTART}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W018.pdf}}{}% \ifstrequal{#1}{STLAC}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W024.pdf}}{}% \ifstrequal{#1}{VTIAH}{\def\path{~/.emacs.d/org-headers/ico/safety/ISO_7010_W025.pdf}}{}% \marginpar{\includegraphics[width=\marginparwidth]{\path}}% }
Použitie je jednoduché:
Ak chcem vložiť piktogram do textu, zadám napríklad \icoSafe{VYBUCH}{}
.
To vloží obrázok ISO_7010_W002.pdf
(čo je len sólo vektorový malý obrázok, hoci uložený v PDF) s veľkosťou 6ex (6-násobok výšky písmena x).
Ak požadujem inú výšku, tak to zadám ako druhý parameter príkazu, napríklad:\icoSafe{VYBUCH}{6cm}
.
Analogicky funguje aj príkaz \icoSafeMargin
. Tento vkladá obrázok na okraj textu.
Môže to vyzerať hoci aj takto:
![]() |
Obr. 1: Vložené piktogramy - vľavo v tzv. minipage, vpravo až na okraji stránky |
Je to veľmi rýchle a efektívne.
Ak by mal niekto záujem o tie piktogramy, stiahol som ich z https://github.com/BenSt099/isosafety.
3. Iné použitie
Zo srdca nemám rád situáciu, keď potrebujem do textu nejaký symbol, miniobrázok. A ten sa náchadza v nejakom fonte. A dostať font do pdflatex-u nie je úplne triviálne (musí byť v určitej adresárovej štruktúre a namapovaný v databáze(-ach)). Áno, LuaLaTeX či XeTeX to majú jednoduchšie, tam fungujú ttf fonty, ale aj tu máme problém - chceme len jeden či dva symboly, a predsa musíme mať stiahnutý celý súbor s fontami.
A čo ak je to malý obrázok, ktorý sa tiež opakuje?
Použijeme podobné riešenie. Ja osobne to robím takto (ako príklad použijem font fontawesome5 (ktorý ale mám aj nainštalovaný v LaTeX-u, ale nemám lepší poruke na ukážku):
Postup
Využijeme renderovanú stránku v PDF, v ktorej je font použitý. V LaTeX-u je dobrým zvykom, že takáto stránka s opisom fontu existuje. No ak takú nemáme, tak si znak vložíme napr. v *Office a spravíme si z neho PDF.
V programe Inkscape si PDF stránku naimportujeme do prázdneho dokumentu (Súbor→Importovať
).
![]() |
Obr. 2: Naimportovaná PDF stránka so znakmi |
Označíme si (natiahnutím obdĺžnika) príslušný znak a zvolíme Export
, pričom si zvolíme vektorový formát (SVG, PDF).
A hotovo, máme "ukradnutý znak".
![]() |
Obr. 3: A vyexportovanie zvoleného znaku do iného súboru |
A tento znak si niekam uložíme. Ja potom používam na vkladanie takýto kód:
\newcommand{\ico}[2]{% \ifx\relax#2\relax % \def\secondargument{1.5ex}% \else \def\secondargument{#2}% \fi % \ifstrequal{#1}{GNU}{\def\path{~/.emacs.d/org-headers/ico/gnu.png}}{}% \ifstrequal{#1}{CH1}{\def\path{~/.emacs.d/org-headers/ico/ch1.pdf}}{}% \ifstrequal{#1}{CH2}{\def\path{~/.emacs.d/org-headers/ico/ch2.svg}}{}% \ifstrequal{#1}{CHCK}{\def\path{~/.emacs.d/org-headers/ico/check.pdf}}{}% \includegraphics[width=\secondargument]{\path}% }
Ako sa dá vyčítať z ukážky, ak zadáme napríklad:\ico{GNU}{}
, tak nám to vloží hlavu pakoňa priamo do textu. Ak má príkaz nulový 2. argument, tak jeho výška je rovná výške práve použitého textu. Ale dá sa samozrejme i nastaviť iná…
Jednoduchý príklad a jeho výstup:
Tu je vložená \ico{GNU}{} vo veľkosti textu. Funguje to aj ak \Huge je text a \ico{GNU}{} väčší. \normalsize A tu \ico{GNU}{2cm} vo veľkosti 2 cm.
![]() |
Obr. 4: Vložený obrázok príkazom v tele textu
|
4. Záver
Tvorba textov pomocou značkovacích jazykov je na začiatku trochu obtiažnejšia. Ale neskôr sa ukazuje ich sila a to, že robia to, čo užívateľ chce.
Vo väčšine prípadov 😉.
Pre pridávanie komentárov sa musíte prihlásiť.