Waynův tutoriál k systému LaTeX a všeho okolo

Zobrazit PDF

V rámci studia maturitního oboru si jako každý jiný musím vést čtenářský deník. Či bych aspoň měl. A já si ho vedu. Ale jednou jsem si pomyslel, proč to nedělat v LaTeXu? A tak vznikl tento projekt. Do té doby můj největší.

Zkoušel jsem si na něm i tvorbu vlastních balíčků, proto je rozdělen na FGBook.tex, coby hlavní soubor, a waytex.sty, coby můj první pokus o balíček stylů (.sty od slovíčka „styles“).

Tou dobou jsem ještě ani moc nevěděl, co dělám, proto je v kódu mnoho artefaktů (linek kódu, u kterých si ani já nejsem jistý, jestli je vůbec k něčemu potřebuji, ale bojím se je smazat) a nebál bych se ho přirovnat ke špagetám.

Preambule

\documentclass{extarticle} % If I am not mistaken it is used for wider range of font sizes
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\usepackage[utf8]{inputenc} % I have no idea why it is here
\usepackage[czech]{babel} % Used for czech formatting of text
\usepackage{csquotes} % Used for quoting
% \usepackage{graphicx} % Required for inserting images
\usepackage{moresize} % Even wider range of font sizes
\usepackage{fancyhdr} % Override text numbering
\usepackage[a4paper, left=1cm,right=1cm,top=1.5cm,bottom=1.5cm]{geometry} % To tell truth I do not know how it works with A4paper in documentclass but it works
\usepackage{multicol} % multi columns environment
\usepackage{titlesec} % please do not ask
\usepackage{wrapfig} % wrapfigure environment
\usepackage{lipsum} % for nothing appearantly
\usepackage{fontsize} % ...I think for more font sizes as well...?

\usepackage{coffeestains} % no questions needed

\usepackage{waytex} % my package -- see waytex.sty or MyPackages/README.md for more info.

\enabledarkmode

\usepackage{tocloft}
\renewcommand{\cftsecnumwidth}{0pt}  % Hides section numbering in TOC

Asi jediný projekt, kdy mám \documentclass jinou než article, ale je to extarticle, dosti podobné.
Font nastaven na Latin Modern skrz fontspec.
Český jazyk skrz babel, UTF8 kódování zbytečné, protože jsem mezitím přepl na LuaLaTeX.
Správné české uvozovky skrz csquotes, větší rozsah velikosti textů skrze moresize.
Fancyhdr zmíním níže.

Geometry je zde využito pro nastavení rozměrů stránky a okrajů stránky; multicol pro text ve více sloupcích (ale mám pocit, že to momentálně nikde nepoužívám); titlesec mi umožňuje úpravu titulků (part, section, subsection atd.); wrapfig je zde využit pro ukázky textu v horním pravém rohu; lipsum když potřebuji ozkoušet rozměry textu; fontsize zase pro práci s velikostí fontů.

Nakonec můj vlastní baliček waytex, jehož smysl vysvětlím postupně. Ve zkratce ale uschovává všechny custom commandy separátně, aby byl hlavní soubor, FGBook.tex, čištější.

\enabledarkmode dělá černé pozadí vhodné pro četbu na monitoru.

A \usepackage{tocloft} \renewcommand{\cftsecnumwidth}{0pt} nastavuje číslování sekcí na velikost nula, což je efektivně skryje před zraky čtenářů.

Další nastavení

\author{\theauthor}
\title{Povinná literatura k maturitní zkoušce}
\date{2021 -- 2025}

\titleformat{\part}
{\normalfont\Large\bfseries}{\thepart}{}{}
\titleformat{\section}
{\normalfont\large\bfseries}{\thesection}{}{}
\titleformat{\subsection}
{\normalfont\small\bfseries}{\thesubsection}{}{}

\titlespacing{\part}{0pt}{0pt}{0pt}
\titlespacing{\section}{0pt}{0pt}{0pt}
\titlespacing{\subsection}{1em}{0pt}{0pt}

\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}

Příkazy pro autora, titul a datum zde byly pro dobu, kdy jsem ještě dělal dokumentu titulní stránku. Tu možná někdy vrátím. V tisku by to vypadalo dobře.

