Merge remote-tracking branch 'origin/master'

This commit is contained in:
Martin Sukany
2026-02-20 09:29:55 +01:00
2 changed files with 148 additions and 48 deletions

View File

@@ -0,0 +1,64 @@
;; document-latex-setup.el
;; Přidej obsah tohoto souboru do svého ~/.config/doom/config.el
;;
;; Co to dělá:
;; Před každým LaTeX exportem projde buffer, najde Org tabulky
;; které NEMAJÍ #+ATTR_LATEX, spočítá jejich sloupce a vloží:
;; #+ATTR_LATEX: :environment tabularx :width \textwidth :align lXX...
;; (první sloupec levý, zbytek roztažitelný)
;; Pracuje na kopii bufferu — originální soubor se NEMĚNÍ.
(defun my/org-count-table-columns (line)
"Spočítej počet datových sloupců v Org table LINE."
(length (cl-remove-if
(lambda (s) (string-match-p "^-*$" (string-trim s)))
(cdr (butlast (split-string line "|"))))))
(defun my/org-table-attr-latex-spec (ncols)
"Vygeneruj column spec pro tabularx: první sloupec l, zbytek Y (centered X)."
(concat "l" (make-string (max 0 (1- ncols)) ?Y)))
(defun my/org-auto-tabularx (backend)
"Automaticky přidej #+ATTR_LATEX tabularx před každou tabulku při LaTeX exportu."
(when (org-export-derived-backend-p backend 'latex)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(cond
;; Řádek začíná | — může být začátek tabulky
((looking-at "^|")
(let ((prev-line (save-excursion
(forward-line -1)
(buffer-substring-no-properties
(line-beginning-position) (line-end-position)))))
;; Je to PRVNÍ řádek tabulky? (předchozí řádek NEzačíná |)
(when (not (string-match-p "^|" prev-line))
;; Chybí #+ATTR_LATEX?
(when (not (string-match-p "^#\\+ATTR_LATEX" prev-line))
(let* ((table-line (buffer-substring-no-properties
(line-beginning-position) (line-end-position)))
(ncols (my/org-count-table-columns table-line))
(spec (my/org-table-attr-latex-spec ncols))
(attr (format "#+ATTR_LATEX: :environment tabularx :width \\textwidth :align %s\n"
spec)))
(when (> ncols 0)
(insert attr))))))
(forward-line))
(t
(forward-line)))))))
;; Zaregistruj hook — spustí se před každým exportem
(add-hook 'org-export-before-processing-hook #'my/org-auto-tabularx)
;; Volitelně: zapni booktabs styl (horizontal rules v tabulkách)
;; (setq org-latex-tables-booktabs t)
;;
;; Jak použít:
;; 1. Zkopíruj tento obsah do ~/.config/doom/config.el
;; 2. Spusť: doom sync (nebo M-x doom/reload)
;; 3. Exportuj dokument: SPC m e l p
;; Tabulky se automaticky obalí do tabularx — nic nemusíš přidávat ručně.
;;
;; Chceš jiný výchozí column spec? Uprav my/org-table-attr-latex-spec.
;; Například pro "všechny sloupce rovnoměrně": (make-string ncols ?Y)

View File

