Proč už LaTeX nestačí, a co s tím?

Autor: Marek Smolík
Napsáno: 28.03.2024
Aktualizováno: 29.03.2024
Doba čtení: 9 m, 24 s

Obecně o LaTeXu

LaTeX je sada maker nad TeX-em – programem pro počítačovou sazbu původně vyvinutým Donaldem Knuthem. Jedná se už dlouhá léta o standard pro tvorbu seriózních dokumentů v technických oborem, jako je matematika či fyzika – a to z dobrých důvodů. Avšak původnímu TeXu je bezmála 50, LaTeX (ač je do současné doby aktualizován) na tom se svými téměr 40 není o moc lépe.

Tato skutečnost těžce prokládá některé z problémů, které z mého pohledu celý tento systém má.

Úmluva: V následujícím textu budu celý systém ohledně TeXu, LaTeXu a souvisejících komponent označovat jako „TeX“.

Co dělá LaTeX skvělým

Nejprve však; co je na tomto systému tak dobré? Tak zaprvné se jedná o transparentní open-source systém. Nic není proprietárního, dokumenty samotné se píší do plaintextových souborů s příponou .tex. To zajišťuje interoperabilitu s dalšímy systémy. Obsah nepodléhá TeXu. Uživatel s ním může nakládat jak chce a nedostane se mu žádných obfuskací.

Další faktor vychází přímo z mantry TeXu. Nejedná se totiž o hloupý textový editor. V textovém editoru jako Microsoft Word dochází totiž k jakési fúzi mezi vzhledem a obsahem dokumentu. To má za důsledek, že při psaní obsahu se uživatel musí neustále zaobírat vzhledem a náležitě formátovat. Nastane obzvláště peklo v případě, že si jasně nerozmyslel všechny potřebné styly na začátku a náležitě je nenastavil.

TeX je jiný. Obsah a vzhled jsou diametrálně odlišné komponenty, přičemž vzhled jde do pozadí a obsah do popředí.

Jakási šablona dokumentu může vypadat následovně:

\documentclass{article} % preset pro typ dokumentu

% importování balíčků

% nastavování stylů

% další parametry dokumentu

\begin{document}

% obsah dokumentu

\end{document}

A demonstrativní příklad by mohl vypadat následovně:

\documentclass{article} % preset pro typ dokumentu

% ====================
% importování balíčků

\usepackage{geometry}

\usepackage[utf8]{inputenc} % podpora pro
\usepackage[czech]{babel} % čeština

% ====================
% nastavování stylů

% makro z balíčku `geometry`
% nastaví příslušná odsazení od okrajů stránky
\geometry{
top=1in,
bottom=1.5in,
left=1.25in,
right=1.25in
}

\setlength{\parindent}{0mm} % odsazení 1. řádku odstavců
\setlength{\parskip}{6pt} % mezera mezi odstavci

\title{Můj první dokument v \LaTeX-u}
\author{Marek Smolík}

\begin{document}

\maketitle

Tohle je nějaký pěkný dostatečně dlouhý odstavec vhodný pro demonstraci odstavců. Zalomuje se na více řádků, aby bylo
vidět, jak se chová. Ve výchozím nastavení má první odstavec v sekci větší otsazení prvního řádu, to můžeme vypnout
pomocí \texttt{parindent}.

Tohle je v pořadí druhý odstavec. Odstavce jsou vždy odděleny prázdnou řádkou. Pokud bych je třeba chtěl hned vedle
sebe, nastavil bych \texttt{parskip} na 0.

\end{document}

Tento útržek by zkompilovaný do PDF dal následující výsledek:

Jak je vidět, není potřeba se vůbec soustředit na vzhled – ten není v nejmenším případě důležitý. Soustředím se na obsah. V momentě, kdy chci vzhled přizpůsobit, zkrátka si pohraji trochu s čísli v hlavičce dokumentu a mám hotovo. Styl je tak krásně deklarativní.

S tím úzce souvisí také fakt, že dané dokumenty budou vypadat vždy úplně stejně, není potřeba se piplat s různými verzemi příslušného programu a bát se, že když otevřu dokument v jiné verzi, tak se mi všechno „rozsype“. Mohli bychom říci, že je celý systém reprodukovatelný.

Tato konstelace dělá celý systém celkem robustní a spolehlivý.

Co dělá LaTeX né zas tak skvělým

Jak již bylo naznačeno, tento stařičký systém má své vrtochy, které z dnešního pohledu mohou činit potíže a pokud by se dokázaly odbourat, byl by výsledný systém skutečně perfektní.

Těžkopádnost instalace a nepřehlednost systémů

