% \iffalse meta-comment ------------------------------------------------------- % Copyright (C) 2021 Thomas Lambert % Other contributors to this theme are listed here: % https://gitlab.com/thlamb/beamertheme-trigon/-/graphs/master % % The original template was heavily inspired by Metropolis from Matthias % Vogelgesang. % % License CC-BY-SA 4.0 % This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 % International License (https://creativecommons.org/licenses/by-sa/4.0/) % ------------------------------------------------------------------------- \fi % \iffalse %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerinnerthemetrigon}[2022/05/08 v0.6.6 Trigon inner theme] % % \fi % \CheckSum{0} % \StopEventually{} % \iffalse %<*package> % ------------------------------------------------------------------------- \fi % % \subsection{\themename inner theme} % % A |beamer| inner theme dictates the style of the frame elements traditionally % set in the ``body'' of each slide. These include: % % \begin{itemize} % \item title, part, and section pages; % \item main background elements; % \item itemize, enumerate, and description environments; % \item block environments including theorems and proofs; % \item figures and tables; and % \item footnotes and plain text. % \end{itemize} % % \subsubsection{Package dependencies} % % \begin{macrocode} \RequirePackage{pgfopts} \RequirePackage{tikz} \usetikzlibrary{calc,3d} % \end{macrocode} % % \subsubsection{Definitions} % % We define the command |\biglogo| to specify the logo that needs to be % displayed on the title frame. This command is just a replacement for % |\includegraphics|, so it accepts the same options. % \begin{macrocode} \def\logbig{} \newcommand*\biglogo[2][width=0.28\textwidth]{ \ifx#2\@empty\else \edef\logbig{\includegraphics[#1]{#2}} \fi } % \end{macrocode} % % \subsubsection{Options} % % \begin{macro}{sectionpage} % Controls whereas a slide with the section title should be inserted at the % beginning of the section or not. % \begin{macrocode} \pgfkeys{ /trigon/inner/sectionpage/.cd, .is choice, none/.code=\trigon@disablesectionpage, simple/.code=\trigon@enablesectionpage } % \end{macrocode} % \end{macro} % % \begin{macro}{slidestyle} % Controls the layout that should be used for regular slides. % \begin{macrocode} \def\slidestyle{} \pgfkeys{ /trigon/inner/slidestyle/.cd, .is choice, blank/.code=\def\slidestyle{blank} \setbeamertemplate{background}[\slidestyle], style1/.code=\def\slidestyle{smallcornertriangle} \setbeamertemplate{background}[\slidestyle], cyber/.code=\def\slidestyle{cyberbottom} \setbeamertemplate{background}[\slidestyle] } % \end{macrocode} % \end{macro} % % \begin{macro}{titlestyle} % Controls the layout that should be used for the title page. % \begin{macrocode} \def\titlestyle{} \pgfkeys{ /trigon/inner/titlestyle/.cd, .is choice, plain/.code=\def\titlestyle{bottomtrianglescolor}, style1/.code=\def\titlestyle{titlesmallimage}, style2/.code=\def\titlestyle{titlebigimage} } % \end{macrocode} % \end{macro} % % \begin{macro}{sectionstyle} % Controls the layout that should be used for the title page. % \begin{macrocode} \def\sectionstyle{} \pgfkeys{ /trigon/inner/sectionstyle/.cd, .is choice, plain/.code=\def\sectionstyle{bottomtrianglescolor}, style1/.code=\def\sectionstyle{bigtriangles}, style2/.code=\def\sectionstyle{lefttriangles}, style3/.code=\def\sectionstyle{bottomtrianglesbw} } % \end{macrocode} % \end{macro} % % % \begin{macro}{\trigon@inner@setdefaults} % Sets default values for the inner theme options. % \begin{macrocode} \newcommand{\trigon@inner@setdefaults}{ \pgfkeys{/trigon/inner/.cd, sectionpage=simple, slidestyle=blank, titlestyle=style2, sectionstyle=plain } } % \end{macrocode} % \end{macro} % % \subsubsection{Backgrounds} % % First of all, we define a few commands in order easily create the triangles % used as the main design elements of the theme. All these are defined with % respect to the |\paperwidth| and |\paperheight| of the document, so that it % fits the different aspect ratio possible. % % \begin{macro}{\leftTriangle} % Defines a triangle with the base on the left side (pointing right). % \begin{macrocode} \newcommand{\leftTriangle}[2]{ (#1,#2) -- (0,{#2 + tan(30)*#1} ) -- (0,{#2 - tan(30)*#1} ) -- cycle; } % \end{macrocode} % \end{macro} % % \begin{macro}{\righTriangle} % Defines a triangle with the base on the right side (pointing left). % \begin{macrocode} \newcommand{\rightTriangle}[2]{ (#1,#2) -- (\the\paperwidth,{#2 + tan(30)*(\the\paperwidth-#1)} ) -- (\the\paperwidth,{#2 - tan(30)*(\the\paperwidth-#1)} ) -- cycle; } % \end{macrocode} % \end{macro} % % \begin{macro}{\topTriangle} % Defines a triangle with the base on the bottom side (pointing top). % \begin{macrocode} \newcommand{\topTriangle}[2]{ (#1,#2) -- ({#1 - tan(60)*#2},0) -- ({#1 + tan(60)*#2},0) -- cycle; } % \end{macrocode} % \end{macro} % % \begin{macro}{\leftColorTriangle} % Defines a colored triangle with the base on the left side (pointing right). % \begin{macrocode} \newcommand{\leftColorTriangle}[3]{ \clip(0,0) rectangle(\the\paperwidth,\the\paperheight); \path[fill=#3] \leftTriangle{#1}{#2} } % \end{macrocode} % \end{macro} % % \begin{macro}{\righColorTriangle} % Defines a colored triangle with the base on the right side (pointing left). % \begin{macrocode} \newcommand{\rightColorTriangle}[3]{ \clip(0,0) rectangle(\the\paperwidth,\the\paperheight); \path[fill=#3] \rightTriangle{#1}{#2} } % \end{macrocode} % \end{macro} % % \begin{macro}{\topColorTriangle} % Defines a colored triangle with the base on the bottom side (pointing top). % \begin{macrocode} \newcommand{\topColorTriangle}[3]{ \clip(0,0) rectangle(\the\paperwidth,\the\paperheight); \path[fill=#3] \topTriangle{#1}{#2} } % \end{macrocode} % \end{macro} % % % We then define the different backgrounds choices. % % \begin{macro}{blank} % Blank slide background. % \begin{macrocode} \defbeamertemplate{background}{blank}{} % \end{macrocode} % \end{macro} % % \begin{macro}{smallcornertriangle} % Background with a small triangle in bottom left corner (used for normal % frames when the appropriate option is selected). % \begin{macrocode} \defbeamertemplate{background}{smallcornertriangle}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.62\paperwidth}{0}{tGrey!30!tBg} \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{cyberbottom} % Background with "mesh" effect on the bottom left corner (used for normal % frames when the appropriate option is selected). % \begin{macrocode} \defbeamertemplate{background}{cyberbottom}{ \tikzstyle{cyberVertex}=[scale=1,draw=tGreyBg,circle,fill=tBg] \tikzstyle{cyberVertex2}=[scale=0.5,draw=tGreyBg,circle,fill=tGreyBg] \tikzstyle{cyberEdge} = [draw,color=tGreyBg] \begin{tikzpicture}%[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \foreach \pos/\name in { {(-0.05\paperwidth,0.75\paperheight)/0}, {(0.02\paperwidth,0.53\paperheight)/1}, {(-0.04\paperwidth,0.38\paperheight)/2}, {(0.08\paperwidth,0.40\paperheight)/3}, {(0.052\paperwidth,0.21\paperheight)/5}, {(0.24\paperwidth,0.26\paperheight)/6}, {(-0.08\paperwidth,-0.06\paperheight)/7}, {(0.12\paperwidth,0.07\paperheight)/8}, {(0.2\paperwidth,0.-0.08\paperheight)/9}, {(0.38\paperwidth,0.06\paperheight)/10}, {(0.56\paperwidth,-0.08\paperheight)/11}} \node[cyberVertex] (\name) at \pos {}; \foreach \pos/\name in { {(-0.05\paperwidth,0.75\paperheight)/0}, {(0.02\paperwidth,0.53\paperheight)/1}, {(-0.04\paperwidth,0.38\paperheight)/2}, {(0.08\paperwidth,0.40\paperheight)/3}, {(0.052\paperwidth,0.21\paperheight)/5}, {(0.24\paperwidth,0.26\paperheight)/6}, {(-0.08\paperwidth,-0.06\paperheight)/7}, {(0.12\paperwidth,0.07\paperheight)/8}, {(0.2\paperwidth,0.-0.08\paperheight)/9}, {(0.38\paperwidth,0.06\paperheight)/10}, {(0.56\paperwidth,-0.08\paperheight)/11}} \node[cyberVertex2] (\name_2) at \pos {}; \foreach \source/ \dest in {0/1,1/2,1/3,2/3,2/5,3/5,3/6,5/6,5/7,7/8,5/8,8/6,8/9,6/9,9/10,10/6,10/11} \path[cyberEdge] (\source) -- (\dest); \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{titlebigimage} % Background for title page with a big image in the top left corener. % \begin{macrocode} \defbeamertemplate{background}{titlebigimage}{ \begin{tikzpicture} \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \begin{scope}[blend group=multiply] \clip(0,0) rectangle(\the\paperwidth,\the\paperheight); \path[fill=tTheme]\leftTriangle{0.5\paperwidth}{0}; \topColorTriangle{0.73\paperwidth}{0.70\paperheight}{tGrey!30!tBg}; \ifx\inserttitlegraphic\@empty \leftColorTriangle{0.73\paperwidth}{0.70\paperheight}{tTheme} \else \path[clip]\leftTriangle{0.73\paperwidth}{0.70\paperheight}; \node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,\the\paperheight) {\inserttitlegraphic}; \fi \end{scope} \clip(0,0) rectangle(\the\paperwidth,\the\paperheight); \path[fill=tBg]\rightTriangle{0.45\paperwidth}{\the\paperheight}; \ifx\logbig\@empty \else \node[anchor=north east,inner sep=0mm] at (.96*\the\paperwidth,.96*\the\paperheight) {\logbig}; \fi \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{titlesmallimage} % Background for the titlepage with a small image in the top left corner. % \begin{macrocode} \defbeamertemplate{background}{titlesmallimage}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.58\paperwidth}{0}{tGrey!30!tBg} \ifx\logbig\@empty \else \node[anchor=north east,inner sep=0mm] at (.94*\the\paperwidth,.94*\the\paperheight) {\logbig}; \fi \ifx\inserttitlegraphic\@empty \leftColorTriangle{0.58\paperwidth}{\the\paperheight}{tTheme} \else \path[clip]\leftTriangle{0.58\paperwidth}{\the\paperheight}; \node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,\the\paperheight) {\inserttitlegraphic}; \fi \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{bottomtrianglescolor} % Background for title/section pages with two colored triangles in the bottom. % \begin{macrocode} \defbeamertemplate{background}{bottomtrianglescolor}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.62\paperwidth}{0}{tTheme} \rightColorTriangle{0.38\paperwidth}{0}{tSec} \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{bottomtrianglesbw} % Background for title/section pages with two black and white triangles in the % bottom. % \begin{macrocode} \defbeamertemplate{background}{bottomtrianglesbw}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.62\paperwidth}{0}{tTheme} \rightColorTriangle{0.38\paperwidth}{0}{tGrey!30!tBg} \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{bigtriangles} % Background for section pages with a big triangle on the left. % \begin{macrocode} \defbeamertemplate{background}{bigtriangles}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.80\paperwidth}{0.62\paperheight}{tTheme} \rightColorTriangle{0.68\paperwidth}{0.58\paperheight}{tGrey!30!tBg} \end{tikzpicture} } % \end{macrocode} % \end{macro} % % \begin{macro}{lefttriangles} % Background for section pages with small triangles on the left. % \begin{macrocode} \defbeamertemplate{background}{lefttriangles}{ \begin{tikzpicture}[blend group=multiply] \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); \leftColorTriangle{0.52\paperwidth}{\the\paperheight}{tTheme} \leftColorTriangle{0.775\paperwidth}{0}{tGrey!30!tBg} \end{tikzpicture} } % \end{macrocode} % \end{macro} % % Before anything, the regular frame background is selected. % \begin{macrocode} \setbeamertemplate{background}[\slidestyle] % \end{macrocode} % % Finally, we need to set the backgrounds properly before creating the different % frames, create the special frames (title, section) and restore the regular % background afterwards. % % \begin{macro}{\titleframe} % Sets the titleframe. % \begin{macrocode} \newcommand{\titleframe}{ \setbeamertemplate{title page}[\titlestyle] \setbeamertemplate{background}[\titlestyle] \frame[plain,noframenumbering]{\titlepage} \setbeamertemplate{background}[\slidestyle] } % \end{macrocode} % \end{macro} % % \begin{macro}{\sectionframe} % Sets the titleframe. % \begin{macrocode} \newcommand{\sectionframe}{ \setbeamertemplate{section page}[\sectionstyle] \setbeamertemplate{background}[\sectionstyle] \frame[plain,noframenumbering]{\sectionpage} \setbeamertemplate{background}[\slidestyle] } \newcommand{\trigon@disablesectionpage}{ \AtBeginSection{ % intentionally empty } } \newcommand{\trigon@enablesectionpage}{ \AtBeginSection{ \sectionframe } } % \end{macrocode} % \end{macro} % % % \subsubsection{Layout} % The following macros define the proper position of the various elements of the % frame, so the fit nicely with the different background selected. % % \begin{macro}{titlebigimage} % Place the text on the title frame with a big image on the top left side. % \begin{macrocode} \defbeamertemplate{title page}{titlebigimage} { \vskip135pt \begin{flushright} \begin{minipage}[t][][c]{0.5\textwidth}% \centering \usebeamerfont{title}\usebeamercolor[fg]{title} \inserttitle\par \end{minipage} \ifx \insertsubtitle\@empty \else \vskip15pt \begin{minipage}[t][][c]{0.5\textwidth}% \centering \usebeamerfont{subtitle}\insertsubtitle\par% \end{minipage} \fi \vskip13pt \begin{minipage}[t][][c]{0.5\textwidth}% \centering \usebeamerfont{author}\insertauthor% \vskip5pt \usebeamerfont{date}\insertdate% \end{minipage} \end{flushright} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{titlesmallimage} % Place the text on the title frame with a small image on the top left side. % \begin{macrocode} \defbeamertemplate{title page}{titlesmallimage} { \vskip140pt% \begin{beamercolorbox}[wd=\textwidth,sep=4pt]{title page header} \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par% \end{beamercolorbox}% \ifx \insertsubtitle\@empty \else \vskip8pt \begin{beamercolorbox}[wd=\textwidth,sep=4pt]{subtitle page header} \usebeamerfont{subtitle}\insertsubtitle\par% \end{beamercolorbox}% \fi \vskip10pt \begin{beamercolorbox}[wd=\textwidth,sep=4pt]{author} \usebeamerfont{author}\insertauthor% \end{beamercolorbox} \vskip2pt% \begin{beamercolorbox}[wd=\textwidth,sep=4pt]{date} \usebeamerfont{date}\insertdate% \end{beamercolorbox} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{bottomtrianglescolor} % Place the text on the title frame with two triangles on the bottom. % \begin{macrocode} \defbeamertemplate{title page}{bottomtrianglescolor} { \vskip0pt \begin{center} \begin{minipage}[t][][t]{\textwidth} \centering% \ifx\logbig\@empty \else \logbig \fi \end{minipage} \vskip15pt \begin{minipage}[t][][c]{\textwidth}% \centering \usebeamerfont{title}\usebeamercolor[fg]{title} \inserttitle\par \end{minipage} \ifx \insertsubtitle\@empty \else \vskip15pt \begin{minipage}[t][][c]{\textwidth}% \centering \usebeamerfont{subtitle}\insertsubtitle\par% \end{minipage} \fi \vskip20pt \begin{minipage}[t][][c]{0.5\textwidth}% \centering \usebeamerfont{author}\insertauthor\\[0.3cm]% \usebeamerfont{date}\insertdate \end{minipage} \end{center} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{bottomtrianglescolor} % Place the text on the section frame with two colored triangles on the % bottom. % \begin{macrocode} \defbeamertemplate{section page}{bottomtrianglescolor} { \vskip40pt \begin{center} \begin{minipage}[t][][c]{\textwidth}% \centering \usebeamerfont{section title}\usebeamercolor[fg]{title} \insertsectionhead\par \end{minipage} \end{center} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{bottomtrianglesbw} % Place the text on the section frame with two black and white triangles on % the bottom. % \begin{macrocode} \defbeamertemplate{section page}{bottomtrianglesbw} { \vskip40pt \begin{center} \begin{minipage}[t][][c]{\textwidth}% \centering \usebeamerfont{section title}\usebeamercolor[fg]{title} \insertsectionhead\par \end{minipage} \end{center} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{bigtriangles} % Place the text on the section frame with two big triangles. % \begin{macrocode} \defbeamertemplate{section page}{bigtriangles} { \vskip200pt \begin{flushright} \begin{minipage}[t]{0.62\textwidth}%7 \usebeamerfont{section title}\usebeamercolor[fg]{title} \raggedleft \insertsectionhead\par \end{minipage} \end{flushright} \vfill } % \end{macrocode} % \end{macro} % % \begin{macro}{lefttriangles} % Place the text on the section frame with two small left triangles. % \begin{macrocode} \defbeamertemplate{section page}{lefttriangles} { \vskip25pt \begin{beamercolorbox}[wd=\textwidth,leftskip=100pt,sep=4pt]{section page header} \usebeamerfont{section title}\usebeamercolor[fg]{title} \insertsectionhead\par \end{beamercolorbox}% \vfill } % \end{macrocode} % \end{macro} % % \subsubsection{Block environments} % % \begin{macro}{block} % \begin{macro}{block alerted} % \begin{macro}{block example} % % The three different block environments differ only in their colours. % Rather than repeat the essentially the same template three times, we use % the auxiliary macro |\trigon@block| to define all three templates. % % \begin{macrocode} \newlength{\trigon@blocksep} \newlength{\trigon@blockadjust} \setlength{\trigon@blocksep}{0.75ex} \setlength{\trigon@blockadjust}{0.25ex} \providecommand{\trigon@strut}{% \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz()}% } \newcommand{\trigon@block}[1]{ \par\vskip\medskipamount% \setlength{\parskip}{0pt} % \end{macrocode} % % If a background color is defined for the block title or body, we need to % add a little bit of padding to the corresponding box. Ideally, this would % be accomplished by setting |colsep=0.75ex|, which is intended to add % ``color separation space'' only when the box has a colored background. % Unfortunately, |colsep| also adds this separation if the background color % is inherited, even if the inherited color is actually empty. % (The technical reason for this boils down to the fact that the |\ifx| % directive does not expand macros.) % % To achieve the correct spacing for |alertblock|s and |exampleblock|s % as well as for normal blocks, we have to begin the |beamercolorbox| % differently based on whether |block title| has an empty background. % % If the |block title| background is empty, or the user has explicitly % removed the background from (e.g.) |block title alerted|, we just need to % set a rightskip for a nice ragged-right block title. % % \begin{macrocode} \ifbeamercolorempty[bg]{block title#1}{% \begin{beamercolorbox}[rightskip=0pt plus 4em]{block title#1}}{% \ifbeamercolorempty[bg]{block title}{% \begin{beamercolorbox}[rightskip=0pt plus 4em]{block title#1}% }% % \end{macrocode} % % Otherwise, if the |block title| has a background, we set the padding based % on |\trigon@blockskip|. However, we have to visually compensate for % the |\trigon@strut| added to the block title (see below) by % subtracting |\trigon@blockadjust| from the top and bottom padding. % % \begin{macrocode} {% \begin{beamercolorbox}[ sep=\dimexpr\trigon@blocksep-\trigon@blockadjust\relax, leftskip=\trigon@blockadjust, rightskip=\dimexpr\trigon@blockadjust plus 4em\relax ]{block title#1}% }}% % \end{macrocode} % % We can now set the contents of the |block title|. The zero-width but % positive-height box |\trigon@strut| ensures that the block title box % has a consistent height, even if it lacks punctuation, ascenders, or % descenders. % % \begin{macrocode} \usebeamerfont*{block title#1}% \trigon@strut% \insertblocktitle% \trigon@strut% \end{beamercolorbox}% % \end{macrocode} % % Next, we typeset the |block body|. This the code is similar to, but simpler % than, the |block title| code since we don't need to adjust for any struts. % % \begin{macrocode} \nointerlineskip% \ifbeamercolorempty[bg]{block body#1}{% \begin{beamercolorbox}[vmode]{block body#1}}{ \ifbeamercolorempty[bg]{block body}{% \begin{beamercolorbox}[vmode]{block body#1}% }{% \begin{beamercolorbox}[sep=\trigon@blocksep, vmode]{block body#1}% \vspace{-\trigon@parskip} }}% \usebeamerfont{block body#1}% \setlength{\parskip}{\trigon@parskip}% } % \end{macrocode} % % This concludes the auxiliary macro |\trigon@block|. Finally, % we define the block beamer templates using this macro. % % \begin{macrocode} \setbeamertemplate{block begin}{\trigon@block{}} \setbeamertemplate{block alerted begin}{\trigon@block{ alerted}} \setbeamertemplate{block example begin}{\trigon@block{ example}} \setbeamertemplate{block end}{\end{beamercolorbox}\vspace*{0.2ex}} \setbeamertemplate{block alerted end}{\end{beamercolorbox}\vspace*{0.2ex}} \setbeamertemplate{block example end}{\end{beamercolorbox}\vspace*{0.2ex}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Lists and floats} % % \begin{macrocode} \setbeamertemplate{caption label separator}{: } \setbeamertemplate{caption}[numbered] % \end{macrocode} % % \subsubsection{Text and spacing settings} % % \begin{macrocode} \newlength{\trigon@parskip} \setlength{\trigon@parskip}{0.5em} \setlength{\parskip}{\trigon@parskip} \linespread{1.15} % \end{macrocode} % % \subsubsection{Margins} % % The margins are defined as % \begin{macrocode} \setbeamersize{text margin left=.05\paperwidth, text margin right=.05\paperwidth} % \end{macrocode} % % \subsubsection{Process package options} % % \begin{macrocode} \trigon@inner@setdefaults \ProcessPgfPackageOptions{/trigon/inner} % \end{macrocode} % % \iffalse % % \fi % \Finale \endinput