@@ -1,60 +1,96 @@
#+title: Document template #+TITLE: Document Title
#+author: Martin Sukany #+AUTHOR: Martin Sukany
#+options: toc:t num:nil ^:nil #+DATE: \today
#+language: cs #+OPTIONS: toc:2 num:t H:4 ^:nil
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [a4paper,11pt]
#+OPTIONS: toc:t num:t tags:nil ^:nil # ── LaTeX class ───────────────────────────────────────────────────────────────
#+TOC: headlines 3 #+LATEX_CLASS: report
#+LATEX_CLASS_OPTIONS: [a4paper,10pt]
# ------------------------------------------------- # ── Encoding & fonts ──────────────────────────────────────────────────────────
# Čeština + typografie
# -------------------------------------------------
#+LATEX_HEADER: \usepackage[czech]{babel}
#+LATEX_HEADER: \usepackage[T1]{fontenc}
#+LATEX_HEADER: \usepackage[utf8]{inputenc} #+LATEX_HEADER: \usepackage[utf8]{inputenc}
#+LATEX_HEADER: \usepackage[T1]{fontenc}
#+LATEX_HEADER: \usepackage{lmodern}
#+LATEX_HEADER: \usepackage{microtype} #+LATEX_HEADER: \usepackage{microtype}
#+LATEX_HEADER: \usepackage[a4paper,margin=2.2cm]{geometry} #+LATEX_HEADER: \usepackage{helvet}
#+LATEX_HEADER: \renewcommand{\familydefault}{\sfdefault}
# ------------------------------------------------- # ── Page geometry ─────────────────────────────────────────────────────────────
# Obrázky (ať to “nezabolí” v jiných dokumentech) #+LATEX_HEADER: \usepackage[a4paper,margin=1in]{geometry}
# -------------------------------------------------
# ── Colors ────────────────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage[table,x11names]{xcolor}
#+LATEX_HEADER: \definecolor{linkcolor}{RGB}{0,0,180}
#+LATEX_HEADER: \definecolor{tableShade}{RGB}{245,245,245}
#+LATEX_HEADER: \definecolor{lightGreen}{RGB}{240,255,240}
#+LATEX_HEADER: \definecolor{mediumGreen}{RGB}{220,255,220}
# ── Hyperlinks ────────────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage{hyperref}
#+LATEX_HEADER: \hypersetup{colorlinks=true,linkcolor=linkcolor,urlcolor=linkcolor,citecolor=linkcolor}
# ── Tables ────────────────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage{tabularx}
#+LATEX_HEADER: \usepackage{booktabs}
#+LATEX_HEADER: \usepackage{longtable}
#+LATEX_HEADER: \usepackage{colortbl}
#+LATEX_HEADER: \usepackage{array}
#+LATEX_HEADER: \usepackage{adjustbox}
#+LATEX_HEADER: \usepackage{etoolbox}
#+LATEX_HEADER: \newcolumntype{Y}{>{\centering\arraybackslash}X}
#+LATEX_HEADER: \newcolumntype{L}{>{\raggedright\arraybackslash}X}
#+LATEX_HEADER: \newcolumntype{R}{>{\raggedleft\arraybackslash}X}
#+LATEX_HEADER: \AtBeginEnvironment{longtable}{\rowcolors{1}{mediumGreen}{lightGreen}}
# ── Header & footer ───────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage{fancyhdr}
#+LATEX_HEADER: \usepackage{titleps}
#+LATEX_HEADER: \pagestyle{fancy}
#+LATEX_HEADER: \fancyhf{}
#+LATEX_HEADER: \lhead{\small\nouppercase{\leftmark}}
#+LATEX_HEADER: \rhead{\small\thepage}
#+LATEX_HEADER: \renewcommand{\headrulewidth}{0.4pt}
# ── Graphics ─────────────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage{graphicx} #+LATEX_HEADER: \usepackage{graphicx}
# ------------------------------------------------- # ── Code blocks ──────────────────────────────────────────────────────────────
# TABULKY: široké + zalamování uvnitř buněk #+LATEX_HEADER: \usepackage{listings}
# ------------------------------------------------- #+LATEX_HEADER: \lstset{backgroundcolor=\color{yellow!20},basicstyle=\ttfamily\small,breaklines=true,frame=single}
#+LATEX_HEADER: \usepackage{array} % \newcolumntype
#+LATEX_HEADER: \usepackage{tabularx} % tabulka na \textwidth + X sloupce (wrap)
#+LATEX_HEADER: \usepackage{longtable} % tabulky přes více stran (výška)
#+LATEX_HEADER: \usepackage{ltablex} % longtable + tabularx (dlouhé + široké)
#+LATEX_HEADER: \keepXColumns
#+LATEX_HEADER: \usepackage{booktabs} % hezčí čáry
# Lepší zalamovací sloupce: # ── Title page (matching mdbook template style) ───────────────────────────────
# - X v tabularx wrapuje, ale často je "blokově" a vypadá blbě. #+LATEX_HEADER: \usepackage{titling}
# - Y = wrap + zarovnání doleva (doporučovaný pattern) #+LATEX_HEADER: \renewcommand{\maketitle}{%
# - Z = wrap + zarovnání na střed (někdy užitečné) #+LATEX_HEADER: \begin{titlepage}\centering\vspace*{\fill}%
# - R = wrap + zarovnání doprava (na čísla s wrapem výjimečně) #+LATEX_HEADER: {\LARGE\bfseries\thetitle\par}\vspace{1em}%
#+LATEX_HEADER: \usepackage{ragged2e} #+LATEX_HEADER: {\large\theauthor\par}\vspace{2em}%
#+LATEX_HEADER: \newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} #+LATEX_HEADER: {\normalsize\itshape\thedate\par}\vspace{2em}%
#+LATEX_HEADER: \newcolumntype{Z}{>{\Centering\arraybackslash}X} #+LATEX_HEADER: % Logo (odkomentuj a uprav cestu pokud ho chceš):
#+LATEX_HEADER: \newcolumntype{R}{>{\RaggedLeft\arraybackslash}X} #+LATEX_HEADER: % \includegraphics[width=0.35\textwidth]{/abs/path/to/logo.png}\par
#+LATEX_HEADER: \vspace*{\fill}\end{titlepage}}
# Dlouhé řetězce bez mezer (URL, ID, hashe) aby se uměly lámat: # ─────────────────────────────────────────────────────────────────────────────
#+LATEX_HEADER: \usepackage{xurl} # Sem piš obsah dokumentu
# ─────────────────────────────────────────────────────────────────────────────
# Trochu tolerantnější zalamování (pomáhá, když LaTeX nadává na overfull hbox) * Introduction
#+LATEX_HEADER: \sloppy
# ------------------------------------------------- Toto je šablona. Exportuj do PDF přes =SPC m e l p= (Doom) nebo =C-c C-e l p=.
# Volitelně: otočení tabulky, když máš fakt moc sloupců
# (nezalamuje samo o sobě, ale může zachránit extrémy)
# -------------------------------------------------
#+LATEX_HEADER: \usepackage{pdflscape}
# ------------------------------------------------- Tabulky fungují automaticky — nepotřebuješ přidávat =#+ATTR_LATEX= ručně,
# Nouzové "nacpat to na šířku" (když bys někdy chtěl škálovat) pokud máš v =config.el= Elisp hook (viz níže).
# -------------------------------------------------
#+LATEX_HEADER: \usepackage{adjustbox} * Example table
| Název | Popis | Stav |
|--------------+--------------------------+-----------|
| Položka A | Krátký popis | Hotovo |
| Položka B | Delší popis věci | Probíhá |
| Položka C | Další položka v tabulce | Čeká |
* Example code block
#+BEGIN_SRC python
def hello():
return "Hello, World!"
#+END_SRC