Nejen že uživatel tahá do souborů externí balíčky (makra), ale vše je z těchto maker. Takový systém si nelze spravovat sám, a tak existují správci lokálních instalací. Nejrozšířenější jsou MiKTeX a TeX Live.

Ať už si zvolíte kterýkoliv, výsledek bude přebloatění souborového systému minimálně vysokými stovkami MB. Posléze stačí pár externích balíčků a celá instalace znatelně nabobtná. Navíc příslušné balíčky, které nejsou lokální přístupné se musí nuceně v GUI pitomě hledat.

Nutno podotknout, že tohle řeší např. projekt tectonic. Ten natáhne jen skutečné minimum a poté až při generování nového souboru stáhne vše potřebné.

Pomalý překlad

Právě s překladem souboru do výstupního formátu (jako PDF) je velký problém. Překlad je strašně pomalý. Pro menší dokumenty to není veliký problém, ale když převýší počet přibližně 20, již nastane problém. Obzvláště pokud člověk použije nějaký balíček jako TikZ pro generování různých grafik, je po ptákách.

Generování zabere i na moderních sytémech klidně i nad deset sekund. Anekdotický scénář je, že má člověk chybu (invalidní syntax) v rovnici. Chybu „opraví“, rekompiluje a čeká… a čeká… a chyba překladu. A začíná to nanovo.

Toto jsou ale jen pouhá zbožná přání. Osobně si nejsem vědom jakýchkoliv projektů, které by některé z těchto věcí implementovaly.

Špinavý syntax

Syntax TeXu je otřesný. Všude přebývají znaky, které tam nemusí být. V tomto ohledu by mohlo dojít inspiraci Markdownem. Například v členění dokumentu bychom psali v TeXu:

\section{Kalkul}
\subsection{Integrální počet}
\subsubsection{Určité integrály}

To je otřes. Alternativa v TeXu:

# Kalkul
## Integrální počet
### Určité integrály

Rychlé a přehledné. Krása střídá nádheru. Některá další srovnání:

\textbf{tučný} --- **tučný**
\textit{kurzivní} --- *kurzivní*
\texttt{neproporciální} --- `neproporciální`

Jak se s tím vypořádat?

Nepřijde mi, že se tento problém někam hýbe a setrvává status quo.

Osobně nejsem obecně největším fanouškem masivních IDE. Proto zde naznačím několik workflows, které se mi osvědčili.

První potřebou je použít nějaký expander textu, minimálně pro rovnice. Každý, kdo píše v TeXu rovnice určitě pozná ten pocit, když musí napsat kopu kódu pro určité objekty – třeba matice (nebo automatický škálované závorky; což absolutně nechápu, že není výchozí chování). Psát:

\begin{pmatrix}
x & y & 1
\end{pmatrix}\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{12} & a_{22} & a_{23} \\
a_{13} & a_{23} & a_{33} \\
\end{pmatrix}\begin{pmatrix}
x \\ y \\ 1
\end{pmatrix}=0

je opravdu na nic. Vypisovat jak opička každou matici. Co kdyby člověk napsal něco jako pmat, a automaticky by se mu vypsalo:

\begin{pmatrix}

\end{pmatrix}

To by bylo super.

Pokud děláte v nějakém editoru, který pro toto nemá podporu, doporučil bych espanso. Jedná se o expander textu, který já osobně používám pro různé jiné věci jako speciální znaky. Je to vysoce konfigurovatelný program a člověk může třeba i použít Regex.

Já osobně většinu svých technických/matematických poznámek píši v již zmíněném poznámkovém programu Obsidian. Jeho workflow spočívá ve tvoření plaintextových .md souborů, které se nazvájem dají propojovat. V těchto souborech lze použít TeXovský syntax na rovnice. Zároveň je tento program velice rozšiřitelný komunitními pluginy. Jeden z nich je Latex Suite, ve kterém si člověk může nadefinovat tyto zkratky pomocí JSONového souboru. Například výše zmíněný problém s psaním matic lze vyřešit následujícím řádkem v konfigu:

{trigger: "pmat", replacement: "\\begin{pmatrix}\n$0\n\\end{pmatrix}$1", options: "MA"}

Zde:

Ještě jedna lahůdka:

{trigger: "([a-zA-Z])vec", replacement: "\\vec{[[0]]}", options: "rmA"}

Takto nemusí člověk psát otravné \vec{x}+\vec{y}…, stačí pouze xvec + yvec….

Pokud se ukáže nutnost daný dokument napsaný v Obsidianu pořádně typograficky vyexportovat (Obsidian má nativní export do PDF, ale tato feature je docela špatná a těžce záleží na současně nastavené theme), lze tento plaintext markdown dokument použitím programu pandoc převést do TeXu, a pak si s výsledkem náležitě pohrát dle požadovaného výsledku.

Koniec.