Merge remote-tracking branch 'origin/master'
This commit is contained in:
64
templates/document-latex-setup.el
Normal file
64
templates/document-latex-setup.el
Normal 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)
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user