%% This document is part of the document tex-overview. It contains the formatting and definitions for typesetting. Please do *not* consider anything here as an example of good TeX coding style – it's not. %% author: Arno Trautmann % !TeX root = tex-overview.tex %% (for the TeXworks-users.) \documentclass{scrartcl} \usepackage[svgnames]{xcolor} \usepackage{ array, bookmark, booktabs, cooltooltips, colortbl, dtklogos, %% for \NTS etc. ⇒  what about metalogo? fontspec, geometry, hyperref, longtable, luacode, multicol, microtype, pdftexcmds, tabu, tikz, xparse } \makeatletter \def\l@section#1#2{ % this is not neat, but seemingly the only way to reduce the space between sections in toc. % Actually, it's a good reason to think about a plain TeX solution for this package … \ifnum \c@tocdepth >\z@ \ifnum \lastpenalty <20009 \addpenalty {\@secpenalty }\fi \addvspace {.3em \@plus \p@ }\setlength \@tempdima {1.5em}\if@tocleft \ifx \toc@l@number \@empty \else \setlength \@tempdima {0\toc@l@number }\fi \fi \begingroup \raggedsectionentry \parindent \z@ \advance \rightskip \@pnumwidth \parfillskip -\@pnumwidth \interlinepenalty \@M \leavevmode \advance \leftskip \@tempdima \null \nobreak \hskip -\leftskip \usekomafont {sectionentry}{#1\nobreak \usekomafont {sectionentrypagenumber}{\hfill \nobreak \hb@xt@ \@pnumwidth {\hss #2}}}\par \endgroup \ifnum \scr@compatibility >\@nameuse {scr@v@2.96}\relax \penalty 20008 \fi \fi } \microtypesetup{stretch=35} %% allow for a bit more expansion to improve typesetting of the columns. \frenchspacing %% for circumventing a bug in cooltooltips \makeatletter \let\topdfescapestring\pdf@escapestring \makeatother \ExplSyntaxNamesOn %% define the look-and-feel of the document \setmainfont{TeX Gyre Pagella} \setsansfont{TeX Gyre Pagella} %% setup the style of hyperlinks. \hypersetup{ unicode=true, colorlinks=true, linkcolor=blue, urlcolor=blue } %% page layout, headings \pagestyle{empty} \addtokomafont{disposition}{\color[rgb]{.4 0 0}} \addtokomafont{section}{\Huge} \addtokomafont{subsection}{\LARGE} \addtokomafont{subsubsection}{\Large} %% some missing definitions for \TeX-like things \tl_set:Nn\XeT{X\kern -.1667em\lower .5ex\hbox {E}\kern -.125emT\@} \tl_set:Nn\ConTeXt{Con\TeX{}t} %% constants for the colors. Might change from time to time … \tl_set:Nn\vip{red} \tl_set:Nn\normalimportant{blue} \tl_set:Nn\experimental{yellow} \tl_set:Nn\planned{LightSkyBlue} \tl_set:Nn\fonttechnology{pink} \tl_set:Nn\program{black} \tl_set:Nn\package{green} \tl_set:Nn\distro{orange} \tl_set:Nn\histdistro{purple} %% shorthand to keep a good structure of the node positions \fp_new:N\layer_num \fp_new:N\layerdist_num \fp_set:Nn\layer_num{0} \fp_set:Nn\layerdist_num{-1} \cs_new:Npn\layer{\fp_use:N\layer_num} %% width of the tooltip-boxes (negative value to make them disappear at all) \dim_set:Nn\fboxrule{-1mm} %% to separate important from not-so-important nodes \bool_new:N\to_short %% the token list to save all the textviews. When set once, it is reset. May be useful anyhow. Or not. \tl_set:Nn\to_textviews{} \NewDocumentCommand\settextviews{}{ \setcounter{section}{3} %% to enable equal section numbers for both text and tree views \to_textviews \tl_set:Nn\to_textviews{} } \cs_gset:Nn\addtotextviews:f{\tl_gput_right:No\to_textviews{#1}} %% environment to set the graphs \NewDocumentCommand\tograph{s+D(){}+m} { \IfBooleanT{#1}{ \ExplSyntaxNamesOn \bool_gset_true:N\to_short \ExplSyntaxNamesOff #2 \begin{tikzpicture} #3 \end{tikzpicture} \clearpage } \ExplSyntaxNamesOn \bool_gset_false:N\to_short \ExplSyntaxNamesOff #2 \begin{tikzpicture} #3 \end{tikzpicture} } %% Style of the nodes: shade from a light \tikzstyle{coolnode} = [ draw=\nodecolor!50!black!70, top color=\nodecolor!10!white!105, bottom color= \nodecolor!50!black!50 ] %% set the first default node style (will change to \distro or \program in the document) \cs_set_eq:NN\tonodestyle\normalimportant %% tonode ⇒ tex-overview node, now with better argument specifier \NewDocumentCommand\tonode{O{\tonodestyle}D(){no label given}D(){no position given}D<>{no description given}m}{ %% save the content pdfescaped \tl_set:No\tonodecontent{\topdfescapestring{#4}} %% test if we are in the short or full view \tl_gset:Nn\nodecolor{#1} \bool_if:NTF\to_short{ %% short view \tl_if_eq:NNT#1{\vip}{ %% then check if this is an important node \node[coolnode] (#2) at (#3) { \cooltooltip{#2}{\tonodecontent}{\tonodecontent}{}{#5\strut} }; } }{ %% long view \node[coolnode] (#2) at (#3) { \cooltooltip{#2}{\tonodecontent}{\tonodecontent}{}{#5\strut} }; %% and the text view, to be added only once! \addtotextviews:f{\subsubsection*{\color{blue}#5}\parbox{\columnwidth}{#4}} } } %% we want to make use of two pdf layers: the upper (main) one for the nodes %% and the lower (background) one for the lines. That way, the lines will not cross the nodes \pgfdeclarelayer{background} \pgfsetlayers{background,main} %% the command to draw from one node to the other one. Fine tuning is possible via optional argument #3 \NewDocumentCommand{\todraw}{st{'}t{.}t{-}O{}d()d()}{ \begin{pgfonlayer}{background} %% draw in the case that: either a * is given (always draw) or (' is given and \to_short) or nothing is given \bool_if:nT{#1 || (#2 && \to_short) || !(#2 || \to_short)} {\draw [thick,gray,\IfBooleanT{#3}{dotted},\IfBooleanT{#4}{dashed},#5] (#6) to (#7);} %% I’m just loooving expl3! \end{pgfonlayer} } %% a nice way to control the vertical position of nodes \NewDocumentCommand{\setlayer}{m}{ \fp_set:Nn\layer_num{#1} } \NewDocumentCommand{\steplayer}{O{\layerdist_num}}{ \fp_add:Nn\layer_num{#1} } \NewDocumentCommand\topart{m}{ \clearpage \dim_set:Nn\pdfpagewidth{9cm} %% make a smaller paper so the header won’t feel so alone on the big, cold paper \dim_set:Nn\pdfpageheight{4cm} \newgeometry{margin=1cm} \part{#1} \newpage \restoregeometry \dim_set:Nn\pdfpagewidth{21cm} %% back to a4 \dim_set:Nn\pdfpageheight{29.7cm} } %% the following code is made to avoid code doubling on cost of readability. Seems to be stable enough to work here. %% the first argument, given in (), determines the level (sub/sub/section) of the entry. The rest is totally unreadable ☹ \NewDocumentCommand\tostruct{D(){0}omO{\tonodestyle}}{ \tl_set:Nn\to_disp{section} \int_compare:nT{#1 > 0}{\tl_put_left:Nn\to_disp{sub}} \int_compare:nT{#1 > 1}{\tl_put_left:Nn\to_disp{sub}} \bool_if:NTF\to_short { \int_compare:nT{#1 = 0}{\stepcounter{section}} \tl_gset:cn{\to_disp mand}{\cs:w the\to_disp\cs_end:.\hspace{.175em} #3\newline short view} \IfNoValueTF{#2}{\tl_gset:cn{\to_disp opt}{\tl_use:c{\to_disp mand}}}{\tl_gset:cn{\to_disp opt}{#2, short view}} \cs:w \to_disp \cs_end:*{\cs:w\to_disp mand\cs_end:} \int_compare:nT{#1 = 0}{\addtocounter{section}{-1}} } { \tl_gset:cn{\to_disp mand}{#3} \IfNoValueTF{#2}{\tl_gset:cn{\to_disp opt}{\cs:w \to_disp mand\cs_end:}}{\tl_gset:cn{\to_disp opt}{#2}} \addtotextviews:f{\cs:w \to_disp\cs_end:[#2]{#3}} \cs:w \to_disp\cs_end:[\cs:w \to_disp opt\cs_end:]{\cs:w \to_disp mand\cs_end:} } \cs_gset_eq:NN\tonodestyle#4 } %% the sectioning of the names table \NewDocumentCommand\totablesec{m}{ ~ \\[-2ex] \rowcolor[gray]{0.9}\hspace*{2em}\Large \strut \large\rmfamily #1 \\ ~ \\[-2ex] } %% a command for creation of bib-items. \NewDocumentCommand\tobibsection{m}{ \subsection*{#1} } \NewDocumentCommand\tobibsubsection{m}{ \subsection*{#1} } \NewDocumentCommand\tobib{mD<>{}O{}}{ \medskip \begin{minipage}{\textwidth} %% to prevent page breaks within bib-items \large #1\normalsize\\ \hspace*{1em} \parbox{.95\textwidth} {\url{#2} #3} \end{minipage} } \ExplSyntaxNamesOff \AtBeginDocument{ { \centering \huge\bfseries An overview of \TeX, its children\\ and their friends~\dots \vspace*{-.2cm} \flushright\parbox{4cm}{ \large \color[rgb]{.4 0 0} Arno Trautmann\\ \fontsize{8.25}{10}\selectfont arno.trautmann@gmx.de } \hspace*{.7cm}\par } \vspace*{1cm} } %% ok, now something just for fun, but I wanted to use this in a "real life" document: % we first define some Lua functions for drawing and then use them to colorize the corners of the document. \begin{luacode} function pdf_print (...) for _, str in ipairs({...}) do pdf.print(str .. " ") end pdf.print("\string\n") end function move (p) pdf_print(p[1],p[2],"m") end function line (p) pdf_print(p[1],p[2],"l") end function curve(p1,p2,p3) pdf_print(p1[1], p1[2], p2[1], p2[2], p3[1], p3[2], "c") end function linewidth (w) pdf_print(w,"w") end function disturb_point(point,strength) if strength then else strength = 5 end return {point[1] + math.random()*2*strength - strength, point[2] + math.random()*2*strength - strength} end function sloppyline(start,stop) local start_line = disturb_point(start,10) local stop_line = disturb_point(stop,10) move(start) curve(start_line,stop_line,stop) pdf_print("S") -- stroke end \end{luacode} \AtBeginShipout{% \AtBeginShipoutUpperLeft{% \color[rgb]{.6 0 0} \luatexlatelua{ linewidth(40) sloppyline({-30,-30},{30,30}) sloppyline({620,-30},{560,30}) sloppyline({-30,-800},{30,-860}) sloppyline({620,-800},{560,-860}) } }% }