summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/optex/base/slides.opm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/optex/base/slides.opm')
-rw-r--r--Master/texmf-dist/tex/optex/base/slides.opm247
1 files changed, 247 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/optex/base/slides.opm b/Master/texmf-dist/tex/optex/base/slides.opm
new file mode 100644
index 00000000000..94fa3afac83
--- /dev/null
+++ b/Master/texmf-dist/tex/optex/base/slides.opm
@@ -0,0 +1,247 @@
+% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \slideshow {Slides style for OpTeX <2021-03-10>} % loaded on demand by \slides
+
+ \_doc -----------------------------
+ Default margins and design is declared here.
+ The `\_ttfont` is scaled by `mag1.15` in order to balance the
+ ex height of Helvetica (Heros) and LM fonts Typewriter.
+ The `\begtt`...`\endtt` verbatim is printed by smaller text.
+ \_cod -----------------------------
+
+\_margins/1 a5l (14,14,10,3)mm % landscape A5 format
+\_def\_wideformat{\_margins/1 (263,148) (16,16,10,3)mm } % 16:9 format
+
+\_ifx\_fontnamegen\_undefined \_fontfam[Heros]
+ \_let\_ttfont=\_undefined \_famvardef\_ttfont{\_setfontsize{mag1.15}\_tt}
+\_fi
+\_typosize[16/19]
+\_def\_urlfont{}
+\_everytt={\_typosize[13/16] \_advance\_hsize by10mm}
+\_fontdef\_fixbf{\_bf}
+
+\_nopagenumbers
+\_parindent=0pt
+\_ttindent=5mm
+\_parskip=5pt plus 4pt minus2pt
+\_rightskip=0pt plus 1fil
+\_ttindent=10pt
+\_def\_ttskip{\_smallskip}
+
+\_onlyrgb % RGB color space is better for presentations
+
+ \_doc -----------------------------
+ The bottom margin is set to 3\,mm. If we use 1\,mm, then the baseline of
+ `\footline` is 2\,mm from the bottom page. This is the depth of the `\Grey`
+ rectangle used for page numbers. It is r-lapped to `\hoffset` width because left
+ margin = `\hoffset` = right margin. It is 14\,mm for narrow pages or
+ 16\,mm for wide pages.
+ \_cod -----------------------------
+
+\_footlinedist=1mm
+\_footline={\_hss \_rlap{%
+ \_rlap{\Grey\_kern.2\_hoffset\_vrule height6mm depth2mm width.8\_hoffset}%
+ \_hbox to\_hoffset{\White\_hss\_folio\_kern3mm}}}
+
+ \_doc -----------------------------
+ The \`\subtit` is defined analogically like `\tit`.
+ \_cod -----------------------------
+
+\_eoldef\_subtit#1{\_vskip20pt {\_leftskip=0pt plus1fill \_rightskip=\_leftskip
+ \_subtitfont #1\_nbpar}}
+
+ \_doc -----------------------------
+ The \`\pshow``<num>` prints the text in invisible
+ (transparent) font when \^`\layernum`\code{<}`<num>`.
+ The transparency is set by `\pdfpageresoyrces` primitive.
+ \_cod -----------------------------
+
+\pdfpageresources{/ExtGState << /Invisible << /Type /ExtGState /ca 0 /CA 0 >>
+ /Visible << /Type /ExtGState /ca 1 /CA 1 >> >>}
+\addto\_morepgresources{/Invisible << /Type /ExtGState /ca 0 /CA 0 >>
+ /Visible << /Type /ExtGState /ca 1 /CA 1 >>}
+\def\Invisible {\_pdfliteral{/Invisible gs}}
+\def\Visible {\_pdfliteral{/Visible gs}}
+\def\Transparent {\Invisible \_aftergroup \Visible}
+
+\_def\_use#1#2{\_ifnum\_layernum#1\_relax#2\_fi}
+\_def\_pshow#1{\_use{=#1}\Red \_use{<#1}\Transparent \_ignorespaces}
+
+ \_doc -----------------------------
+ The main level list of items is activated here. The `\_item:X` and
+ `\_item:x` are used and are re-defined here.
+ If we are in a nested level of items and `\pg+` is used then
+ `\egroups` macro expands to the right number of `\egroup`s
+ to close the page correctly. The level of nested item lists
+ is saved to the `\_ilevel` register and used when we start again
+ the next text after `\pg+`.
+ \_cod -----------------------------
+
+\_newcount\_gilevel
+\_def\*{*}
+\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi}
+\_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em}
+\_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em}
+\_style X
+\_def\_egroups{\_par\_global\_gilevel=\_ilevel \_egroup}
+\_everylist={\_novspaces \_ifcase\_ilevel \_or \_style x \_else \_style - \_fi
+ \_addto\_egroups{\_egroup}}
+
+ \_doc -----------------------------
+ The default values of \`\pg`, i.\,e.\ `\pg;`, `\pg+` and `\pg.` are very simple.
+ They are used when `\showslides` is not specified.
+ \_cod -----------------------------
+
+\_def\_pg#1{\_cs{_spg:#1}}
+\_sdef{_spg:;}{\_vfil\_break \_lfnotenumreset}
+\_sdef{_spg:.}{\_endslides}
+\_sdef{_spg:+}{\_par}
+
+ \_doc -----------------------------
+ The \`\_endslides` is defined as `\_end` primitive, but
+ slide-designer can redefine it. For example,
+ \ulink[http://petr.olsak.net/optex/optex-tricks.html\#slider]{OpTeX trick 0029}
+ shows how to define clickable navigation to the pages and how to check
+ the data integrity at the end of the document using `\_endslides`.
+
+ The `\bye` macro is redefined here as an alternative to `\pg.`.
+ \_cod -----------------------------
+
+\_def\_endslides{\_end}
+\_def\bye{\_pg.}
+
+ \_doc -----------------------------
+ We need no numbers and no table of contents when using slides.
+ The \^`\_printsec` macro is redefined in order the title is centered
+ and typeset in `\Blue`.
+ \_cod -----------------------------
+
+\_def\_titfont{\_typosize[42/60]\_bf \Blue}
+\_def\_subtitfont{\_typosize[20/30]\_bf}
+\_def\_secfont{\_typosize[25/30]\_bf \Blue}
+
+\_nonum \_notoc \_let\_resetnonumnotoc=\_relax
+\_def\_printsec#1{\_par
+ \_abovetitle{\_penalty-400}\_bigskip
+ {\_secfont \_noindent \_leftskip=0pt plus1fill \_rightskip=\_leftskip
+ \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}%
+ \_nobreak \_belowtitle{\_medskip}%
+}
+
+ \_doc -----------------------------
+ When \`\slideshow` is active then each page is opened
+ by `\setbox\_slidepage=\vbox\bgroup` (roughly speaking)
+ and closed by `\egroup`. The material is
+ `\unvbox`ed and saved for the usage in the next usage if `\pg+` is in process.
+ The \`\_slidelayer` is incremented instead `\pageno` if `\pg+`.
+ This counter is equal to `\count1`, so it is printed to the terminal and
+ log file next to `\pageno`.
+
+ The code is somewhat more complicated when \^`\layers` is used. Then
+ `<layered-text>` is saved to the \`\_layertext` macro, the material before
+ it is in \`\_slidepage` box and the material after it is in `\_slidepageB`
+ box. The pages are completed in the `\loop` which increments the
+ \`\layernum` register.
+ \_cod -----------------------------
+
+\_newbox\_slidepage \_newbox\_slidepageB
+\_countdef\_slidelayer=1
+
+\_def\_slideshow{\_slidelayer=1 \_slideshowactive
+ \_let\slideopen=\_relax % first wins
+ \_setbox\_slidepage=\_vbox\_bgroup\_bgroup}
+
+\_def\_slideshowactive{%
+ \_sdef{_spg:;}{\_closepage \_global\_slidelayer=1 \_resetpage \_openslide}
+ \_sdef{_spg:.}{\_closepage \_endslides}
+ \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide}
+ \_let\_layers=\_layersactive
+ \_destboxslide % to prevent hyperlink-dests duplication
+}
+\_def\_destboxslide{\_def\_destbox[##1:##2]{\_isequal{##1}{ref}\_iffalse \_destboxori[##1:##2]\_fi}}
+
+\_def\_openslide{\_setbox\_slidepage=\_vbox\_bgroup\_bgroup \_setilevel
+ \_ifvoid\_slidepage \_else \_unvbox\_slidepage \_nointerlineskip\_lastbox \_fi}
+\_def\_setilevel{\_loop \_decr\_gilevel \_ifnum\_gilevel<0 \_else \_begitems \_repeat}
+
+\_def\_closepage{\_egroups \_egroup
+ \_ifnum \_maxlayers=0 \_unvcopy\_slidepage \_vfil\_break
+ \_else \_begingroup \_setwarnslides \_layernum=0
+ \_loop
+ \_ifnum\_layernum<\_maxlayers \_advance\_layernum by1
+ \_printlayers \_vfil\_break
+ \_ifnum\_layernum<\_maxlayers \_incr\_slidelayer \_decr\_pageno \_fi
+ \_repeat
+ \_global\_maxlayers=0
+ \_incr\_layernum \_global\_setbox\_slidepage=\_vbox{\_printlayers}%
+ \_endgroup
+ \_fi}
+\_def\_resetpage{%
+ \_global\_setbox\_slidepage=\_box\_voidbox \_global\_setbox\_slidepageB=\_box\_voidbox
+ \_lfnotenumreset
+}
+\_def\_setwarnslides{%
+ \_def\pg##1{\_opwarning{\_string\pg##1 \_layersenv}\_def\pg####1{}}%
+ \_def\layers##1 {\_opwarning{\_string\layers\_space \_layersenv}\_def\layers####1{}}%
+}
+\_def\_layersenv{cannot be inside \_string\layers...\_string\endlayers, ignored}
+
+\_def\_printlayers{\_unvcopy\_slidepage \_nointerlineskip\_lastbox
+ \_layertext \_endgraf
+ \_ifdim\_prevdepth>-1000pt \_kern-\_prevdepth \_kern\_dp\_strutbox \_fi
+ \_vskip\_parskip
+ \_unvcopy\_slidepageB
+}
+\_let\_destboxori=\_destbox
+
+\_newcount\_layernum \_newcount\_maxlayers
+\_maxlayers=0
+
+\_long\_def\_layersactive #1 #2\endlayers{%
+ \_par\_penalty0\_egroup
+ \_gdef\_layertext{#2}%
+ \_global\_maxlayers=#1
+ \_setbox\_slidepageB=\_vbox\_bgroup
+}
+\_def\_slideopen{\_let\slideshow=\_relax % first wins
+ \_sdef{_spg:;}{\_egroups\_vfil\_break \_lfnotenumreset\_bgroup \_setilevel}
+ \_sdef{_spg:.}{\_egroups\_endslides}
+ \_sdef{_spg:+}{\_egroups\_bgroup \_setilevel}
+ \_bgroup
+}
+
+\_public \subtit \slideshow \slideopen \pg \wideformat \use \pshow \layernum ;
+
+ \_doc -----------------------------
+ Default \`\layers` `<num>` macro (when \^`\slideshow` is not activated) is simple.
+ It prints the `<layered-text>` with `\layernum=<num>+1` because we need the
+ result after last layer is processed.
+ \_cod -----------------------------
+
+\_def\_layers #1 {\_par\_layernum=\_numexpr#1+1\_relax}
+\_let\endlayers=\_relax
+
+\_def\layers{\_layers}
+
+ \_doc -----------------------------
+ We must to redefine \`\fnotenumpages` because the data from `.ref` file
+ are less usable for implementing such a feature: the
+ footnote should be in more layers repeatedly. But we can suppose that
+ each page starts by `\pg;` macro, so we can reset the footnote counter by
+ this macro.
+ \_cod -----------------------------
+
+\_def \_fnotenumpages {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse
+ \_def\_lfnotenumreset{\_global\_lfnotenum=0 }}
+\_let \_lfnotenumreset=\_relax
+\_public \fnotenumpages ;
+
+\_endcode % ----------------------------------------------
+
+The user manual of \OpTeX/ slides are in `op-slides.tex` file.
+
+2021-03-10 \slideopen introduced, bug with colors in \setbox fixed
+2021-03-10 \ifmmode* added to \adef*
+2021-02-15 \_def\_decr removed
+2021-01-16 \layers at empty page raises error: problem fixed
+2020-03-19 slides introduced