Dále nastavuji velikosti názvů sekcí. Pod tím ohraničení kolem názvů sekcí a nakonec mažu jak odsazení prvního řádku, tak mezi odstavcovou mezeru.

PDF metadata

\setauthor{Libor Halík}

\pdfkeywords{
            maturita,
            čeština,
            čtenářské deníky,
            Shakespeare,
            Hamlet,
            Romeo a Julie,
            Poe,
            Havran,
            Erben,
            Kytice,
            Dostojevskij,
            Zločin a trest,
            Balzac,
            Otec Goriot,
            Dickens,
            Oliwer Twist,
            Wilde,
            Obraz Doriana Graye,
            Gogol,
            Recizor,
            Brown,
            Šifra mistra Leonarda,
            Da Vinciho kód,
            Inferno,
            Fitzgerald,
            Velký Gatsby,
            Orwell,
            Devatenáct set osmdesát čtyři,
            1984,
            Rowlingová,
            Harry Potter,
            Tolkien,
            Hobbit,
            Gellner,
            Po nás ať přijde potopa,
            Kafka,
            Proměna,
            Dyk,
            Krysař,
            Čapek,
            Bílá nemoc,
            R. U. R.,
            R.U.R.
            }

\setpdfmetadata{Povinná literatura k maturitní zkoušce}{Materiály z literatury k maturitní zkoušce, studijní projekt z období 2021 až 2025}
% used to add metadata to PDF file

\WIDTF{\whyperlinks{2}{DBS}{DBS}{DBS}}{\whyperlinks{2}{black}{black}{black}}

Tato část kódu se věnuje metadatům výsledného PDF souboru, díky tomuto má samo PDF určeno mě, coby autora, klíčová slova a titul samotného souboru.

Příkazy \setpdfmetadata, \WIDTF a \whyperlinks jsou definovány ve waytex balíčku následovně:


