Skip to content
Snippets Groups Projects
Commit 14fbfdf3 authored by Martin Mareš's avatar Martin Mareš
Browse files

Aktualizace adsmac podle Průvodce v2

parent ef5d235f
No related branches found
No related tags found
No related merge requests found
% TeX macros for typesetting of the ADS book
% (c) 2007--2019 Martin Mares <mj@ucw.cz>
% (c) 2007--2022 Martin Mareš <mj@ucw.cz>
% (c) 2014 Tomas Valla <tom@ucw.cz>
% Inicializace luaTeXu, aby umel hledat bitmapove fonty
......@@ -8,9 +7,10 @@
\input ltluatex.tex
\input luatex85.sty
\input ucwmac2.tex
\input ucw-paper.tex
\ucwmodule{paper}
\ucwmodule{verb}
\ucwmodule{ref}
\input lua-ofs.tex
\input ucw-verb.tex
\input amssym.tex
\input pdf-trans.tex
......@@ -31,8 +31,6 @@
% některá makra)
% \modemobi E-book v MOBI (navíc k předchozímu módu)
\let\modeafive=\relax
\newif\ifebook
\newif\ifmobi
\newif\ifprint
......@@ -88,6 +86,8 @@
\medskipamount=8bp plus 1pt minus 1pt
\smallskipamount=2bp plus 1pt minus 0.5pt
\preitemizepenalty=0
\postitemizepenalty=0
\preitemizeskip=0pt
\postitemizeskip=0pt
\interitemskip=\medskipamount
......@@ -133,7 +133,7 @@
\lefthyphenmin=2
\righthyphenmin=2
\automatichyphenmode=2
\hyphenation{Quick-sort hay-stack}
\hyphenation{Quick-sort Quick-sor-tu nej-men-ší-ho aby-chom}
%%% Drobnosti %%%
......@@ -158,7 +158,6 @@
% Kaligraficka pismenka
\protected\def\Bb{{\cal B}}
\protected\def\Cc{{\cal C}}
\protected\def\Uu{{\cal U}}
% Booleovské operace
\def\NOT{\cscop{not}}
......@@ -183,17 +182,10 @@
% Transpozice matice
\def\T{^{\rm T}}
% Otočení řetězce
\def\rev{^{\rm R}}
% Rozšířená přechodová funkce
\def\dstar{\delta^*}
% Svislá čárka jako normální operátor (\mid je relační)
\def\alt{\mathop{\mid}}
% Slozitostni tridy
\protected\def\cc#1{\hbox{\setfonts[LMSans/]\rm #1}}
\def\P{\cc{P}}
\def\NP{\cc{NP}}
% Viceznakove identifikatory (funguji jak v textovem, tak matematickem modu)
\def\<#1>{\ifmmode\mathchoice
......@@ -218,8 +210,8 @@
% ... pokud je za displayed math:
\def\qedmath{\vskip-\baselineskip\rightline{$\square$}}
% Bit slice
\def\slice#1{\!\left<#1\right>}
% Velmi vhodné místo k lomu stránky (silnější verze \filbreak)
\def\xfilbreak{\par\vfil\penalty-1000\vfilneg}
% Poznamky pod carou
\newcount\footcnt
......@@ -251,12 +243,19 @@
% Alias pro rovnítko, když ho potřebujeme použít v rejstříkovém hesle
\protected\def\equals{=}
% Odrážka "(x)" pro \numlist
\def\nparenp{(\nnorm)}
% Break radku
\def\\{\hfil\break}
% Značka pro stupeň
\def\degree{^\circ}
% Stupeň vrcholu
\def\degin{\deg^{\rm in}}
\def\degout{\deg^{\rm out}}
% Rozdělitelná pomlčka (pozor, v algoritmech se \= předefinuje na přiřadítko)
% Taktéž pozor, že explicitní pomlčky (ať už "-" nebo "\=") potlačují implicitní dělení slov.
\def\={\discretionary{-}{-}{-}}
......@@ -275,31 +274,10 @@
\def\9{\|9|}
\def\sp{\hbox{\tentt\char32}}
% Gramatiky
\def\grule{\rightarrow}
\def\grev{\Relbar\shortjoinrel\Rightarrow}
\def\grew{\mathrel{\ooalign{\hfil\raise 5pt\hbox{$\scriptstyle *$}\hskip 2pt\hfil\cr\hfil$\grev$\hfil\cr}}}
\def\shortjoinrel{\mathrel{\mkern-7mu}}
% Chomského hierarchie
\def\Ell{{\cal L}}
% Kódování dvojic
\def\pair#1#2{\left<#1,#2\right>}
% Předefinujeme vlnovku, aby byla \protected
\let\plaintilde=~
\protected\def~{\plaintilde}
% Tabulka operací datové struktury
\def\optable#1{$$
\def\cr{\crcr\noalign{\smallskip}}
\vbox{\halign{
\hbox to 9em{##\hfil}&\vtop{\hsize=0.65\hsize\parindent=0pt\strut ##\unskip\strut}\crcr
#1
\noalign{\vskip-\smallskipamount}
}}$$}
%%% Fonty %%%
\def\chapfont{\setfonts[LMSansDC/24]}
......@@ -311,29 +289,6 @@
\protected\def\captionfont{\setfonts[LMSans/9]\setmath[//]\fixsetmath\baselineskip=11bp}
%%% Nepovinné argumenty %%%
% Provedeme-li \def\a{\withoptarg\b}, chová se makro \a takto:
% \a[arg] provede \def\optarg{arg} a expanduje \b
% \a provede \let\optarg=\relax a expanduje \b
\def\withoptarg#1{\let\xoptcall=#1\futurelet\next\xopt}
\def\xopt{\ifx\next[\expandafter\xoptwith\else\let\optarg=\relax\expandafter\xoptcall\fi}
\def\xoptwith[#1]{\def\optarg{#1}\xoptcall}
% Zkratka pro definici maker s nepovinnými argumenty:
% \optdef\makro se chová jako \def\domakro, přičemž \makro samotné je definováno
% jako wrapper volající \domakro pomocí \withoptarg.
\def\optdef#1{%
\edef\xoptname{\expandafter\eatbackslash\string#1}%
\edef#1{\noexpand\withoptarg\csname do\xoptname\endcsname}%
\expandafter\def\csname do\xoptname\endcsname
}
% Trik: \eatbackslash smaže následující backslash kategorie 12
\begingroup\lccode`\+=`\\
\lowercase{\endgroup\def\eatbackslash+{}}
\def\optargorempty{\ifx\optarg\relax\else\optarg\fi}
%%% Sazba algoritmu %%%
......@@ -358,8 +313,8 @@
\itemcount=0
}
\def\typedalgo#1#2{\algoinit {\bo #1\/} \alg{#2}}
\def\algo#1{\typedalgo{Algorithm}{#1}\if"#1"\else\rr{algorithm/\alg{#1}}\fi}
\def\proc#1{\typedalgo{Procedure}{#1}\if"#1"\else\rr{procedure/\alg{#1}}\fi}
\def\algo#1{\typedalgo{Algoritmus}{#1}\if"#1"\else\rr{algoritmus/\alg{#1}}\fi}
\def\proc#1{\typedalgo{Procedura}{#1}\if"#1"\else\rr{procedura/\alg{#1}}\fi}
\def\headlessalgo{\algoinit}
\def\endalgo{\goodbreak\endlist\endgroup}
\let\endproc=\endalgo
......@@ -385,9 +340,6 @@
% Jmeno algoritmu v textu nebo ve formuli
\protected\def\alg#1{\leavevmode\hbox{\csc #1}}
% Jmena operaci datovych struktur sazime stejne jako jmena algoritmu
\let\op=\alg
%%% Konstrukce pouzivane v algoritmech %%%
% Komentar
......@@ -466,37 +418,58 @@
\optdef\chapter#1{
\advance\chapcount by 1
\def\chaptername{#1}
\separatorpage{\the\chapcount~#1}
\separatorpage{\chapnumber~#1}
\seccount=0
\figcount=0
\ifebook\else\footcnt=0\fi
\addid{ch}{\chapnumber}
\addtoc\tocchapter{\chapnumber}{}{#1}
\chapterheading{\chapnumber~~#1}
\def\currentchapter{\chapnumber}
\mark{\currentchapter~#1}
\bigskip
\unparskip
}
\optdef\appendix#1{
\ifnum\chapcount<50 \chapcount=50\fi
\advance\chapcount by 1
\def\chaptername{#1}
\separatorpage{Dodatek \chapnumber\hfil\break #1}
\seccount=0
\figcount=0
\ifebook\else\footcnt=0\fi
\addid{ch}{\the\chapcount}
\addtoc\tocchapter{\the\chapcount}{}{#1}
\chapterheading{\the\chapcount~~#1}
\def\currentchapter{\the\chapcount}
\addid{ch}{\chapnumber}
\addtoc\tocchapter{\chapnumber}{}{#1}
\chapterheading{\chapnumber~~#1}
\def\currentchapter{\chapnumber}
\mark{\currentchapter~#1}
\bigskip
\unparskip
}
\def\chapnumber{\ifnum\chapcount < 50 \the\chapcount\else A\fi}
\optdef\section#1{
\goodbreak\bigskip\bigskip
\advance\seccount by 1
\addid{sec}{\the\chapcount.\the\seccount}
\addtoc\tocsection{\the\chapcount.\the\seccount}{}{#1}
\sectionheading{\the\chapcount.\the\seccount~~#1}
\def\currentchapter{\the\chapcount.\the\seccount}
\addid{sec}{\chapnumber.\secnumber}
\addtoc\tocsection{\chapnumber.\secnumber}{}{#1}
\sectionheading{\chapnumber.\secnumber~~#1}
\def\currentchapter{\chapnumber.\secnumber}
\mark{\currentchapter~~\chaptername~--~#1}
\nobreak\bigskip\unparskip\nobreak
}
\def\secnumber{\the\seccount}
\optdef\sectionstar#1{
\goodbreak\bigskip\bigskip
\advance\seccount by 1
\addid{sec}{\the\chapcount.\the\seccount}
\addtoc\tocsection{\the\chapcount.\the\seccount}{*}{#1}
\sectionheading{\the\chapcount.\the\seccount\kern1pt*~~#1}
\def\currentchapter{\the\chapcount.\the\seccount}
\addid{sec}{\chapnumber.\secnumber}
\addtoc\tocsection{\chapnumber.\secnumber}{*}{#1}
\sectionheading{\chapnumber.\secnumber\kern1pt*~~#1}
\def\currentchapter{\chapnumber.\secnumber}
\mark{\currentchapter\kern1pt*~~\chaptername~--~#1}
\nobreak\bigskip\unparskip\nobreak
}
......@@ -515,11 +488,13 @@
\def\sectionheading#1{\leftline{\secfont #1}}
\def\subsectionheading#1{\leftline{\subsecfont #1}}
\def\endchapter{
\let\doendchapter=\relax
\ifsinglechapter
\def\endchapter{\csname bye\endcsname} % Avoid problems with \outer
\else
\let\endchapter\relax
\slet{doendchapter}{bye} % Avoid problems with \outer
\fi
\doendchapter
}
%%% Cviceni %%%
......@@ -536,12 +511,23 @@
\def\endexercises{\endgroup}
\def\exnumber{\chapnumber.\secnumber.\the\excount}
\long\def\exwith#1#2{\par
\advance\excount by 1
\addid{ex}{\the\chapcount.\the\seccount.\the\excount}
{\exnumber{#1}#2\par}}
\addid{ex}{\exnumber}
{
\exitem{#1}#2
\ifcsname hidx-\exnumber\endcsname
\unskip
\edef\currenthidx{\csname hidx-\exnumber\endcsname}
\parfillskip=0pt\allowbreak\hfill\nobreak {[\ref{hint}{\currenthidx}]}
\fi
\par
}
}
\def\exnumber#1{\>\llap{\hbox to 2.2em{\the\excount\rlap{\kern1pt #1}.\hfil}}}
\def\exitem#1{\>\llap{\hbox to 2.2em{\the\excount\rlap{\kern1pt #1}.\hfil}}}
% Cviceni obycejne a tezsi
\optdef\ex{\exwith{}}
......@@ -562,59 +548,22 @@
\long\def\solution##1{\par \>\em{Solution:} ##1}
}
\def\furtherexercises{\section{Further exercises}\initexercises}
\def\furtherexercises{\section{Další cvičení}\initexercises}
\def\excmt#1{{\leftskip=0pt\parindent=\normalparindent #1\smallskip}}
%%% Odkazy na kapitoly a jine objekty %%%
% Název aktuálního souboru (v PDF verzi vždy prázdný, v E-bookové se mění)
\def\currentfile{}
% Poridime si soubor, do ktereho budeme zapisovat identifikatory
\newwrite\ids
\def\writeid#1#2{\immediate\write\ids{\string\iddef{#1}{#2}{\currentfile}}}
\def\delayedwriteid#1#2{\write\ids{\string\iddef{#1}{#2}{\currentfile}}}
%%% Odkazy na kapitoly a jiné objekty pomocí ucw-link %%%
\def\iddef#1#2#3{\ifcsname id#1\endcsname\immediate\write16{*** Warning: Reference #1 re-defined ***}\else
\expandafter\def\csname id#1\endcsname{#2}%
\expandafter\def\csname ff#1\endcsname{#3}%
\fi}
\immediate\openin\ids=ids.aux
\ifeof\ids
\else
\input ids.aux
\fi
\immediate\closein\ids
\immediate\openout\ids=ids.aux
% Nízkoúrovňové rozhraní na sazbu odkazů: vysází klikací odkaz na identifikátor #1,
% jeho obsah přechroustá makrem #2 (obvykle buď \relax, nebo \relativizeref)
\def\reflink#1#2{\expandafter\ifx\csname id#1\endcsname\relax
{\bo ??}%
\immediate\write16{*** Warning: Reference #1 undefined ***}%
\else
\ifprint\else
\pdfextension startlink\commonlinkargs goto name {#1}\relax
\fi
#2{\csname id#1\endcsname}%
\ifprint\else
\pdfextension endlink\relax
\fi
\ifprint
\clickablefalse
\fi
}
\pdfvariable linkmargin=1pt
\def\commonlinkargs{height 8pt depth 2pt attr {/C [0 0 0.5] /Border [0 0 2]}}
\def\ref#1{\reflink{#1}\relax}
\def\relref#1{\reflink{#1}\relativizeref}
\def\relref#1#2{\reflink{#1}{#2}\relativizeref}
\def\relativizeref#1{{%
\edef\xx{#1}%
\edef\xcs{\expandafter\splitab\xx.}%
\edef\thiscs{\the\chapcount.\the\seccount}%
\edef\thiscs{\chapnumber.\secnumber}%
\ifx\xcs\thiscs\expandafter\splitc\xx.\else\xx\fi
}}
......@@ -622,46 +571,15 @@
\def\splitab#1.#2.#3.{#1.#2}
\def\splitc#1.#2.#3.{#3}
% Pojmenovavani objektu: vola se z maker s nepovinnym argumentem
% jako \addid{prefix identifikatoru}{cislo objektu}
% Nastavuje \currentid buď na ID s prefixem, nebo na \relax
\def\addid#1#2{%
\ifx\optarg\relax
\let\currentid\relax
\else
\edef\currentid{#1\optarg}%
\writeid{\currentid}{#2}%
\ifprint\else
\pdfextension dest name {\currentid} xyz\relax
\fi
\fi
}
% Pojmenovani stranky
\def\pageid#1{\delayedwriteid{page#1}{\the\count0}\ifprint\else\pdfextension dest name {page#1} fit\relax\fi}
% Odkazovani na objekty
\def\chapref#1{\ref{ch#1}}
\def\secref#1{\ref{sec#1}}
\def\exref#1{\relref{ex#1}}
\def\itemref#1{\ref{item#1}}
\def\figref#1{\ref{fig#1}}
\def\pageref#1{\ref{page#1}}
\def\chapref{\ref{ch}}
\def\secref{\ref{sec}}
\def\exref{\relref{ex}}
\def\itemref{\ref{item}}
\def\figref{\ref{fig}}
% Skok na zadané číslo stránky (používá se u odkazů z obsahu a rejstříku, kde čísla stránek známe)
\def\pagelink#1{\ifprint#1\else\pdfextension startlink\commonlinkargs goto page #1 {/Fit}\relax #1\pdfextension endlink\fi}
% Klikací URL (jestli je budeme používat víc, bylo by hezké umět je zadávat bez escapování speciálnich znaků)
\def\url#1{%
\ifprint\else
\pdfextension startlink\commonlinkargs user {/Subtype/Link /A << /Type/Action /S/URI /URI(#1) >>}\relax
\fi
\xurl #1^^X%
\ifprint\else
\pdfextension endlink\relax
\fi
}
\def\xurl#1:#2#3^^X{{\I #1:#2\ifx#2/\kern-0.1em\fi#3}}
\def\pagelink#1{\linkpage{#1}{#1}}
%%% Obrazky %%%
......@@ -720,8 +638,8 @@
}}
% Popisek obrazku
\def\figcaption#1{\captionfont Obrázek \the\chapcount.\the\figcount: #1}
\def\newfig{\global\advance\figcount by 1\relax\addid{fig}{\the\chapcount.\the\figcount}}
\def\figcaption#1{\captionfont Obrázek \chapnumber.\the\figcount: #1}
\def\newfig{\global\advance\figcount by 1\relax\addid{fig}{\chapnumber.\the\figcount}}
% Obrazek: \figure{soubor.epdf}{velikost}{popisek}
\optdef\figure#1#2#3{\newfig\float{\rawfigure{#1}{#2}}{\figcaption{#3}}{\optargorempty}}
......@@ -766,19 +684,17 @@
\def\lemman#1{\s{Lemma (#1):} \sbody}
\def\lemmax#1{\s{Lemma~#1:} \sbody}
\def\lemmaxn#1#2{\s{Lemma~#1 (#2):} \sbody}
\def\proof{\noindent\em{Důkaz:} }
\def\proofofthm{\noindent\em{Důkaz věty:} }
\def\proofoflemma{\noindent\em{Důkaz lemmatu:} }
\def\proofsketch{\noindent\em{Náčrt důkazu:} }
\def\proof{\noindent\em{\kern-0.5pt Důkaz:} }
\def\proofofthm{\noindent\em{\kern-0.5pt Důkaz věty:} }
\def\proofoflemma{\noindent\em{\kern-0.5pt Důkaz lemmatu:} }
\def\proofsketch{\noindent\em{Náznak důkazu:} }
\def\proofidea{\noindent\em{Myšlenka důkazu:} }
\def\defn{\s{Definice:} \sbody}
\def\obs{\s{Pozorování:} \sbody}
\def\note{\s{Poznámka:} \sbody}
\def\noten#1{\s{Poznámka (#1):} \sbody}
\def\cor{\s{Důsledek:} \sbody}
\def\corn#1{\s{Důsledek (#1):} \sbody}
\def\corx#1{\s{Důsledek #1:} \sbody}
\def\corxn#1#2{\s{Důsledek~#1 (#2):} \sbody}
\def\nota{\s{Notace:} \sbody}
\def\rem{\s{Poznámka:} \sbody}
\def\remn#1{\s{Poznámka (#1):} \sbody}
\def\corr{\s{Důsledek:} \sbody}
\def\nota{\s{Značení:} \sbody}
\def\example{\s{Příklad:} \sbody}
\def\examplen#1{\s{Příklad (#1):} \sbody}
\def\examples{\s{Příklady:} \sbody}
......@@ -830,7 +746,7 @@
\def\dfr#1#2{\rr{#2}\em{#1}}
% Definice operace datové struktury
\def\opdf#1{\rr{operace/#1=operace/\op{#1}}\op{#1}}
\def\opdf#1{\rr{operace/#1=operace/\alg{#1}}\alg{#1}}
% Zápis do souboru
\newwrite\idxfile
......@@ -856,7 +772,7 @@
\parindent=0pt
\leavevmode
\vrule width 0pt height 6pt depth 2pt
\setfonts[/7]\baselineskip=8pt
\setfonts[/7]\setmath[//]\baselineskip=8pt
\tt #1\par
\allowbreak
}}
......@@ -954,8 +870,8 @@
% Rozměry zrcadla
\dimen1=\leftmargin % bot-left x
\dimen2=\bottommargin % bot-left y
\dimen3=\dimexpr\pagewidth-\leftmargin-\rightmargin\relax % width
\dimen4=\dimexpr\pageheight-\topmargin-\bottommargin\relax % height
\dimen3=\dimexpr\luatexpagewidth-\leftmargin-\rightmargin\relax % width
\dimen4=\dimexpr\luatexpageheight-\topmargin-\bottommargin\relax % height
\ifodd\pageno\else\advance\dimen1 by \evenpageshift\fi
\ifcropmarks
\advance\dimen1 by \cropmargin
......@@ -979,14 +895,14 @@
0 \tobp{\cropmargin} m \tobp{\dimexpr\cropmargin-\cropgap\relax} \tobp{\cropmargin} l S
\tobp{\cropmargin} 0 m \tobp{\cropmargin} \tobp{\dimexpr\cropmargin-\cropgap\relax} l S
% Bottom right
\tobp{\pagewidth} \tobp{\cropmargin} m \tobp{\dimexpr\pagewidth-\cropmargin+\cropgap\relax} \tobp{\cropmargin} l S
\tobp{\dimexpr\pagewidth-\cropmargin\relax} 0 m \tobp{\dimexpr\pagewidth-\cropmargin\relax} \tobp{\dimexpr\cropmargin-\cropgap\relax} l S
\tobp{\luatexpagewidth} \tobp{\cropmargin} m \tobp{\dimexpr\luatexpagewidth-\cropmargin+\cropgap\relax} \tobp{\cropmargin} l S
\tobp{\dimexpr\luatexpagewidth-\cropmargin\relax} 0 m \tobp{\dimexpr\luatexpagewidth-\cropmargin\relax} \tobp{\dimexpr\cropmargin-\cropgap\relax} l S
% Top left
0 \tobp{\dimexpr\pageheight-\cropmargin\relax} m \tobp{\dimexpr\cropmargin-\cropgap\relax} \tobp{\dimexpr\pageheight-\cropmargin\relax} l S
\tobp{\cropmargin} \tobp{\pageheight} m \tobp{\cropmargin} \tobp{\dimexpr\pageheight-\cropmargin+\cropgap\relax} l S
0 \tobp{\dimexpr\luatexpageheight-\cropmargin\relax} m \tobp{\dimexpr\cropmargin-\cropgap\relax} \tobp{\dimexpr\luatexpageheight-\cropmargin\relax} l S
\tobp{\cropmargin} \tobp{\luatexpageheight} m \tobp{\cropmargin} \tobp{\dimexpr\luatexpageheight-\cropmargin+\cropgap\relax} l S
% Top right
\tobp{\pagewidth} \tobp{\dimexpr\pageheight-\cropmargin\relax} m \tobp{\dimexpr\pagewidth-\cropmargin+\cropgap\relax} \tobp{\dimexpr\pageheight-\cropmargin\relax} l S
\tobp{\dimexpr\pagewidth-\cropmargin\relax} \tobp{\pageheight} m \tobp{\dimexpr\pagewidth-\cropmargin\relax} \tobp{\dimexpr\pageheight-\cropmargin+\cropgap\relax} l S
\tobp{\luatexpagewidth} \tobp{\dimexpr\luatexpageheight-\cropmargin\relax} m \tobp{\dimexpr\luatexpagewidth-\cropmargin+\cropgap\relax} \tobp{\dimexpr\luatexpageheight-\cropmargin\relax} l S
\tobp{\dimexpr\luatexpagewidth-\cropmargin\relax} \tobp{\luatexpageheight} m \tobp{\dimexpr\luatexpagewidth-\cropmargin\relax} \tobp{\dimexpr\luatexpageheight-\cropmargin+\cropgap\relax} l S
Q
}
}}
......@@ -994,7 +910,9 @@
\let\background=\relax
\ifprint
\def\separatorbackground{}
\def\separatorbackground{
\pdfliteral page{q 0 0 \tobp{\pagewidth} \tobp{\pageheight} re 0.75 g f Q}
}
\else
\def\separatorbackground{
\pdfliteral page{q 0 0 \tobp{\pagewidth} \tobp{\pageheight} re 0.769 0.180 0.208 rg f Q}
......@@ -1093,7 +1011,7 @@
\directlua{
require('lua-pdfmeta.lua')
pdfmeta.set_info('Title', 'Úvod do automatů')
pdfmeta.set_info('Title', 'Úvod do kryptografie')
pdfmeta.set_info('Author', 'Martin Mareš')
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment