Aktualizováno dne 11. března 2011 - Scribus – vložení tabulky z Writeru

Linux v praxi

Různé drobnosti


Elegantní čtenářský deník pohodlně v LaTeXu

Tomáš potřeboval do školy vést čtenářský deník. Vzhledem k tomu, co plihnil v OpenOffice.org, jsem se rozhodnul udělat mu nějakou šablonu pro LaTeX, kde nebude mít možnost dělat úžasné prasárny, ale bude se moci soustředit na psaní obsahu.

Přece jen se v LaTeXu tak moc nevyznám, takže jsem si nechal to nejdůležitější poradit, a pak jsem to uhladil do úhledného kabátku.

Takže celé to mám rozděleno do samostatných souborů kvůli přehlednosti:

  • denik-cs.cls – třída dokumentu
  • denik.tex – kostra dokumentu
  • knihy.tex – vkládaný seznam dokumentů s jednotlivými knihami, lze generovat automaticky skriptem, nebo sepsat ručně
  • celni-strana.pdf – pro titulní stranu mám vytvořené rádoby nádherné samostatné jednostránkové pdf
  • jakkoliv nazvaný skript (vypsaný níže), který doplní pomocí programu vlna nedělitelné mezery, vygeneruje seznam knih a vytvoří výsledný pdf soubor
  • podadresář knihy – obsahuje soubory s jednotlivými články
  • podadresář covers – obsahuje obrázky s titulními stranami knih

Základem deníku je třída denik-cs:

%obsah souboru denik-cs.cls

\ProvidesClass{denik-cs}

\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{pdfpages}

% Velikost papíru a standardní velikost písma
\LoadClass[12pt,a4paper]{article} %pro oboustranný tisk přidat parametr twoside
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{palatino} %volba fontu, možno zkusit avant, bookman, newcent, palatino, helvet, times

% Nastavení okrajů stránky
\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm]{geometry}

% Definice příkazů používaných v knize
\newcommand\obalknihy[1]{\begin{wrapfigure}{r}{130pt} \setlength\fboxsep{5pt} \setlength\fboxrule{0.5pt} \fbox{\includegraphics[width=115pt]{covers/{#1}}} \end{wrapfigure}} %obrázek přebalu knížky s rámečkem

\def\kniha#1{\newpage{}\section*{\sffamily\Large\bfseries#1~~\leaders\vrule height 5pt depth -4.5pt \hfill \null} \addcontentsline{toc}{section}{#1}}

\def\autor#1{\par\removelastskip\vskip\smallskipamount\noindent
  \textit{#1}\par
  \nobreak\vspace{3em}\@afterheading}

\def\mininadpis#1{\par\removelastskip\vskip\medskipamount\noindent
  \textbf{#1}\par
  \nobreak\@afterheading}

\def\obsah{\mininadpis{Obsah knihy}}

\def\hodnoceni{\mininadpis{Můj názor}}

\def\ukazka{\mininadpis{Ukázka z knihy}}

\def\citace#1{\begin{quote}\emph{#1}\end{quote}}

% Úprava obsahu, aby v něm byly vodicí tečky
\makeatletter
\renewcommand\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode %\bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\ 
      \leaders\hbox{$\m@th\mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}
     \hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\makeatother

A základní kostra dokumentu je v souboru denik.tex:

% obsah souboru denik.tex
\documentclass{denik-cs}
\begin{document}
\pagestyle{empty} % vypne číslování stránek
\includepdf{celni-strana.pdf} % vloží úvodní stránku
\newpage
\tableofcontents
\newpage
\pagestyle{plain}     % zapne obyčejné číslování
\setcounter{page}{1}  % nastaví čítač stránek znovu od jedné
%-----<<< kapitoly >>>-----
\input{knihy.tex}   %vloží seznam souborů
\end{document}

Seznam vkládaných souborů s obsahy jednotlivých knih jsem vytáhnul do samostatného souboru knihy.tex a generuji ho pomocí skriptu, ale lze samozřejmě napsat i ručně. Vypadá nějak takto:

% obsah souboru knihy.tex
\input{knihy/capek-krakatit.tex}
\input{knihy/capek-RUR.tex}
\input{knihy/nix-01-sabriel.tex}
\input{knihy/nix-02-lirael.tex}
\input{knihy/pullman-01-svetla-severu.tex}
\input{knihy/pullman-02-jantarove-kukatko.tex}
\input{knihy/pullman-03-dokonaly-nuz.tex}
\input{knihy/king-stephen-nezbytne-veci.tex}

No a ještě bash skript, který udělá tu nudnou práci:

#!/bin/bash
cd ./knihy
for i in *.tex; do vlna -v KkSsVvZzOoUuAI $i; done
rm *~
cd ..
for kniha in knihy/*.tex; do echo "\\input{$kniha}"; done >knihy.tex
pdflatex denik.tex
pdflatex denik.tex
rm denik.aux
rm denik.log
rm *~
acroread denik.pdf

Tak. A na vášnivém čtenáři pak zbývá jen psát obsahy knih bez toho, že by řešil formátování. Soubor, který napíše a umístí do podadresáře knihy, bude obsahovat něco takového:

\kniha{Nezbytné věci} 
\autor{Stephen King}

Co to tam může být? Co je to za divný název \uv{Nezbytné věci}? Obchodník ví své, ví, jak funguje lidské myšlení. Pozoruje ho už tisíce let. Pronikne až do vaší mysli, zjistí, po čem ve skrytu duše opravdu, přímo nezbytně toužíte, a pak vám to nabídne. Za cenu, které se nedá odolat\dots 

\obalknihy{nezbytne-veci.jpg}
\obsah
Do městečka Castle Rock přijíždí podivný obchodník Leland Gaunt…

Jeho prvním zákazníkem je jedenáctiletý Brian Rudko, který jede náhodou kolem ještě před oficiálním otevřením…

\hodnoceni
Román Nezbytné věci je o boji dobra se zlem, zpodobněným záhadným obchodníkem, který vám prodá přesně to, po čem toužíte\dots{} Kniha je velmi čtivá, ale pokud máte paměť děravou jako já, doporučuji vám, abyste si dělali poznámky, kdo je kdo, jinak se v množství postav budete ztrácet.

A ještě ke stažení na ukázku jeden ukázkový soubor s knihou a PDF výsledek v ořezané formě bez titulní strany s tímto jedním souborem

Používáte browser CCBot/2.0 (http://commoncrawl.org/faq/)