\newcommand{\setpdfmetadata}[2]{%
  \hypersetup{
    pdfauthor={\theauthor},    % Set author (retrieved from \setauthor)
    pdftitle={#1},     % Set title
    pdfsubject={#2},   % Set subject
    pdfkeywords={\storedkeywords}   % Set keywords (retrieved from \pdfkeywords)
  }
}

Kdy \setpdfmetadata doplní autora z \setauthor,

titul souboru coby první argument příkazu,

subjekt souboru coby druhý argument souboru

a klíčová slova z \pdfkeywords.


\NewDocumentCommand{\WIDTF}{m m}{\IfDarkModeTF{#1}{#2}}

\WIDTF je pouze zkratkou pro \IfDarkModeTF z balíčku darkmode, ale funkce zůstává identická.


\newcommand{\whyperlinks}[4]{%
	\ifnum#1=1
	\hypersetup{
		hidelinks, % Removes the colored boxes and underlines
		colorlinks=true,
		linkcolor=#2, % Sets link color
		citecolor=#3, % Sets citation color
		urlcolor=#4   % Sets URL color
	}
	\else
	\hypersetup{
		colorlinks=true,
		linkcolor=#2, % Sets link color
		citecolor=#3, % Sets citation color
		urlcolor=#4   % Sets URL color
	}
	\fi
}

\whyperlink má trochu více logiky, ale ve zkratce nastavuje, jak se zobrazují hypertextové odkazy (které využívám hlavně v zápatí stránky v poznámkách).


Číslování

\pagestyle{fancy}
\fancyhead{}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[C]{{\changefontsize{7pt} \textbfhl{\thepage. stránka}}}  % Page number with custom text

\fancypagestyle{fancyTOC}{
	\fancyfoot[C]{{\changefontsize{7pt} \TOCBF{\thepage. stránka}}}
}

fancy styl stránek je definován, jako využití aktuální barvy stránky (\textbfhl je tučný barevný text), zatímco fancyTOC je styl přímo jen pro stránku obsahu, která má nastavenou barvu natvrdo.

Obsah dokumentu

Stránka obsahu

\changefontsize{7pt}

\wtoc{SEZNAM LIT}{ERATURY}

\tableofcontents

\vfill\noindent\begin{minipage}{\textwidth}
    {\TOCRULE{\rule{\linewidth}{0.4pt}}\vspace{1em}
    \footnotesize\TOCBF{Pravidla --} Dodržet \TOCIT{minimální počet literatury} z daného období;
    mít minimálně \TOCIT{dvakrát poezii, dvakrát prózu a dvakrát drama};
    nemít více \TOCIT{než dvě díla od jednoho autora}.}
\end{minipage}

\thispagestyle{fancyTOC}

\newpage

Velikost fontu je 7, ano, celkem malé, ale stále čitelné. Název přenastaven na Seznam literatury. Dále samotný seznam sekcí.
\vfill odsadí text až na spodek stránky, kde mám tedy napsaná pravidla, které musí můj seznam splňovat, kvůli podmínkám u maturity.
Styl stránky přenastaven na fancyTOC kvůli číslování stránky.


\NewDocumentCommand{\wtoc}{m m}{%
  \renewcommand{\contentsname}{%
	\WIDTF{%
	{\color{DTOC}#1}%
	\colorbox{DTOC}{\color{DWS}\strut#2}%
	\hfill \normalfont\tiny\textsc{\colorbox{DTOC}{\color{DWS}\theauthor}}
	}{%
    {\color{TOC}#1}%
    \colorbox{TOC}{\color{WS}\strut#2}%
    \hfill \normalfont\tiny\textsc{\colorbox{TOC}{\color{WS}\theauthor}}%
    }%
  }%
}

Příkaz \wtoc patří zase mezi ty složitější.

Pokud je zapnut tmavý režim, tak je první část názvu (Seznam lit) napsaná barvou DTOC, druhá část (eratury) je pak v čtverci barvy DTOC zatímco samotný tet je napsán barvou DWS.
Následuje odsazení na pravý okraj stránky, kde je jméno autora malým hlavičkovým písmem.

Pokud je tmavý režim vypnut, tak je logika stejná, jen jsou využité barvy TOC a WS.


\newcommand{\TOCBF}[1]{%
  \WIDTF{%
    {\color{DTOC}\textbf{#1}}%
  }{%
    {\color{TOC}\textbf{#1}}%
  }%
}%
\newcommand{\TOCIT}[1]{%
  \WIDTF{%
    {\color{DTOC}\textit{#1}}%
  }{%
    {\color{TOC}\textit{#1}}%
  }%
}%
\newcommand{\TOCRULE}[1]{
  \WIDTF{
    {\textcolor{DTOC}{#1}}
  }{
    {\textcolor{TOC}{#1}}
  }
}

\TOCBF je tučný text napsán barvou DTOC nebo TOC dle zvoleného režimu zobrazení.

\TOCIT je barevný text napsaný kurzívou.

\TOCRULE vloží argument do barevného prostředí a argument v rámci stránky definuji jako \rule{\linewidth}{0.4pt}, tedy to zobrazí barevnou čáru po celé délce textu.


Stránka textu

Název papíru

\newpage

\bigsection{Světová a česká literatura do konce 18. století}[min. 2 literární díla]

% \coffeestainA{0.4}{1}{90}{30em}{40em}

\changefontsize{6.8pt}
% \changefontsize{4pt}

\drama{Hamlet}{WILLIAM SHAKESPEARE}

Velká sekce, do které papír v rámci seznamu spadá, je Světová literatura do konce 18. století, požadavek je napsán v rámci vynechatelného argumentu.
\cofeestain by dal horního pravého rohu kaňku od kávy, je s tím sranda, papír pak vypadá špinavě a použitě.
Font je pouhých 6.8, kdy 7 bylo moc velký, aby se to vešlo na jednu A4 stránku, ale 6 už bylo téměř nečitelné.
\drama{Hamlet}{WILLIAM SHAKESPEARE} pak určí jako podstatu stránky drama, název díla a jméno autora.


\NewDocumentCommand{\bigsection}{m o}{%
  \phantomsection % Creates a linkable anchor for the TOC
  \WIDTF{
  \addtocontents{toc}{\protect\contentsline{part}{\normalfont\fontsize{12pt}{13pt}\selectfont \colorbox{DTOC}{\color{DWS}#1}%
  		\IfValueT{#2}{\hspace{1em}{\normalfont\fontsize{5.5pt}{6.5pt}\textsc{#2}}}%
  	}{}{} }%
  }{%
  \addtocontents{toc}{\protect\contentsline{part}{\normalfont\fontsize{12pt}{13pt}\selectfont \colorbox{TOC}{\color{WS}#1}%
    \IfValueT{#2}{\hspace{1em}{\normalfont\fontsize{5.5pt}{6.5pt}\textsc{#2}}}%
  }{}{} }
	}% Suppress the page number in the TOC entry
}

Další příkaz se složitější logikou. Hodnota tohoto nadpisu je part, což je v rámci TeXu nadpis s největší hodnotou, v HTML kódu se to dá přirovnat k H1 nadpisům.

Zatímco na samotné stránce není název vidět, tak to ale napíše název sekce do obsahu, kdy všechny názvy papírů po této sekci, náleží do této sekce.


\NewDocumentCommand{\drama}{m m o o}{
  \WIDTF{
    \wart{#1}{#2}[#3][Ddrama][DWS][DTOC][DBS][#4][drama]
  }{
    \wart{#1}{#2}[#3][drama][WS][TOC][BS][#4][drama]
  }
}

\NewDocumentCommand{\poezie}{m m o o}{
  \WIDTF{
    \wart{#1}{#2}[#3][Dpoezie][DWS][DTOC][DBS][#4][poezie]
  }{
    \wart{#1}{#2}[#3][poezie][WS][TOC][BS][#4][poezie]
  }
}

\NewDocumentCommand{\proza}{m m o o}{
  \WIDTF{
    \wart{#1}{#2}[#3][Dpróza][DWS][DTOC][DBS][#4][próza]
  }{
    \wart{#1}{#2}[#3][próza][WS][TOC][BS][#4][próza]
  }
}

Příkazy \drama, \proza a \poezie mají 4 argumenty. Kdy první určuje název díla, druhý určuje jméno autora, další dva vysvětlím za pomoci jiné stránky, kdy jsou využity takto:
[TODO][\killpage]
kdy tedy 3. argument je bonusový text, poznámka, chcete-li, která se vypíše do TOC ale ne na stránku samotnou a 4. argument je využit pro případné bonusové příkazy, tady \killpage, která zamezí tisku stránky.

Tyto argumenty dále vypíše do příkazu \wart, kdy první tři zůstavají stejné, navíc dá barvu Ddrama při tmavém módu a drama při světlém. Dále DWS/WS, DTOC/TOC a DBS/BS a případně vloží bonusový příkaz ze 4. argumentu.


\NewDocumentCommand{\wart}{m m o o o o o o o}{%
  \noindent% Prevent paragraph indentation
  {\normalfont\Large\bfseries%
      {\colorbox{#4}{\color{#5}#2}\colorbox{#5}{\color{#4} -- \phantomsection\label{#1}{#1}}}\hfill%
      {\colorbox{#4}{\color{#5}\normalfont\tiny\textsc{\theauthor}}}\par%
  }% Main output
  \IfValueT{#8}{#8}% Only print #8 if it exists
  \IfValueT{#4}{\csdef{wartCurrentValue}{#4}} % Store #3 globally if provided
  \addtocontents{toc}{\protect\contentsline{section}{%
  \normalfont\fontsize{7pt}{8pt}\selectfont{%
  \color{#6}\textbf{\IfValueTF{#3}{#2{ }}{$\Rightarrow$ #2{ }}}}{%
  \color{#7} -- \textit{#1}%
  \IfValueTF{#3}{\textbf{\color{#6} { }(#3)}}{}}}{%
  \color{#6}#9 - \thepage.}{}}%
}

Tady mám ukázku příkazu, který už tak narostl, že se začíná propadat sám do sebe.
Využívá barvy z argumentů, napíše název díla, autora a do horního pravého rohu napíše mě, coby autora papíru.
Dále do obsahu vloží název díla, autora, případný bonusový 3. argument, napíše číslo stránky.
A argument číslo 8. Bonusový příkaz, se využije jen pokud je napsán.


\usepackage{atbegshi}

\newcommand{\killpage}{%
	\AtBeginShipoutNext{%
		\AtBeginShipoutDiscard%
		\addtocounter{page}{-1}% Decrement the page counter
	}%
}

A speciální příkaz \killpage, který zamezí stránce, aby se vytiskla a navíc odečte stránku od počtu stránek, takže číslování stránek funguje jak má (jinak by si číslování pamatovalo, že tam ta stránka byla a 2. stránka by měla číslo 3 a tak dále).


Ukázka textu

\noindent\begin{wrapfigure}{r}{0.35\textwidth}
\tiny\subwection{Ukázka z díla:}\setlength{\parindent}{3pt}\noindent\textsc{Hamlet:} Být nebo nebýt -- to je otázka:
je důstojnější zapřít se~a~snášet surovost osudu a~jeho rány, anebo se vzepřít moři trápení a~skoncovat to navždy?
Zemřít, spát -- a~je to.
Spát -- a~navždy ukončit úzkost a~věčné útrapy a~strázně, co údělem jsou těla -- co~si~můžeme přát víc, po čem toužit?
-- Zemřít, spát -- spát, možná snít -- a~právě v tom je zrada.
Až ztichne vřava~pozemského bytí, ve spánku smrti můžeme mít sny -- to proto váháme a~snášíme tu dlouhou bídu, již se říká život.
Neboť kdo vydržel by kopance a~výsměch doby, aroganci mocných, průtahy soudů, znesvěcenou lásku, nadutost úřadů a~ústrky, co slušnost věčně sklízí od lumpů, když pouhá dýka~srovnala~by účty, a~byl by klid?
Kdo chtěl by nést to břímě, úpět a~plahočit se životem, nemít strach z toho, co je za~smrtí, z neznámé krajiny, z níž poutníci se nevracejí.
To nám láme vůli -- snášíme radši hrůzy, které známe, než abychom šli vstříc těm neznámým.
Tak svědomí z nás dělá zbabělce a~zdravá barva~rozhodného činu se roznemůže zbledlou meditací, záměry velké významem a~vahou se odvracejí z vytčeného směru a neuzrají v čin.
\end{wrapfigure}

Vloží do horního pravého rohu ukázku textu z díla.

Sekce

\wection{LITERÁRNÍ HISTORIE}

\subwection{Politická situace:}
\noindent
\textit{Hamlet} byl napsán a hrán v období, kdy královně Elizabetě I. bylo kolem šedesáti let.
Šlo o období nepokojů a nejistoty ohledně koruny, protože trůn neměl dědice a královna odmítala jednoho jmenovat.
Poddaní si o svého času oblíbené královně začali myslet, že se na stará kolena stala slobymyslnou až nebezpečnou.
\textit{Hamlet} přesně takového monarchu popisuje, králi se nedá věřit ohledně jeho úmyslů a princ, následník trůnu, hraje blázna a aktivně jde proti králi.
Stejně jako v \textit{Shakespearově} realitě, i v jeho hře jde o nejisté období, kdy nikdo neví, jak bude královský rod pokračovat.

Tady je vidět, jak se text dělí na sekce a podsekce.


\NewDocumentCommand{\wection}{m}{%
  \titlespacing{\section}{0pt}{0pt}{0pt} % Adjust spacing
  \phantomsection % Creates an anchor for linking
  \noindent % Prevents indentation
  \WIDTF{%
  {\normalfont\large\bfseries\colorbox{DWS}{\color{\wpagecolor}#1}}%
  }{%
  {\normalfont\large\bfseries\colorbox{WS}{\color{\wpagecolor}#1}}%
  }% Matches \section* styling
  \par
}

Sekce je tučným textem v barevném poli (barva stránky, proto pole není vidět). Kdy se barva textu shoduje s barvou kapitoly.


\NewDocumentCommand{\subwection}{m}{%
  \titlespacing{\subsection}{0pt}{0pt}{0pt} % Adjust spacing
  \phantomsection % Creates an anchor for linking
  \noindent % Prevents indentation
  \WIDTF{%
  {\normalfont\small\bfseries\colorbox{\wpagecolor}{\color{DWS}#1}}%
  }{%
  {\normalfont\small\bfseries\colorbox{\wpagecolor}{\color{WS}#1}}%
  }% Matches \subsection* styling
  \par
}

Podsekcí je poté obráceným příkazem, kdy je pro ohraničení využitá barva kapitoly a pro text samotný barva stránky.


Hotové PDF

FGBook

Celý kód

FGBook.tex

waytex.sty

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

+