From 2fd07558ccd8d3c8e354f8ea0b342ef7ac1e87a3 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 20 Jan 2024 03:01:12 +0000 Subject: CTAN sync 202401200301 --- .../themes/beamerthemeconcrete/README.md | 90 ++ .../bernoulli/beamerthemebernoulli.sty | 605 +++++++++++++ .../bernoulli/demo-bernoulli.pdf | Bin 0 -> 128620 bytes .../bernoulli/demo-bernoulli.tex | 176 ++++ .../dirichlet/beamerthemedirichlet.sty | 402 +++++++++ .../dirichlet/demo-dirichlet.pdf | Bin 0 -> 200517 bytes .../dirichlet/demo-dirichlet.tex | 171 ++++ .../fermat/beamerthemefermat.sty | 433 ++++++++++ .../beamerthemeconcrete/fermat/demo-fermat.pdf | Bin 0 -> 152297 bytes .../beamerthemeconcrete/fermat/demo-fermat.tex | 171 ++++ .../beamerthemeconcrete/gauss/beamerthemegauss.sty | 678 +++++++++++++++ .../beamerthemeconcrete/gauss/demo-gauss.pdf | Bin 0 -> 131046 bytes .../beamerthemeconcrete/gauss/demo-gauss.tex | 175 ++++ .../lagrange/beamerthemelagrange.sty | 379 +++++++++ .../beamerthemeconcrete/lagrange/demo-lagrange.pdf | Bin 0 -> 22042 bytes .../beamerthemeconcrete/lagrange/demo-lagrange.tex | 71 ++ .../mobius/beamerthememobius.sty | 291 +++++++ .../beamerthemeconcrete/mobius/demo-mobius.pdf | Bin 0 -> 153655 bytes .../beamerthemeconcrete/mobius/demo-mobius.tex | 171 ++++ .../riemann/beamerthemeriemann.sty | 945 +++++++++++++++++++++ .../beamerthemeconcrete/riemann/demo-riemann.pdf | Bin 0 -> 98512 bytes .../beamerthemeconcrete/riemann/demo-riemann.tex | 178 ++++ macros/latex/contrib/csvsimple/CHANGES.md | 32 + macros/latex/contrib/csvsimple/README.md | 4 +- macros/latex/contrib/csvsimple/csvsimple-doc.sty | 10 +- .../latex/contrib/csvsimple/csvsimple-example.pdf | Bin 72044 -> 72044 bytes .../latex/contrib/csvsimple/csvsimple-example.tex | 4 +- macros/latex/contrib/csvsimple/csvsimple-l3.pdf | Bin 933300 -> 937516 bytes macros/latex/contrib/csvsimple/csvsimple-l3.sty | 296 ++++--- macros/latex/contrib/csvsimple/csvsimple-l3.tex | 459 +++++----- .../latex/contrib/csvsimple/csvsimple-legacy.pdf | Bin 690985 -> 690987 bytes .../latex/contrib/csvsimple/csvsimple-legacy.sty | 6 +- .../latex/contrib/csvsimple/csvsimple-legacy.tex | 4 +- macros/latex/contrib/csvsimple/csvsimple.pdf | Bin 295804 -> 295559 bytes macros/latex/contrib/csvsimple/csvsimple.sty | 17 +- macros/latex/contrib/csvsimple/csvsimple.tex | 4 +- macros/latex/contrib/easybook/easybook.dtx | 21 +- macros/latex/contrib/easybook/easybook.pdf | Bin 599049 -> 599111 bytes macros/latex/contrib/easybook/easybook.tex | 7 +- macros/latex/contrib/metalogox/README.txt | 4 +- macros/latex/contrib/metalogox/metalogox.dtx | 117 ++- macros/latex/contrib/metalogox/metalogox.pdf | Bin 385859 -> 400460 bytes macros/latex/contrib/tagpdf/README.md | 4 +- macros/latex/contrib/tagpdf/ex-AF-file.pdf | 56 +- macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf | Bin 34295 -> 34295 bytes macros/latex/contrib/tagpdf/ex-attribute.pdf | 14 +- macros/latex/contrib/tagpdf/ex-formula-problem.pdf | 14 +- macros/latex/contrib/tagpdf/ex-list.pdf | 14 +- .../tagpdf/ex-mc-manual-para-split-obsolete.pdf | 14 +- macros/latex/contrib/tagpdf/ex-softhyphen.pdf | 14 +- .../contrib/tagpdf/ex-spaceglyph-listings.pdf | 14 +- .../latex/contrib/tagpdf/ex-structure-obsolete.pdf | 14 +- macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf | 50 +- macros/latex/contrib/tagpdf/tagpdf-backend.dtx | 17 +- macros/latex/contrib/tagpdf/tagpdf-checks.dtx | 26 +- macros/latex/contrib/tagpdf/tagpdf-code.pdf | Bin 1646817 -> 1660867 bytes macros/latex/contrib/tagpdf/tagpdf-data.dtx | 21 +- macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx | 8 +- macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx | 8 +- macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx | 6 +- macros/latex/contrib/tagpdf/tagpdf-roles.dtx | 6 +- macros/latex/contrib/tagpdf/tagpdf-space.dtx | 6 +- macros/latex/contrib/tagpdf/tagpdf-struct.dtx | 70 +- macros/latex/contrib/tagpdf/tagpdf-tree.dtx | 6 +- macros/latex/contrib/tagpdf/tagpdf-user.dtx | 117 ++- macros/latex/contrib/tagpdf/tagpdf.dtx | 8 +- macros/latex/contrib/tagpdf/tagpdf.ins | 4 +- macros/latex/contrib/tagpdf/tagpdf.pdf | Bin 1085167 -> 1085218 bytes macros/latex/contrib/tagpdf/tagpdf.tex | 60 +- macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty | 2 +- 70 files changed, 5866 insertions(+), 628 deletions(-) create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/README.md create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/beamerthemebernoulli.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/beamerthemedirichlet.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/beamerthemefermat.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/beamerthemegauss.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/beamerthemelagrange.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/beamerthememobius.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/beamerthemeriemann.sty create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.tex (limited to 'macros/latex') diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/README.md b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/README.md new file mode 100644 index 0000000000..816f6206b3 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/README.md @@ -0,0 +1,90 @@ +# The `concrete` bundle: A collection of flat beamer themes for LaTeX presentations + +``` +Author: Jianrui Lyu +Website: https://github.com/lvjr/concrete +License: The LaTeX Project Public License 1.3c +``` + +## 1\. Introduction + +The `concrete` bundle provides a collection of flat beamer themes for making LaTeX presentations, especially for academic and scientific presentations. + +It consists of the following seven beamer themes: + +- light background themes + - beamer theme bernoulli + - beamer theme fermat + - beamer theme lagrange + - beamer theme riemann +- dark background themes + - beamer theme dirichlet + - beamer theme gauss + - beamer theme mobius + +## 2\. Usage + +After installing this bundle, you can write a document like this: + +``` +\documentclass[xcolor={rgb}]{beamer} +\usetheme{bernoulli} +\begin{document} + +\title{Beamer Theme Bernoulli} +\subtitle{A nice theme for LaTeX presentations} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} +``` + +Note that you **NEED** to add `xcolor={rgb}` option in loading `beamer` class. You can also have a look at the demo files included in this bundle. diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/beamerthemebernoulli.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/beamerthemebernoulli.sty new file mode 100644 index 0000000000..2bb3d431d8 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/beamerthemebernoulli.sty @@ -0,0 +1,605 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemebernoulli}[2024-01-19 v2024A Beamer Theme Bernoulli] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,etoolbox,adjustbox} +\usetikzlibrary{positioning} + +\mode + +\setbeamersize{text margin left=8mm,text margin right=8mm} + +%% ----------------- background canvas and background ---------------- + +\defbeamertemplate{background}{line}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[xstep=\paperwidth,ystep=1mm,color=tcolor] (0,0) grid (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +\defbeamertemplate{background}{linear}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[pattern=horizontal lines, pattern color=tcolor] + (0,0) rectangle (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +\defbeamertemplate{background}{lattice}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[step=1mm,color=tcolor] (0,0) grid (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +% need "text badly ragged" option for correct space skips +% see http://tex.stackexchange.com/a/132748/8956 +\gdef\my@background@title{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \fill[fill=fcolor] + (0,0) rectangle (\paperwidth,\paperheight); + \node[above right,text width=0.76\paperwidth,text badly ragged,fill=white, + inner sep=0.02\paperwidth,minimum height=0.2\paperheight] + (one) at (0.1\paperwidth,0.5\paperheight) {% + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle\\ + \fi + }; + \node[below right,text width=0.76\paperwidth,text badly ragged, + inner sep=0.02\paperwidth,minimum height=0.2\paperheight] + (two) at (0.1\paperwidth,0.5\paperheight) {% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\% + \ifx\insertinstitute\@empty\else + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute\\% + \fi + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate\\% + }; + \fill[fcolor!70!white] + (one.north west) -- ++(-0.1\paperwidth,0.1\paperwidth) node[coordinate](nw){} + -- +(\paperwidth,0) node[coordinate](ne){} -- (one.north east) -- cycle; + \fill[fcolor!50!scolor] + (two.south west) -- ++(-0.1\paperwidth,-0.1\paperwidth) node[coordinate](sw){} + -- +(\paperwidth,0) node[coordinate](se){} -- (two.south east) -- cycle; + \fill[fcolor!70!scolor] + (one.north west) -- (two.south west) -- (sw) -- (nw) -- cycle + (one.north east) -- (two.south east) -- (se) -- (ne) -- cycle; + \draw[thick,densely dashed,dcolor] + (one.north west) -- (one.south west) -- (one.south east) -- (one.north east) -- cycle + (two.north west) -- (two.south west) -- (two.south east) -- (two.north east); + \draw[thick,dcolor] + (one.north west) -- (nw) -- (ne) -- (one.north east) + (two.south west) -- (sw) -- (se) -- (two.south east); + \draw[very thick,dcolor] (sw) -- (nw) (se) -- (ne); + \end{tikzpicture} +} + +\newcommand{\maincontents}{Main Contents} + +\gdef\my@background@section{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \node[right,text width=0.76\paperwidth,text badly ragged,inner xsep=0.02\paperwidth, + inner ysep=0.04\paperwidth,minimum height=0.2\paperheight] + (main) at (0.1\paperwidth,0.5\paperheight) {% + \begin{minipage}{0.76\paperwidth} + \usebeamertemplate{section page content}% + \end{minipage}% + }; + \path (main.north west) +(-0.1\paperwidth,0) + node[above right,minimum width=\paperwidth,minimum height=0.1\paperheight, + text width=0.76\paperwidth,inner xsep=0.12\paperwidth, + text badly ragged,fill=fcolor,text=dcolor] (top) + {\usebeamerfont{section in toc}\maincontents}; + \path (main.south west) +(-0.1\paperwidth,0) + node[below right,minimum width=\paperwidth,minimum height=0.1\paperheight, + fill=fcolor!50!scolor] (bot) {}; + \draw (top.north west) -- (top.north east) + (top.south west) -- (top.south east); + \draw (bot.north west) -- (bot.north east) + (bot.south west) -- (bot.south east); + \end{tikzpicture} +} + +\gdef\my@background@subsection{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \node[right,text width=0.76\paperwidth,text badly ragged,inner xsep=0.02\paperwidth, + inner ysep=0.04\paperwidth,minimum height=0.2\paperheight] + (main) at (0.1\paperwidth,0.5\paperheight) {% + \begin{minipage}{0.76\paperwidth} + \usebeamertemplate{subsection page content}% + \end{minipage} + }; + \path (main.north west) +(-0.1\paperwidth,0) + node[above right,minimum width=\paperwidth,minimum height=0.08\paperheight, + text width=0.76\paperwidth,inner xsep=0.12\paperwidth, + text badly ragged,fill=fcolor,text=dcolor] (top) + {\usebeamerfont{subsection in toc}\maincontents}; + \path (main.south west) +(-0.1\paperwidth,0) + node[below right,minimum width=\paperwidth,minimum height=0.08\paperheight, + fill=fcolor!50!scolor] (bot) {}; + \draw (top.north west) -- (top.north east) + (top.south west) -- (top.south east); + \draw (bot.north west) -- (bot.north east) + (bot.south west) -- (bot.south east); + \end{tikzpicture} +} + +%% -------------------------- title page ----------------------------- + +\defbeamertemplate{title page}{snake} +{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@title + \end{adjustbox}% +} + +%% ----------------------- section and subsection -------------------- + +\def\sectionintocskip{0.5em} +\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip\sectionintocskip}{}{} + +% create new template for section +\defbeamertemplate{section}{simple}{% + \insertsectionnumber.\hspace*{1ex}\insertsection% +} + +\defbeamertemplate{at begin section}{normal}{% + \frame{\sectionpage} +} +\defbeamertemplate{at begin section}{plain}{% + \frame[plain]{\sectionpage} +} +\AtBeginSection[]{\usebeamertemplate{at begin section}} + +\defbeamertemplate{section page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@section + \end{adjustbox}% +} + +\defbeamertemplate{section page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{section title}% + \usebeamerfont{section title} + \usebeamertemplate{section}% + \end{beamercolorbox} +} +\defbeamertemplate{section page content}{level}{ + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide]% +} + +% create new template for subsection +\defbeamertemplate{subsection}{simple}{% + \insertsectionnumber.\insertsubsectionnumber\hspace*{2ex}\insertsubsection% +} + +\defbeamertemplate{at begin subsection}{normal}{% + \frame{\subsectionpage} +} +\defbeamertemplate{at begin subsection}{plain}{% + \frame[plain]{\subsectionpage} +} +\AtBeginSubsection[]{\usebeamertemplate{at begin subsection}} + +\defbeamertemplate{subsection page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@subsection + \end{adjustbox}% +} + +\defbeamertemplate{subsection page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{subsection title}% + \usebeamerfont{subsection title}% + \usebeamertemplate{subsection}% + \end{beamercolorbox}% +} +\defbeamertemplate{subsection page content}{level}{% + \tableofcontents[sectionstyle=hide,subsectionstyle=show/shaded/hide]% +} +\defbeamertemplate{subsection in toc}{triangle}{% + \leavevmode\leftskip=2.5em\scriptsize\raise1.25pt% + \rlap{\hskip-1.5em\donotcoloroutermaths$\blacktriangleright$}% + \normalsize\inserttocsubsection\par +} + +%% ---------------------- headline and footline ---------------------- + +\defbeamertemplate{footline left}{author}{% + \insertshortauthor +} + +\defbeamertemplate{footline center}{title}{% + \insertshorttitle +} + +\defbeamertemplate{footline right}{number}{% + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber}% +} +\defbeamertemplate{footline right}{normal}{% + \hyperlinkframeendprev{$\vartriangle$} + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber} + \hyperlinkframestartnext{$\triangledown$}% +} + +\defbeamertemplate{footline}{simple}{% + \hbox{% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,left]{footline}% + \usebeamerfont{footline}\kern\beamer@leftmargin + \usebeamertemplate{footline left}% + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.6\paperwidth,ht=2.25ex,dp=1ex,center]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline center}% + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,right]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline right}% + \kern\beamer@rightmargin + \end{beamercolorbox}% + }% +} + +\defbeamertemplate{footline}{sectioning}{% + % default height is 0.4pt, which is ignored by adobe reader, so we increase it by 0.2pt + {\usebeamercolor[fg]{separator line}\hrule height 0.6pt}% + \hbox{% + \begin{beamercolorbox}[wd=.8\paperwidth,ht=2.25ex,dp=1ex,left]{footline}% + \usebeamerfont{footline}\kern\beamer@leftmargin\insertshorttitle + \ifx\insertsection\@empty\else\qquad$\vartriangleright$\qquad\insertsection\fi + \ifx\insertsubsection\@empty\else\qquad$\vartriangleright$\qquad\insertsubsection\fi + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,right]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline right}% + \kern\beamer@rightmargin + \end{beamercolorbox}% + }% +} + +% customize mini frames template to get both a progress and navigation bar + +\newcommand{\my@bigsize}{9} +\newcommand{\my@medsize}{7} +\newcommand{\my@smallsize}{5} +\let\my@box@size=\my@bigsize + +\newlength{\my@tempsize} + +\newcounter{my@sectnum} + +\newcommand{\my@lastdigit}[1]{% + \loop\ifnum\value{#1}>9\addtocounter{#1}{-10}\repeat + \arabic{#1}% +} + +\newcommand\my@fixedbox[2]{% + \makebox[#1]{\rule[-1ex]{0pt}{3.25ex}#2}% +} + +\newcommand\my@colorbox[3]{% + {\setlength{\fboxsep}{0pt}\colorbox{#1}{\my@fixedbox{#2}{#3}}}% +} + +\newcommand{\my@navbox}[1][]{% + % see http://tex.stackexchange.com/a/53091/8956 + \if\relax\detokenize{#1}\relax + \def\my@tempbox{\my@fixedbox}% + \else + \def\my@tempbox{\my@colorbox{#1}}% + \fi + \ifx\my@box\my@bigbox + \def\my@temptext{\my@lastdigit{my@sectnum}}% + \fi + \ifx\my@box\my@medbox + \def\my@temptext{$\diamond$}% + \fi + \ifx\my@box\my@smallbox + \def\my@temptext{$-$}% + \fi + \my@tempbox{\my@tempsize}{\my@temptext}% +} + +\defbeamertemplate{navigation box}{home}{% + \setlength{\my@tempsize}{\my@box@size pt}% + \my@colorbox{filler2}{\my@tempsize}{$\equiv$}% +} + +\defbeamertemplate{navigation box}{done}{% + \setlength{\my@tempsize}{\my@box@size pt}% + \my@navbox[filler2]% +} + +\defbeamertemplate{navigation box}{todo}{% + \setlength{\my@tempsize}{\my@box@size pt}% + \my@navbox +} + +\newcommand{\my@bigbox}{\global\let\my@box@size=\my@bigsize\usebeamertemplate{navigation box}} +\newcommand{\my@medbox}{\global\let\my@box@size=\my@medsize\usebeamertemplate{navigation box}} +\newcommand{\my@smallbox}{\global\let\my@box@size=\my@smallsize\usebeamertemplate{navigation box}} +\let\my@medbox@orig=\my@medbox +\let\my@smallbox@orig=\my@smallbox +\let\my@box=\my@bigbox + +\newcounter{my@subsectionnumber} +\newcounter{my@normalframenumber} + +\AtBeginDocument{% + \pretocmd{\subsection}{\refstepcounter{my@subsectionnumber}}{}{}% + \patchcmd{\beamer@writeslidentry}{\addtocontents}{\stepcounter{my@normalframenumber}\addtocontents}{}{}% +} + +\AtEndDocument{% + \immediate\write\@auxout{% + \noexpand\gdef\noexpand\my@totalsectionnumber{\the\c@section}% + \noexpand\gdef\noexpand\my@totalsubsectionnumber{\the\c@my@subsectionnumber}% + \noexpand\gdef\noexpand\my@normalframenumber{\the\c@my@normalframenumber}% + }% +} + +\def\my@totalsectionnumber{0} +\def\my@totalsubsectionnumber{0} +\def\my@normalframenumber{50} % use it instead of \inserttotalframenumber + +\newlength{\my@progress@width} +\setlength{\my@progress@width}{\dimexpr0.8\paperwidth-\beamer@leftmargin\relax} + +\newlength{\my@slidebox@width} + +\def\my@scale@subsection{1} +\def\my@scale@slide{1} + +\newcommand{\my@adjustbox}{% + \ifnum\my@normalframenumber>80\relax + \gdef\my@scale@subsection{0.7}% + \else + \ifnum\my@normalframenumber>45\relax + \gdef\my@scale@subsection{0.9}% + \fi\fi + \pgfmathsetlength{\global\my@slidebox@width}{% + (\my@progress@width - 2pt - 1pt*\my@bigsize*(\my@totalsectionnumber+1)% + - 1pt*\my@medsize*\my@scale@subsection*\my@totalsubsectionnumber) / % + max(1,\my@normalframenumber-\my@totalsectionnumber-\my@totalsubsectionnumber-1)% + }% + \pgfmathsetlength{\global\my@slidebox@width}{% + min(\my@slidebox@width,1pt*\my@smallsize)% + }% + \gdef\my@scale@slide{\strip@pt\dimexpr + \my@slidebox@width/\my@smallsize + \relax}% + \gdef\my@medbox{\scalebox{\my@scale@subsection}[1]{\my@medbox@orig}}% + \gdef\my@smallbox{\scalebox{\my@scale@slide}[1]{\my@smallbox@orig}}% + % only adjust boxes once + \global\let\my@adjustbox=\relax +} + +\renewcommand{\sectionentry}[5]{\global\let\my@box=\my@bigbox\setcounter{my@sectnum}{#1}} + +\pretocmd{\beamer@setuplinks}{\renewcommand{\beamer@subsectionentry}[5]{}}{}{} +\apptocmd{\beamer@setuplinks}{\global\let\beamer@subsectionentry\mybeamer@subsectionentry}{}{} + +\newcommand{\mybeamer@subsectionentry}[5]{\global\let\my@box=\my@medbox} + +\renewcommand{\slideentry}[6]{% + \def\my@temp@i{1/1}% + \def\my@temp@ii{#4}% + \ifx\my@temp@i\my@temp@ii % title page + \setbeamertemplate{navigation box}[home]% + \else + \setbeamertemplate{navigation box}[done]% + \fi + \ifnum\c@section<#1% + \setbeamertemplate{navigation box}[todo]% + \else + \ifnum\c@section=#1\ifnum\c@subsection<#2% + \setbeamertemplate{navigation box}[todo]% + \else + \ifnum\c@subsection=#2\ifnum\c@subsectionslide<#3% + \setbeamertemplate{navigation box}[todo]% + \fi\fi + \fi\fi + \fi + \ifx\my@temp@i\my@temp@ii % title page + \beamer@link(#4){\my@bigbox}% + \else + \beamer@link(#4){\my@box}% + \fi + \global\let\my@box=\my@smallbox +} + +\defbeamertemplate{footline}{progress}{% + % default height is 0.4pt, which is ignored by adobe reader, so we increase it by 0.2pt + {\usebeamercolor[fg]{separator line}\hrule height 0.6pt}% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline}% + \usebeamerfont{footline}% + \kern\beamer@leftmargin + \my@adjustbox\dohead% + \hfill\usebeamertemplate{footline right}% + \kern\beamer@rightmargin + \end{beamercolorbox}% +} + +%% ------------------------- frame title ----------------------------- + +\newcommand{\insertframetitlemark}{} + +\defbeamertemplate{frametitle}{simple}[1][] +{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin,#1]{frametitle} + \usebeamerfont{frametitle}% + \rule[-3.6mm]{0pt}{12mm}\insertframetitle + \ifx\insertframetitlemark\@empty\else\hfill + {\usebeamercolor{normal text}\color{fg!30!bg}\insertframetitlemark}% + \fi + \rule[-3.6mm]{0pt}{12mm}\par + \end{beamercolorbox} +} + +%% ------------------- block and theorem ----------------------------- + +\defbeamertemplate{theorem begin}{simple} +{% + \upshape%\bfseries\inserttheoremheadfont + {\usebeamercolor[fg]{theoremname}% + \inserttheoremname\inserttheoremnumber + \ifx\inserttheoremaddition\@empty\else\ (\inserttheoremaddition)\fi% + %\inserttheorempunctuation + }% + \quad\normalfont +} +\defbeamertemplate{theorem end}{simple}{\par} + +\defbeamertemplate{proof begin}{simple} +{% + %\bfseries + {\usebeamercolor[fg]{proofname}\insertproofname}% + \quad\normalfont +} +\defbeamertemplate{proof end}{simple}{\par} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\normalsize} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\normalsize} +\setbeamerfont{section in toc}{size=\large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%\setlength{\parskip}{5pt plus 1pt minus 1pt} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red99}{Hsb}{0,0.9,0.9} +\definecolor{yellow86}{Hsb}{60,0.8,0.6} +\definecolor{cyan19}{Hsb}{180,0.1,0.9} +\definecolor{cyan95}{Hsb}{189,0.88,0.49} +\definecolor{blue77}{Hsb}{240,0.7,0.7} +\definecolor{blue99}{Hsb}{240,0.9,0.9} +\definecolor{magenta88}{Hsb}{300,0.8,0.8} + +\colorlet{text1}{black} +\colorlet{back1}{white} +\colorlet{accent1}{cyan95} +\colorlet{accent2}{blue99} +\colorlet{accent3}{red99} +\colorlet{accent4}{yellow86} +\colorlet{accent5}{magenta88} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{filler4}{accent4!40!back1} +\colorlet{filler5}{accent5!40!back1} +\colorlet{tcolor}{text1!10!back1} % texture color +\colorlet{dcolor}{white} % draw color +\colorlet{fcolor}{cyan95} % fill color +\colorlet{scolor}{black} % shade color + +\setbeamercolor{normal text}{bg=back1,fg=text1} +\setbeamercolor{structure}{fg=cyan95} +\setbeamercolor{local structure}{fg=blue99} +\setbeamercolor{footline}{bg=,fg=black} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{fg=text1} +\setbeamercolor{author}{fg=white} +\setbeamercolor{institute}{fg=white} +\setbeamercolor{date}{fg=white} +\setbeamercolor{section in toc}{parent=title} +\setbeamercolor{subsection in toc}{parent=title} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{subsection in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{parent=title} +\setbeamercolor{separator line}{fg=accent2} +\setbeamercolor{theoremname}{parent=subtitle} +\setbeamercolor{proofname}{parent=subtitle} +\setbeamercolor{block title}{fg=accent1,bg=gray} +\setbeamercolor{block body}{bg=lightgray} +\setbeamercolor{block title example}{fg=accent2,bg=gray} +\setbeamercolor{block body example}{bg=lightgray} +\setbeamercolor{block title alerted}{fg=accent3,bg=gray} +\setbeamercolor{block body alerted}{bg=lightgray} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[default] +\setbeamertemplate{background}[line] +\setbeamertemplate{footline}[progress] +\setbeamertemplate{footline left}[author] +\setbeamertemplate{footline center}[title] +\setbeamertemplate{footline right}[number] +\setbeamertemplate{title page}[snake] +\setbeamertemplate{at begin section}[plain] +\setbeamertemplate{at begin subsection}[plain] +\setbeamertemplate{section page}[snake] +\setbeamertemplate{section page content}[level] +\setbeamertemplate{subsection page}[snake] +\setbeamertemplate{subsection page content}[level] +\setbeamertemplate{theorem begin}[default] +\setbeamertemplate{theorem end}[default] +\setbeamertemplate{proof begin}[default] +\setbeamertemplate{proof end}[default] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{section}[simple] +\setbeamertemplate{subsection}[simple] +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{subsection in toc}[subsections numbered] +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{subsection in toc shaded}[default][100] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background}{} + \setbeamertemplate{footline}[sectioning] + \colorlet{dcolor}{darkgray} + \colorlet{fcolor}{white} + \colorlet{scolor}{white} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{title}{fg=accent1} + \setbeamercolor{subtitle}{fg=accent1!70!gray} + \setbeamercolor{author}{fg=black} + \setbeamercolor{institute}{fg=black} + \setbeamercolor{date}{fg=black} + \setbeamercolor{section in toc}{fg=accent1!90!gray} + \setbeamercolor{subsection in toc}{fg=accent1!80!gray} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} + \setbeamercolor{frametitle}{fg=accent1!70!gray,bg=} + \setbeamercolor{theoremname}{fg=accent1!60!gray} + \setbeamercolor{proofname}{fg=accent1!60!gray} + \setbeamercolor{footline}{bg=white,fg=black} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.pdf new file mode 100644 index 0000000000..6fb2d5bba5 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.tex new file mode 100644 index 0000000000..08da497114 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/bernoulli/demo-bernoulli.tex @@ -0,0 +1,176 @@ +% -*- coding: utf-8 -*- + +\documentclass[11pt,xcolor={rgb}]{beamer} + +\usetheme{bernoulli} + +% remove these two lines to hide footlines in (sub)section pages +\setbeamertemplate{at begin section}[normal] +\setbeamertemplate{at begin subsection}[normal] + +\usepackage{arev} + +\begin{document} + +\title{Beamer Theme Bernoulli} +\subtitle{A nice theme for LaTeX presentations} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/beamerthemedirichlet.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/beamerthemedirichlet.sty new file mode 100644 index 0000000000..d9590b9b01 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/beamerthemedirichlet.sty @@ -0,0 +1,402 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemedirichlet}[2024-01-19 v2024A Beamer Theme Dirichlet] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,adjustbox} +\usetikzlibrary{decorations.pathmorphing,calc} + +\mode + +\setbeamersize{text margin left=8mm,text margin right=8mm} + +%% ----------------- background canvas and background ---------------- + +\defbeamertemplate{background}{dirichlet}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \foreach \i in {0,16,...,128} \foreach \j in {0,16,...,96} { + \path[draw=blue77!90!black] (\i mm,\j mm) circle (16mm); + } + \end{tikzpicture}% +} + +% need "text badly ragged" option for correct space skips +% see http://tex.stackexchange.com/a/132748/8956 +\gdef\my@background@title +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[fill=fcolor] + (0,0.25\paperheight) -- (0,0) -- (\paperwidth,0) -- (\paperwidth,0.25\paperheight) + decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \path[draw=dcolor,thick] (\paperwidth,0.25\paperheight) + decorate[decoration={snake,segment length=3.15mm}] { -- (0,0.25\paperheight) }; + \path[fill=fcolor] + (0,0.85\paperheight) -- (0,\paperheight) -- (\paperwidth,\paperheight) -- (\paperwidth,0.85\paperheight) + decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \path[draw=dcolor,thick] (\paperwidth,0.85\paperheight) + decorate[decoration={snake,segment length=3.15mm}] { -- (0,0.85\paperheight) }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.925\paperheight) {% + \begin{minipage}[c][0.15\paperheight]{0.9\paperwidth}% + \centering + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + \end{minipage} + }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c][0.6\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.125\paperheight) {% + \begin{minipage}[c][0.25\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\[3pt] + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \end{minipage} + }; + \end{tikzpicture} +} + +\gdef\my@background@section +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[fill=fcolor] + (0,0.1\paperheight) -- (0,0) -- (\paperwidth,0) -- (\paperwidth,0.1\paperheight) + to[bend right=10] ($(0,0.1\paperheight)$); + \path[draw=dcolor,thick] (\paperwidth,0.1\paperheight) to[bend right=10] ($(0,0.1\paperheight)$); + \node[text width=\textwidth,text badly ragged] at (0.5\paperwidth,0.6\paperheight) {% + \begin{minipage}[c]{\textwidth} + \usebeamertemplate{section page content}% + \end{minipage} + }; + \end{tikzpicture} +} + +\gdef\my@background@subsection +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[fill=fcolor] + (0,0.1\paperheight) -- (0,0) -- (\paperwidth,0) -- (\paperwidth,0.1\paperheight) + to[bend right=10] ($(0,0.1\paperheight)$); + \path[draw=dcolor,thick] (\paperwidth,0.1\paperheight) to[bend right=10] ($(0,0.1\paperheight)$); + \node[text width=\textwidth,text badly ragged] at (0.5\paperwidth,0.6\paperheight) {% + \begin{minipage}[c]{\textwidth} + \usebeamertemplate{subsection page content}% + \end{minipage} + }; + \end{tikzpicture} +} + +%% -------------------------- title page ----------------------------- + +\defbeamertemplate{title page}{snake} +{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@title + \end{adjustbox}% +} + +%% ----------------------- section and subsection -------------------- + +% create new template for section +\defbeamertemplate{section}{simple}{% + \insertsectionnumber.\hspace*{1ex}\insertsection% +} + +\AtBeginSection[]{\begin{frame}{\sectionpage}\end{frame}} + +\defbeamertemplate{section page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@section + \end{adjustbox}% +} + +\defbeamertemplate{section page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{section title}% + \usebeamerfont{section title} + \usebeamertemplate{section}% + \end{beamercolorbox} +} + +% create new template for subsection +\defbeamertemplate{subsection}{simple}{% + \insertsectionnumber.\insertsubsectionnumber\hspace*{2ex}\insertsubsection% +} + +\AtBeginSubsection[]{\begin{frame}{\subsectionpage}\end{frame}} + +\defbeamertemplate{subsection page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@subsection + \end{adjustbox}% +} + +\defbeamertemplate{subsection page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{subsection title}% + \usebeamerfont{subsection title}% + \usebeamertemplate{subsection}% + \end{beamercolorbox}% +} +\defbeamertemplate{subsection page content}{dirichlet}{% + \noindent + \begin{minipage}{0.5\textwidth} + \usebeamerfont{section title}% + \usebeamertemplate{section}% + \end{minipage}% + \begin{minipage}{0.5\textwidth} + \tableofcontents[sectionstyle=hide,subsectionstyle=show/shaded/hide] + \end{minipage}% +} + +\defbeamertemplate{subsection in toc}{dirichlet}{% + \leavevmode + \smash{\color{text1}\hspace{-1pt}\rule[-0.6em]{2pt}{2em}}\quad + $\circ$ \inserttocsubsection\par +} + +%% ---------------------- headline and footline ---------------------- + +\newif\ifmy@subsection \my@subsectionfalse + +\newcommand{\my@sectionentry}[5]{% + \hfill + \ifnum\c@section=#1% + \usebeamercolor{headline highlight}% + \else% + \usebeamercolor{headline}% + \fi% + \hyperlink{Navigation#3}{% + \colorbox{bg}{% + \hspace{0.2em}\rule[-1ex]{0pt}{3.25ex}\color{fg}#2\hspace{0.2em}% + }% + }% + \let\slideentry=\my@slideentry +} + +\newcommand{\my@subsectionentry}[5]{\my@subsectiontrue} + +\newcommand{\my@slideentry}[6]{% + \ifmy@subsection + \usebeamercolor{headline}% + \def\my@box{$\circ$}% + \ifnum\c@section=#1% + \usebeamercolor{headline highlight}% + \ifnum\c@subsection=#2% + \def\my@box{$\bullet$}% + \fi + \fi + \beamer@link(#4){% + \colorbox{bg}{% + \rule[-1ex]{0pt}{3.25ex}\hspace{0.1em}\color{fg}\my@box\hspace{0.1em}% + }% + }% + \my@subsectionfalse + \fi +} + +\defbeamertemplate{headline}{dirichlet}{% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{headline}% + \usebeamerfont{headline}% + \kern\beamer@leftmargin + \setlength{\fboxsep}{0pt}% + \let\sectionentry=\my@sectionentry + \let\beamer@subsectionentry=\my@subsectionentry + \hskip 0pt plus -1fill\dohead + \hskip 0pt plus 9fill\relax + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber}% + \kern\beamer@rightmargin + \end{beamercolorbox}% + % default height is 0.4pt, which is ignored by adobe reader, so we increase it by 0.2pt + {\color{dcolor}\hrule height 0.6pt}% +} + +%% ------------------------- frame title ----------------------------- + +\defbeamertemplate{frametitle}{simple}{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin]{frametitle} + \usebeamerfont{frametitle}% + \rule[-3.6mm]{0pt}{12mm}\insertframetitle\rule[-3.6mm]{0pt}{12mm}\par + \end{beamercolorbox} +} + +%% ------------------- block and theorem ----------------------------- + +\defbeamertemplate{theorem begin}{simple} +{% + \upshape%\bfseries\inserttheoremheadfont + {\usebeamercolor[fg]{theoremname}% + \inserttheoremname\inserttheoremnumber + \ifx\inserttheoremaddition\@empty\else\ (\inserttheoremaddition)\fi% + %\inserttheorempunctuation + }% + \quad\normalfont +} +\defbeamertemplate{theorem end}{simple}{\par} + +\defbeamertemplate{proof begin}{simple} +{% + %\bfseries + {\usebeamercolor[fg]{proofname}\insertproofname}% + \quad\normalfont +} +\defbeamertemplate{proof end}{simple}{\par} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\large} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\large} +\setbeamerfont{section in toc}{size=\Large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{headline}{size=\scriptsize} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%\setlength{\parskip}{5pt plus 1pt minus 1pt} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red69}{Hsb}{0,0.6,0.9} +\definecolor{yellow69}{Hsb}{60,0.6,0.9} +\definecolor{yellow99}{Hsb}{60,0.9,0.9} +\definecolor{green69}{Hsb}{120,0.6,0.9} +\definecolor{cyan69}{Hsb}{180,0.6,0.9} +\definecolor{azure53}{Hsb}{210,0.5,0.3} +\definecolor{blue77}{Hsb}{240,0.7,0.7} +\definecolor{blue88}{Hsb}{240,0.8,0.8} +\definecolor{blue97}{Hsb}{240,0.9,0.7} +\definecolor{magenta69}{Hsb}{300,0.6,0.9} +\definecolor{purple94}{Hsb}{330,0.9,0.4} + +\colorlet{text1}{white} +\colorlet{back1}{blue77} +\colorlet{accent1}{yellow69} +\colorlet{accent2}{green69} +\colorlet{accent3}{red69} +\colorlet{accent4}{cyan69} +\colorlet{accent5}{magenta69} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{filler4}{accent4!40!back1} +\colorlet{filler5}{accent5!40!back1} +\colorlet{dcolor}{white} +\colorlet{fcolor}{azure53} + +\setbeamercolor{normal text}{bg=blue77,fg=white} +\setbeamercolor{structure}{fg=yellow99} +\setbeamercolor{local structure}{fg=accent2} +\setbeamercolor{headline}{bg=azure53,fg=white} +\setbeamercolor{headline highlight}{parent=headline,bg=purple94} +\setbeamercolor{navigation symbols}{bg=purple94} +\setbeamercolor{navigation symbols dimmed}{fg=purple94} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{fg=white} +\setbeamercolor{author}{fg=white} +\setbeamercolor{institute}{fg=white} +\setbeamercolor{date}{fg=white} +\setbeamercolor{section in toc}{parent=title} +\setbeamercolor{subsection in toc}{parent=title} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{subsection in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{parent=title} +\setbeamercolor{theoremname}{parent=subtitle} +\setbeamercolor{proofname}{parent=subtitle} +\setbeamercolor{block title}{fg=accent1,bg=back1!50!gray} +\setbeamercolor{block body}{bg=back1!50!lightgray} +\setbeamercolor{block title example}{fg=accent2,bg=back1!50!gray} +\setbeamercolor{block body example}{bg=back1!50!lightgray} +\setbeamercolor{block title alerted}{fg=accent3,bg=back1!50!gray} +\setbeamercolor{block body alerted}{bg=back1!50!lightgray} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[default] +\setbeamertemplate{background}[dirichlet] +\setbeamertemplate{title page}[snake] +\setbeamertemplate{section page}[snake] +\setbeamertemplate{section page content}[simple] +\setbeamertemplate{subsection page}[snake] +\setbeamertemplate{subsection page content}[dirichlet] +\setbeamertemplate{section}[simple] +\setbeamertemplate{subsection}[simple] +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{subsection in toc}[dirichlet] +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{subsection in toc shaded}[default][100] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{headline}[dirichlet] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{theorem begin}[default] +\setbeamertemplate{theorem end}[default] +\setbeamertemplate{proof begin}[default] +\setbeamertemplate{proof end}[default] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background}{} + \setbeamertemplate{subsection page content}[simple] + \colorlet{text1}{black} + \colorlet{back1}{white} + \colorlet{accent1}{blue!90!black} + \colorlet{accent2}{teal!70!black} + \colorlet{accent3}{red!50!black} + \colorlet{dcolor}{gray} + \colorlet{fcolor}{white} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{title}{fg=blue} + \setbeamercolor{subtitle}{fg=black} + \setbeamercolor{author}{fg=black} + \setbeamercolor{institute}{fg=black} + \setbeamercolor{date}{fg=black} + \setbeamercolor{section in toc}{fg=blue!90!gray} + \setbeamercolor{subsection in toc}{fg=blue!80!gray} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} + \setbeamercolor{section title}{fg=blue!90!gray} + \setbeamercolor{subsection title}{fg=blue!80!gray} + \setbeamercolor{headline}{bg=white,fg=black} + \setbeamercolor{headline highlight}{fg=blue!90!gray,bg=white} + \setbeamercolor{frametitle}{fg=blue!70!gray,bg=} + \setbeamercolor{theoremname}{fg=blue!60!gray} + \setbeamercolor{proofname}{fg=blue!60!gray} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.pdf new file mode 100644 index 0000000000..ed4fba2bde Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.tex new file mode 100644 index 0000000000..24cb9ca62e --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/dirichlet/demo-dirichlet.tex @@ -0,0 +1,171 @@ +% -*- coding: utf-8 -*- + +\documentclass[12pt,xcolor={rgb}]{beamer} + +\usetheme{dirichlet} + +\usepackage{arev} + +\begin{document} + +\title{Beamer Theme Dirichlet} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/beamerthemefermat.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/beamerthemefermat.sty new file mode 100644 index 0000000000..f4130745a0 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/beamerthemefermat.sty @@ -0,0 +1,433 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemefermat}[2024-01-19 v2024A Beamer Theme Fermat] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,etoolbox,adjustbox,varwidth,multicol} +\usetikzlibrary{decorations.pathmorphing} + +\mode + +\setbeamersize{text margin left=8mm,text margin right=8mm} + +%% ----------------- background canvas and background ---------------- + +\defbeamertemplate{background}{line}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[xstep=\paperwidth,ystep=1mm,color=tcolor] (0,0) grid (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +\defbeamertemplate{background}{linear}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[pattern=horizontal lines, pattern color=tcolor] + (0,0) rectangle (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +\defbeamertemplate{background}{lattice}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[step=1mm,color=tcolor] (0,0) grid (\paperwidth,\paperheight); + \end{tikzpicture}% +} + +% need "text badly ragged" option for correct space skips +% see http://tex.stackexchange.com/a/132748/8956 +\gdef\my@background@title +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \fill[draw=dcolor,fill=fcolor] + (0,0.25\paperheight) -- (0,0) -- (\paperwidth,0) + -- (\paperwidth,0.25\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \fill[draw=dcolor,fill=fcolor] + (0,0.85\paperheight) -- (0,\paperheight) -- (\paperwidth,\paperheight) + -- (\paperwidth,0.85\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.925\paperheight) {% + \begin{minipage}[c][0.15\paperheight]{0.9\paperwidth}% + \centering + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + \end{minipage} + }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c][0.6\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.125\paperheight) {% + \begin{minipage}[c][0.25\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\[3pt] + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \end{minipage} + }; + \end{tikzpicture} +} + +\gdef\my@background@section +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \fill[draw=dcolor,fill=fcolor] + (0,0.12\paperheight) -- (0,0) -- (\paperwidth,0) + -- (\paperwidth,0.12\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \fill[draw=dcolor,fill=fcolor] + (0,0.92\paperheight) -- (0,\paperheight) -- (\paperwidth,\paperheight) + -- (\paperwidth,0.92\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.52\paperheight) {% + \begin{minipage}[c]{0.9\paperwidth} + \usebeamertemplate{section page content}% + \end{minipage} + }; + \end{tikzpicture} +} + +\gdef\my@background@subsection +{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \fill[draw=dcolor,fill=fcolor] + (0,0.12\paperheight) -- (0,0) -- (\paperwidth,0) + -- (\paperwidth,0.12\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \fill[draw=dcolor,fill=fcolor] + (0,0.92\paperheight) -- (0,\paperheight) -- (\paperwidth,\paperheight) + -- (\paperwidth,0.92\paperheight) decorate[decoration={snake,segment length=3.15mm}] { -- cycle }; + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.52\paperheight) {% + \begin{minipage}[c]{0.9\paperwidth} + \usebeamertemplate{subsection page content}% + \end{minipage} + }; + \end{tikzpicture} +} + +%% -------------------------- title page ----------------------------- + +\defbeamertemplate{title page}{snake} +{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@title + \end{adjustbox}% +} + +%% ----------------------- section and subsection -------------------- + +\patchcmd{\@vwid@sift}{\PackageWarning{varwidth}{Failed to reprocess entire contents}}{}{}{} + +\def\sectionintocskip{0.5em} +\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip\sectionintocskip}{}{} +% patch for centering toc with varwidth package +\patchcmd{\beamer@sectionintoc}{% + \hbox{\vbox{% + \def\beamer@breakhere{\\}% + \beamer@tocact{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}{section in toc}}}% +}{% + \hbox{% + \def\beamer@breakhere{}% + \beamer@tocact{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}{section in toc}}% +}{}{} +% patch for centering toc in pdflatex with varwidth package +\let\my@beamer@subsectionintoc=\beamer@subsectionintoc +\patchcmd{\my@beamer@subsectionintoc}{% + \def\beamer@breakhere{\\}% + \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\beamer@toc@css\else\beamer@toc@oss\fi\else\beamer@toc@ooss\fi} + {subsection in toc}% +}{% + \def\beamer@breakhere{}% + \ifnum\c@section=#1\ifnum\c@subsection=#2% + \vskip.5em\hbox{\beamer@tocact\beamer@toc@css{subsection in toc}}% + \else + \vskip.5em\hbox{\beamer@tocact\beamer@toc@oss{subsection in toc}}% + \fi\fi +}{}{} + +% create new template for section +\defbeamertemplate{section}{simple}{% + \insertsectionnumber.\hspace*{1ex}\insertsection% +} + +\defbeamertemplate{at begin section}{normal}{% + \frame{\sectionpage} +} +\defbeamertemplate{at begin section}{plain}{% + \frame[plain]{\sectionpage} +} +\AtBeginSection[]{\usebeamertemplate{at begin section}} + +\defbeamertemplate{section page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@section + \end{adjustbox}% +} + +\defbeamertemplate{section page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{section title}% + \usebeamerfont{section title} + \usebeamertemplate{section}% + \end{beamercolorbox} +} +\defbeamertemplate{section page content}{level}{ + \begin{center} + \begin{varwidth}{\textwidth} + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide] + \end{varwidth} + \end{center} +} +\defbeamertemplate{section page content}{split}{ + \begin{multicols}{2} + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=shaded] + \end{multicols} +} + +% create new template for subsection +\defbeamertemplate{subsection}{simple}{% + \insertsectionnumber.\insertsubsectionnumber\hspace*{2ex}\insertsubsection% +} + +\defbeamertemplate{at begin subsection}{normal}{% + \frame{\subsectionpage} +} +\defbeamertemplate{at begin subsection}{plain}{% + \frame[plain]{\subsectionpage} +} +\AtBeginSubsection[]{\usebeamertemplate{at begin subsection}} + +\defbeamertemplate{subsection page}{snake}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@subsection + \end{adjustbox}% +} + +\defbeamertemplate{subsection page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{subsection title}% + \usebeamerfont{subsection title}% + \usebeamertemplate{subsection}% + \end{beamercolorbox}% +} +\defbeamertemplate{subsection page content}{level}{ + \begin{center} + \let\beamer@subsectionintoc=\my@beamer@subsectionintoc + \begin{varwidth}{\textwidth} + \tableofcontents[sectionstyle=hide,subsectionstyle=show/shaded/hide] + \end{varwidth} + \end{center} +} +\defbeamertemplate{subsection page content}{split}{ + \begin{multicols}{2} + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded] + \end{multicols} +} + +\defbeamertemplate{subsection in toc}{triangle}{% + \leavevmode\leftskip=2.5em\scriptsize\raise1.25pt% + \rlap{\hskip-1.5em\donotcoloroutermaths$\blacktriangleright$}% + \normalsize\inserttocsubsection\par +} + +%% ---------------------- headline and footline ---------------------- + +\newif\ifmy@subsection \my@subsectionfalse + +\newcommand{\my@sectionentry}[5]{% + \hfill + \ifnum\c@section=#1% + \usebeamercolor{footline highlight}% + \else% + \usebeamercolor{footline}% + \fi% + \hyperlink{Navigation#3}{% + \colorbox{bg}{% + \hspace{0.2em}\rule[-1ex]{0pt}{3.25ex}\color{fg}#2\hspace{0.2em}% + }% + }% + \let\slideentry=\my@slideentry +} + +\newcommand{\my@subsectionentry}[5]{\my@subsectiontrue} + +\newcommand{\my@slideentry}[6]{% + \ifmy@subsection + \usebeamercolor{footline}% + \def\my@box{$\circ$}% + \ifnum\c@section=#1% + \usebeamercolor{footline highlight}% + \ifnum\c@subsection=#2% + \def\my@box{$\bullet$}% + \fi + \fi + \beamer@link(#4){% + \colorbox{bg}{% + \rule[-1ex]{0pt}{3.25ex}\hspace{0.1em}\color{fg}\my@box\hspace{0.1em}% + }% + }% + \my@subsectionfalse + \fi +} + +\defbeamertemplate{footline}{progress}{% + \begin{beamercolorbox}[wd=\paperwidth,ht=0.6pt,sep=0pt]{separator line} + \end{beamercolorbox} + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline}% + \usebeamerfont{footline}% + \kern\beamer@leftmargin + \setlength{\fboxsep}{0pt}% + \let\sectionentry=\my@sectionentry + \let\beamer@subsectionentry=\my@subsectionentry + \hskip 0pt plus -1fill\dohead + \hskip 0pt plus 9fill\relax + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber}% + \kern\beamer@rightmargin + \end{beamercolorbox}% +} + +%% ------------------------- frame title ----------------------------- + +\defbeamertemplate{frametitle}{simple}{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin]{frametitle} + \usebeamerfont{frametitle}% + \rule[-3.6mm]{0pt}{12mm}\insertframetitle\rule[-3.6mm]{0pt}{12mm}\par + \end{beamercolorbox} + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,ht=0.6pt,sep=0pt]{separator line} + \end{beamercolorbox} +} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\large} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\large} +\setbeamerfont{section in toc}{size=\large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%\setlength{\parskip}{5pt plus 1pt minus 1pt} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red99}{Hsb}{0,0.9,0.9} +\definecolor{brown49}{Hsb}{30,0.4,0.9} +\definecolor{yellow29}{Hsb}{60,0.2,0.9} +\definecolor{yellow86}{Hsb}{60,0.8,0.6} +\definecolor{cyan95}{Hsb}{180,0.9,0.5} +\definecolor{blue77}{Hsb}{240,0.7,0.7} +\definecolor{blue99}{Hsb}{240,0.9,0.9} +\definecolor{magenta88}{Hsb}{300,0.8,0.8} + +\colorlet{text1}{black} +\colorlet{back1}{white} +\colorlet{accent1}{blue99} +\colorlet{accent2}{cyan95} +\colorlet{accent3}{red99} +\colorlet{accent4}{yellow86} +\colorlet{accent5}{magenta88} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{filler4}{accent4!40!back1} +\colorlet{filler5}{accent5!40!back1} +\colorlet{tcolor}{text1!10!back1} +\colorlet{dcolor}{cyan95} +\colorlet{fcolor}{brown49} + +\setbeamercolor{normal text}{bg=yellow29,fg=black} +\setbeamercolor{structure}{fg=blue99} +\setbeamercolor{local structure}{fg=cyan95} +\setbeamercolor{footline}{bg=brown49,fg=black} +\setbeamercolor{footline highlight}{parent=footline,bg=filler2} +\setbeamercolor{separator line}{bg=accent2} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{use={structure,normal text},fg=structure.fg!90!normal text.bg} +\setbeamercolor{section in toc}{parent=title} +\setbeamercolor{subsection in toc}{parent=subtitle} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{subsection in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{fg=text1,bg=brown49} +\setbeamercolor{theoremname}{parent=subtitle} +\setbeamercolor{proofname}{parent=subtitle} +\setbeamercolor{block title}{fg=accent1,bg=gray} +\setbeamercolor{block body}{bg=lightgray} +\setbeamercolor{block title example}{fg=accent2,bg=gray} +\setbeamercolor{block body example}{bg=lightgray} +\setbeamercolor{block title alerted}{fg=accent3,bg=gray} +\setbeamercolor{block body alerted}{bg=lightgray} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[default] +\setbeamertemplate{background}[line] +\setbeamertemplate{footline}[progress] +\setbeamertemplate{title page}[snake] +\setbeamertemplate{at begin section}[plain] +\setbeamertemplate{at begin subsection}[plain] +\setbeamertemplate{section page}[snake] +\setbeamertemplate{section page content}[level] +\setbeamertemplate{subsection page}[snake] +\setbeamertemplate{subsection page content}[level] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{section}[simple] +\setbeamertemplate{subsection}[simple] +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{subsection in toc}[subsections numbered] +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{subsection in toc shaded}[default][100] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background}{} + \colorlet{dcolor}{darkgray} + \colorlet{fcolor}{white} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{footline highlight}{bg=,fg=blue99} + \setbeamercolor{title}{fg=blue} + \setbeamercolor{subtitle}{fg=blue!70!gray} + \setbeamercolor{section in toc}{fg=blue!90!gray} + \setbeamercolor{subsection in toc}{fg=blue!80!gray} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} + \setbeamercolor{frametitle}{fg=blue!70!gray,bg=} + \setbeamercolor{theoremname}{fg=blue!60!gray} + \setbeamercolor{proofname}{fg=blue!60!gray} + \setbeamercolor{footline}{bg=white,fg=black} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.pdf new file mode 100644 index 0000000000..1ac68703d3 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.tex new file mode 100644 index 0000000000..84d2f31213 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/fermat/demo-fermat.tex @@ -0,0 +1,171 @@ +% -*- coding: utf-8 -*- + +\documentclass[12pt,xcolor={rgb}]{beamer} + +\usetheme{fermat} + +\usepackage{arev} + +\begin{document} + +\title{Beamer Theme Fermat} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/beamerthemegauss.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/beamerthemegauss.sty new file mode 100644 index 0000000000..b6acd9069a --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/beamerthemegauss.sty @@ -0,0 +1,678 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemegauss}[2024-01-19 v2024A Beamer Theme Gauss] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,etoolbox,fontawesome} + +% see https://github.com/xdanaux/fontawesome-latex/issues/12 +% but we don't need to fix it on TeX Live 2022 +%\ifxetex +% \newfontfamily{\FA}{FontAwesome}[Extension=.otf] +%\fi + +\usetikzlibrary{patterns} + +\mode + +\setbeamersize{text margin left=10.5mm,text margin right=5.5mm} + +%% ----------------- background canvas and background ---------------- + +\def\my@fa#1{#1\space} + +\defbeamertemplate{background canvas}{awesome}{% + \setlength{\fboxsep}{0pt}% + \noindent\colorbox{bg}{% + \usebeamertemplate{background texture}% + }% +} + +\defbeamertemplate{background texture}{awesome}{% + \fontfamily{lmss}\fontsize{17pt}{22pt}\selectfont\color{tcolor}% + \hspace{0.008\paperwidth}% + \begin{minipage}[c][\paperheight][c]{0.984\paperwidth} + \my@fa\faAdjust + \my@fa\faAlignCenter + \my@fa\faAlignJustify + \my@fa\faAlignLeft + \my@fa\faAlignRight + \my@fa\faAngleDoubleDown + \my@fa\faAngleDoubleLeft + \my@fa\faAngleDoubleRight + \my@fa\faAngleDoubleUp + \my@fa\faAngleDown + \my@fa\faAngleLeft + \my@fa\faAngleRight + \my@fa\faAngleUp + \my@fa\faAreaChart + \my@fa\faArrowCircleODown + \my@fa\faArrowCircleOLeft + \my@fa\faArrowCircleORight + \my@fa\faArrowCircleOUp + \my@fa\faArrowDown + \my@fa\faArrowLeft + \my@fa\faArrowRight + \my@fa\faArrowUp + \my@fa\faArrows + \my@fa\faArrowsH + \my@fa\faArrowsV + \my@fa\faAsterisk + \my@fa\faAt + \my@fa\faBackward + \my@fa\faBan + \my@fa\faBarChart + \my@fa\faBars + \my@fa\faBold + \my@fa\faBolt + \my@fa\faBook + \my@fa\faBookmarkO + \my@fa\faBraille + \my@fa\faBullseye + \my@fa\faCalendarCheckO + \my@fa\faCalendarMinusO + \my@fa\faCalendarPlusO + \my@fa\faCalendarTimesO + \my@fa\faCaretDown + \my@fa\faCaretLeft + \my@fa\faCaretRight + \my@fa\faCaretSquareODown + \my@fa\faCaretSquareOLeft + \my@fa\faCaretSquareORight + \my@fa\faCaretSquareOUp + \my@fa\faCheck + \my@fa\faCheckCircleO + \my@fa\faCheckSquareO + \my@fa\faChevronDown + \my@fa\faChevronLeft + \my@fa\faChevronRight + \my@fa\faChevronUp + \my@fa\faCircleO + \my@fa\faCircleThin + \my@fa\faClone + \my@fa\faClose + \my@fa\faCode + \my@fa\faColumns + \my@fa\faCommentO + \my@fa\faCommentingO + \my@fa\faCompress + \my@fa\faCrosshairs + \my@fa\faDatabase + \my@fa\faDesktop + \my@fa\faDotCircleO + \my@fa\faEject + \my@fa\faEllipsisH + \my@fa\faEllipsisV + \my@fa\faEnvira + \my@fa\faEraser + \my@fa\faExchange + \my@fa\faExclamation + \my@fa\faExclamationCircle + \my@fa\faExpand + \my@fa\faEyedropper + \my@fa\faFa + \my@fa\faFighterJet + \my@fa\faFire + \my@fa\faFlagO + \my@fa\faFlash + \my@fa\faFlask + \my@fa\faFolderO + \my@fa\faFont + \my@fa\faForward + \my@fa\faFrownO + \my@fa\faGavel + \my@fa\faGbp + \my@fa\faGear + \my@fa\faGenderless + \my@fa\faGraduationCap + \my@fa\faGratipay + \my@fa\faHSquare + \my@fa\faHandODown + \my@fa\faHandOLeft + \my@fa\faHandORight + \my@fa\faHandOUp + \my@fa\faHandPaperO + \my@fa\faHandPeaceO + \my@fa\faHandPointerO + \my@fa\faHandScissorsO + \my@fa\faHashtag + \my@fa\faHeader + \my@fa\faHeartO + \my@fa\faHome + \my@fa\faHourglassHalf + \my@fa\faImage + \my@fa\faInfo + \my@fa\faInfoCircle + \my@fa\faItalic + \my@fa\faLaptop + \my@fa\faLeaf + \my@fa\faLemonO + \my@fa\faLevelDown + \my@fa\faLevelUp + \my@fa\faLightbulbO + \my@fa\faLineChart + \my@fa\faListOl + \my@fa\faListUl + \my@fa\faLocationArrow + \my@fa\faLongArrowDown + \my@fa\faLongArrowLeft + \my@fa\faLongArrowRight + \my@fa\faLongArrowUp + \my@fa\faMailForward + \my@fa\faMailReply + \my@fa\faMapO + \my@fa\faMehO + \my@fa\faMinus + \my@fa\faMinusCircle + \my@fa\faMinusSquareO + \my@fa\faMoonO + \my@fa\faMousePointer + \my@fa\faNeuter + \my@fa\faObjectGroup + \my@fa\faObjectUngroup + \my@fa\faPagelines + \my@fa\faPaintBrush + \my@fa\faPaperPlaneO + \my@fa\faPaperclip + \my@fa\faPauseCircleO + \my@fa\faPaw + \my@fa\faPencil + \my@fa\faPercent + \my@fa\faPhoto + \my@fa\faPieChart + \my@fa\faPlane + \my@fa\faPlayCircleO + \my@fa\faPlus + \my@fa\faPlusCircle + \my@fa\faPlusSquareO + \my@fa\faProductHunt + \my@fa\faPuzzlePiece + \my@fa\faQuestion + \my@fa\faQuestionCircle + \my@fa\faQuestionCircleO + \my@fa\faQuoteLeft + \my@fa\faQuoteRight + \my@fa\faRefresh + \my@fa\faRemove + \my@fa\faReorder + \my@fa\faReply + \my@fa\faRocket + \my@fa\faRotateLeft + \my@fa\faRotateRight + \my@fa\faScissors + \my@fa\faSearch + \my@fa\faSearchMinus + \my@fa\faSearchPlus + \my@fa\faShare + \my@fa\faSignal + \my@fa\faSmileO + \my@fa\faSort + \my@fa\faSortNumericAsc + \my@fa\faSortNumericDesc + \my@fa\faSpaceShuttle + \my@fa\faSquareO + \my@fa\faStar + \my@fa\faStarHalfO + \my@fa\faStarO + \my@fa\faStepBackward + \my@fa\faStepForward + \my@fa\faStickyNoteO + \my@fa\faStopCircle + \my@fa\faStopCircleO + \my@fa\faStrikethrough + \my@fa\faSubscript + \my@fa\faSunO + \my@fa\faSuperscript + \my@fa\faTable + \my@fa\faTag + \my@fa\faTasks + \my@fa\faTextHeight + \my@fa\faTextWidth + \my@fa\faTh + \my@fa\faThLarge + \my@fa\faThList + \my@fa\faThumbTack + \my@fa\faThumbsODown + \my@fa\faThumbsOUp + \my@fa\faTimes + \my@fa\faTimesCircle + \my@fa\faTimesCircleO + \my@fa\faTint + \my@fa\faToggleDown + \my@fa\faToggleLeft + \my@fa\faToggleRight + \my@fa\faToggleUp + \my@fa\faTree + \my@fa\faTv + \my@fa\faUnderline + \my@fa\faUniversity + \my@fa\faUnsorted + \my@fa\faUser + \my@fa\faWarning + \my@fa\faWon + \my@fa\faWrench + \end{minipage} +} + +\defbeamertemplate{background texture}{line}{% + \begin{tikzpicture}[remember picture,overlay] + \draw[pattern=horizontal lines, pattern color=tcolor] + (current page.south east) rectangle (current page.north west); + \end{tikzpicture}% +} +\defbeamertemplate{background texture}{grid}{% + \begin{tikzpicture}[remember picture,overlay] + \draw[step=1mm,color=tcolor] + (current page.south east) grid (current page.north west); + \end{tikzpicture}% +} + +\gdef\my@background@title{% +} + +\gdef\my@background@section{% +} + +\gdef\my@background@subsection{% +} + +\newcommand{\my@fa@documentstart}{\hyperlinkdocumentstart{\rotatebox{-90}{\faStepBackward}}} +\newcommand{\my@fa@sectionstart}{\hyperlinksectionstart{\rotatebox{-90}{\faBackward}}} +\newcommand{\my@fa@subsectionstart}{\hyperlinksubsectionstart{\rotatebox{180}{\fontsize{9}{9}\selectfont\faSortDesc}}} +\newcommand{\my@fa@frameendprev}{\hyperlinkframeendprev{\faArrowUp}} +\newcommand{\my@fa@gotopage}{\Acrobatmenu{GoToPage}{\bfseries\insertframenumber}} +\newcommand{\my@fa@framestartnext}{\hyperlinkframestartnext{\faArrowDown}} +\newcommand{\my@fa@subsectionstartnext}{\hyperlinksubsectionstartnext{\fontsize{9}{9}\selectfont\faSortDesc}} +\newcommand{\my@fa@sectionstartnext}{\hyperlinksectionstartnext{\rotatebox{-90}{\faForward}}} +\newcommand{\my@fa@documentend}{\hyperlinkdocumentend{\rotatebox{-90}{\faStepForward}}} + +\gdef\my@background@normal{% + \begin{tikzpicture}[font=\fontsize{6}{6}\selectfont] + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.4] + (0.03\paperwidth,0.05\paperheight) rectangle (0.97\paperwidth,0.95\paperheight) + (0.7,0.9\paperheight) circle (.2) node{\my@fa@documentstart} + (0.7,0.8\paperheight) circle (.2) node{\my@fa@sectionstart} + (0.7,0.7\paperheight) circle (.2) node{\my@fa@subsectionstart} + (0.7,0.6\paperheight) circle (.2) node{\my@fa@frameendprev} + (0.7,0.5\paperheight) circle (.2) node{\my@fa@gotopage} + (0.7,0.4\paperheight) circle (.2) node{\my@fa@framestartnext} + (0.7,0.3\paperheight) circle (.2) node{\my@fa@subsectionstartnext} + (0.7,0.2\paperheight) circle (.2) node{\my@fa@sectionstartnext} + (0.7,0.1\paperheight) circle (.2) node{\my@fa@documentend}; + \end{tikzpicture} +} + +\let\my@background=\my@background@title + +\defbeamertemplate{background}{circle} +{% + \my@background + \global\let\my@background=\my@background@normal +} + +%% -------------------------- title page ----------------------------- + +\defbeamertemplate{title page}{circle}{% + \nointerlineskip\noindent + \hspace{-\beamer@leftmargin}% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[fill=fcolor,opacity=0.4] + (0,0.85\paperheight) rectangle (\paperwidth,0.95\paperheight) + (0.05\paperwidth,0.9\paperheight) circle (.25) + (0.95\paperwidth,0.9\paperheight) circle (.25); + \node[text width=0.8\paperwidth,text badly ragged] at (0.5\paperwidth,0.9\paperheight) {% + \begin{minipage}[c]{0.8\paperwidth} + \centering + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + \end{minipage} + }; + \draw[fill=fcolor,opacity=0.4] + (0,0.3\paperheight) rectangle (\paperwidth,0.8\paperheight) + (0.05\paperwidth,0.8\paperheight) circle (.25) + (0.05\paperwidth,0.7\paperheight) circle (.25) + (0.05\paperwidth,0.6\paperheight) circle (.25) + (0.05\paperwidth,0.5\paperheight) circle (.25) + (0.05\paperwidth,0.4\paperheight) circle (.25) + (0.05\paperwidth,0.3\paperheight) circle (.25) + (0.95\paperwidth,0.8\paperheight) circle (.25) + (0.95\paperwidth,0.7\paperheight) circle (.25) + (0.95\paperwidth,0.6\paperheight) circle (.25) + (0.95\paperwidth,0.5\paperheight) circle (.25) + (0.95\paperwidth,0.4\paperheight) circle (.25) + (0.95\paperwidth,0.3\paperheight) circle (.25); + \node[text width=0.8\paperwidth,text badly ragged] at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{0.8\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \draw[fill=fcolor,opacity=0.4] + (0,0.05\paperheight) rectangle (\paperwidth,0.25\paperheight) + (0.05\paperwidth,0.2\paperheight) circle (.25) + (0.05\paperwidth,0.1\paperheight) circle (.25) + (0.95\paperwidth,0.2\paperheight) circle (.25) + (0.95\paperwidth,0.1\paperheight) circle (.25); + \node[text width=0.8\paperwidth,text badly ragged] at (0.5\paperwidth,0.15\paperheight) {% + \begin{minipage}[c]{0.8\paperwidth} + \centering + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\ + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \end{minipage} + }; + \end{tikzpicture} +} + +%% ----------------------- section and subsection -------------------- + +\def\sectionintocskip{0.5em} +\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip\sectionintocskip}{}{} + +% create new template for section +\defbeamertemplate{section}{simple}{% + \insertsectionnumber.\hspace*{1ex}\insertsection% +} + +\defbeamertemplate{at begin section}{normal}{% + \global\let\my@background=\my@background@section + \frame{\sectionpage} +} +\defbeamertemplate{at begin section}{plain}{% + \global\let\my@background=\my@background@section + \frame[plain]{\sectionpage} +} +\AtBeginSection[]{\usebeamertemplate{at begin section}} + +\defbeamertemplate{section page}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{section title}% + \usebeamerfont{section title} + \usebeamertemplate{section}% + \end{beamercolorbox} +} + +\defbeamertemplate{section page}{circle}{% + \nointerlineskip\noindent + \hspace{-\beamer@leftmargin}% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[fill=fcolor,opacity=0.4] + (0,0.25\paperheight) rectangle (\paperwidth,0.75\paperheight) + (1,0.7\paperheight) circle (.25) + (1,0.6\paperheight) circle (.25) + (1,0.5\paperheight) circle (.25) + (1,0.4\paperheight) circle (.25) + (1,0.3\paperheight) circle (.25); + \node[text width=0.8\paperwidth,right,text badly ragged] at (0.15\paperwidth,0.5\paperheight) {% + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide]% + }; + \end{tikzpicture} +} + +% create new template for subsection +\defbeamertemplate{subsection}{simple}{% + \insertsectionnumber.\insertsubsectionnumber\hspace*{2ex}\insertsubsection% +} + +\defbeamertemplate{at begin subsection}{normal}{% + \global\let\my@background=\my@background@subsection + \frame{\subsectionpage} +} +\defbeamertemplate{at begin subsection}{plain}{% + \global\let\my@background=\my@background@subsection + \frame[plain]{\subsectionpage} +} +\AtBeginSubsection[]{\usebeamertemplate{at begin subsection}} + +\defbeamertemplate{subsection page}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{subsection title}% + \usebeamerfont{subsection title}% + \usebeamertemplate{subsection}% + \end{beamercolorbox}% +} + +\defbeamertemplate{subsection page}{circle}{% + \nointerlineskip\noindent + \hspace{-\beamer@leftmargin}% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[fill=fcolor,opacity=0.4] + (0,0.25\paperheight) rectangle (\paperwidth,0.75\paperheight) + (1,0.7\paperheight) circle (.23) + (1,0.6\paperheight) circle (.23) + (1,0.5\paperheight) circle (.23) + (1,0.4\paperheight) circle (.23) + (1,0.3\paperheight) circle (.23); + \node[text width=0.8\paperwidth,right,text badly ragged] at (0.15\paperwidth,0.5\paperheight) {% + \begin{minipage}[c]{0.8\paperwidth} + \tableofcontents[sectionstyle=hide,subsectionstyle=show/shaded/hide]% + \end{minipage} + }; + \end{tikzpicture} +} + +%% ---------------------- headline and footline ---------------------- + +\defbeamertemplate{footline left}{title}{% + \insertshorttitle +} + +\defbeamertemplate{footline center}{author}{% + \insertshortauthor +} + +\defbeamertemplate{footline right}{institute}{% + \insertshortinstitute +} + +% make \footheight = 0pt +\patchcmd{\beamer@calculateheadfoot}{\advance\footheight by 4pt}{}{}{} + +\defbeamertemplate{footline}{simple}{% + \smash{\raisebox{1ex}{\begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline}% + \kern0.03\paperwidth + \usebeamerfont{footline}% + \usebeamertemplate{footline left}% + \hspace{0pt plus 1 filll}% + \usebeamertemplate{footline center}% + \hspace{0pt plus 1 filll}% + \usebeamertemplate{footline right}% + \kern0.03\paperwidth + \end{beamercolorbox}}}% +} + +%% ------------------------- frame title ----------------------------- + +\defbeamertemplate{frametitle}{gauss}{% + \nointerlineskip\vskip0.05\paperheight\vskip0.4pt% + \usebeamerfont{frametitle}\usebeamercolor[fg]{frametitle}% + \rule[-1ex]{0pt}{3.25ex}\insertframetitle + \ifx\insertframesubtitle\@empty\else\hfill + \usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}% + \insertframesubtitle + \fi + \par\nointerlineskip\usebeamercolor[fg]{separator line}\rule{\textwidth}{0.4pt}% +} + +%% ------------------- block and theorem ----------------------------- + +\newcommand{\my@block@begin}[1][]{% + \par\medskip + \begin{beamercolorbox}[colsep=0.75ex]{block title#1} + \usebeamerfont*{block title#1}\insertblocktitle% + \end{beamercolorbox}% + {\parskip0pt\par}% + \nointerlineskip + \usebeamerfont{block body#1}% + \begin{beamercolorbox}[colsep=.75ex,vmode]{block body#1}% + \ifbeamercolorempty[bg]{block body#1}{\vskip-.25ex}{\vskip-.75ex}\vbox{}% +} + +\newcommand{\my@block@end}{\end{beamercolorbox}\smallskip} + +\defbeamertemplate{block begin}{gauss}{\my@block@begin} + +\defbeamertemplate{block end}{gauss}{\my@block@end} + +\defbeamertemplate{block example begin}{gauss}{\my@block@begin[ example]} + +\defbeamertemplate{block example end}{gauss}{\my@block@end} + +\defbeamertemplate{block alerted begin}{gauss}{\my@block@begin[ alerted]} + +\defbeamertemplate{block alerted end}{gauss}{\my@block@end} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\large} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\large} +\setbeamerfont{section in toc}{size=\large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +\setlength{\parskip}{5pt plus 1pt minus 1pt} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red69}{Hsb}{0,0.6,0.9} +\definecolor{red4x}{Hsb}{0,0.4,1.0} +\definecolor{yellow69}{Hsb}{60,0.6,0.9} +\definecolor{yellowxx}{Hsb}{60,1.0,1.0} +\definecolor{green33}{Hsb}{120,0.3,0.3} +\definecolor{green39}{Hsb}{120,0.3,0.9} +\definecolor{green69}{Hsb}{120,0.6,0.9} +\definecolor{cyan69}{Hsb}{180,0.6,0.9} +\definecolor{magenta69}{Hsb}{300,0.6,0.9} +\definecolor{magenta4x}{Hsb}{300,0.4,1.0} + +\colorlet{text1}{white} +\colorlet{back1}{green33} +\colorlet{accent1}{yellow69} +\colorlet{accent2}{green69} +\colorlet{accent3}{red4x} +\colorlet{accent4}{cyan69} +\colorlet{accent5}{magenta4x} +\colorlet{filler1}{accent1!50!back1} +\colorlet{filler2}{accent2!50!back1} +\colorlet{filler3}{accent3!50!back1} +\colorlet{filler4}{accent4!50!back1} +\colorlet{filler5}{accent5!50!back1} +\colorlet{tcolor}{green33!95!white} +\colorlet{dcolor}{white} +\colorlet{fcolor}{gray} + +\setbeamercolor{background canvas}{bg=green33,fg=white} +\setbeamercolor{normal text}{bg=green33,fg=white} +\setbeamercolor{structure}{fg=yellowxx} +\setbeamercolor{local structure}{fg=accent2} +\setbeamercolor{footline}{bg=,fg=white} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{parent=normal text} +\setbeamercolor{author}{fg=white} +\setbeamercolor{institute}{fg=white} +\setbeamercolor{date}{fg=white} +\setbeamercolor{section in toc}{parent=title} +\setbeamercolor{subsection in toc}{parent=title} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{subsection in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{parent=title} +\setbeamercolor{framesubtitle}{parent=subtitle} +\setbeamercolor{separator line}{fg=white} +\setbeamercolor{block title}{fg=accent1,bg=darkgray} +\setbeamercolor{block body}{bg=gray} +\setbeamercolor{block title example}{parent=block title,fg=accent2} +\setbeamercolor{block body example}{parent=block body} +\setbeamercolor{block title alerted}{parent=block title,fg=accent3} +\setbeamercolor{block body alerted}{parent=block body} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[awesome] +\setbeamertemplate{background texture}[awesome] +\setbeamertemplate{background}[circle] +\setbeamertemplate{footline}[simple] +\setbeamertemplate{footline left}[title] +\setbeamertemplate{footline center}[author] +\setbeamertemplate{footline right}[institute] +\setbeamertemplate{title page}[circle] +\setbeamertemplate{at begin section}[plain] +\setbeamertemplate{at begin subsection}[plain] +\setbeamertemplate{section page}[circle] +\setbeamertemplate{subsection page}[circle] +\setbeamertemplate{block begin}[gauss] +\setbeamertemplate{block end}[gauss] +\setbeamertemplate{block example begin}[gauss] +\setbeamertemplate{block example end}[gauss] +\setbeamertemplate{block alerted begin}[gauss] +\setbeamertemplate{block alerted end}[gauss] +\setbeamertemplate{theorem begin}[default] +\setbeamertemplate{theorem end}[default] +\setbeamertemplate{proof begin}[default] +\setbeamertemplate{proof end}[default] +\setbeamertemplate{frametitle}[gauss] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{section}[simple] +\setbeamertemplate{subsection}[simple] +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{subsection in toc}[subsections numbered] +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{subsection in toc shaded}[default][100] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background texture}{} + \colorlet{accent1}{accent1!50!black} + \colorlet{accent2}{accent2!50!black} + \colorlet{accent3}{accent3!50!black} + \colorlet{accent4}{accent4!50!black} + \colorlet{accent5}{accent5!50!black} + \colorlet{dcolor}{darkgray} + \colorlet{fcolor}{white} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{title}{fg=teal} + \setbeamercolor{subtitle}{fg=gray} + \setbeamercolor{author}{fg=black} + \setbeamercolor{institute}{fg=gray} + \setbeamercolor{date}{fg=black} + \setbeamercolor{section in toc}{fg=teal!90!gray} + \setbeamercolor{subsection in toc}{fg=teal!80!gray} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} + \setbeamercolor{frametitle}{fg=teal!70!gray,bg=white} + \setbeamercolor{separator line}{fg=darkgray} + \setbeamercolor{footline}{bg=white,fg=black} + \setbeamercolor{block title}{bg=} + \setbeamercolor{block body}{bg=} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.pdf new file mode 100644 index 0000000000..cabda048fc Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.tex new file mode 100644 index 0000000000..25db3c6e76 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/gauss/demo-gauss.tex @@ -0,0 +1,175 @@ +% -*- coding: utf-8 -*- + +\documentclass[14pt,xcolor={rgb}]{beamer} + +\usetheme{gauss} + +% remove these two lines to hide footlines in (sub)section pages +\setbeamertemplate{at begin section}[normal] +\setbeamertemplate{at begin subsection}[normal] + +\usepackage{arev} + +\begin{document} + +\title{Beamer Theme Gauss} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/beamerthemelagrange.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/beamerthemelagrange.sty new file mode 100644 index 0000000000..41440e174f --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/beamerthemelagrange.sty @@ -0,0 +1,379 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemelagrange}[2024-01-19 v2024A Beamer Theme Lagrange] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,etoolbox,manfnt} +\usetikzlibrary{calc} + +\mode + +\@ifclasswith{beamer}{aspectratio=169} + {\setbeamersize{text margin left=5mm,text margin right=5mm}} + {\setbeamersize{text margin left=6mm,text margin right=6mm}} + +%% ----------------- background canvas and background ---------------- + +\newcommand{\my@background@canvas@vector@narrow}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[line width=4mm, rounded corners=4mm, corner1, + shading=axis,top color=corner2!80,bottom color=corner2!80,middle color=white,shading angle=-45] + (0,0) rectangle (\paperwidth,\paperheight); + \draw[line width=3.5mm, rounded corners=3.8mm, corner2] + (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=lightgray!50, step=4mm, xshift=6mm, yshift=6mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(12mm,12mm)$); + \end{tikzpicture} +} + +\newcommand{\my@background@canvas@vector@wide}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[line width=4mm, rounded corners=4mm, corner1, + shading=axis,top color=corner2!80,bottom color=corner2!80,middle color=white,shading angle=-45] + (0,0) rectangle (\paperwidth,\paperheight); + \draw[line width=3.5mm, rounded corners=3.8mm, corner2] + (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=lightgray!50, step=5mm, xshift=5mm, yshift=5mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(10mm,10mm)$); + \end{tikzpicture} +} + +\newcommand{\my@background@canvas@raster@narrow}{% + \includegraphics[width=\paperwidth,height=\paperheight]{backgroundn1}% + \includegraphics[width=\paperwidth,height=\paperheight]{backgroundn2}% +} + +\newcommand{\my@background@canvas@raster@wide}{% + \includegraphics[width=\paperwidth,height=\paperheight]{backgroundw1}% + \includegraphics[width=\paperwidth,height=\paperheight]{backgroundw2}% +} + +\@ifclasswith{beamer}{aspectratio=169}{% + \let\my@background@canvas@vector=\my@background@canvas@vector@wide + \let\my@background@canvas@raster=\my@background@canvas@raster@wide +}{% + \let\my@background@canvas@vector=\my@background@canvas@vector@narrow + \let\my@background@canvas@raster=\my@background@canvas@raster@narrow +} + +\defbeamertemplate{background canvas}{vector}{% + \my@background@canvas@vector +} + +\defbeamertemplate{background canvas}{raster}{% + \my@background@canvas@raster +} + +\defbeamertemplate{background}{logo}[1][height=0.6\paperheight]{% + \parbox[c][\paperheight][c]{\paperwidth}{\centering\includegraphics[#1]{logo}}% +} + +\@ifclasswith{beamer}{aspectratio=169}{% + \defbeamertemplate{background}{line}[1][\relax]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=accent2!50, #1, xshift=5mm, yshift=5mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(10mm,10mm)$); + %\insertbackgroundmark + \end{tikzpicture}% + } +}{ + \defbeamertemplate{background}{line}[1][\relax]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=accent2!50, #1, xshift=6mm, yshift=6mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(12mm,12mm)$); + %\insertbackgroundmark + \end{tikzpicture}% + } +} + +\@ifclasswith{beamer}{aspectratio=169}{% + \defbeamertemplate{background}{lattice}[1][1mm]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=accent3!50, step=2.5mm, xshift=5mm, yshift=5mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(10mm,10mm)$); + %\insertbackgroundmark + \end{tikzpicture}% + } +}{ + \defbeamertemplate{background}{lattice}[1][1mm]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[draw=accent3!50, step=2mm, xshift=6mm, yshift=6mm, opacity=0.5] + (0,0) grid ($(\paperwidth,\paperheight)-(12mm,12mm)$); + %\insertbackgroundmark + \end{tikzpicture}% + } +} + +%% -------------------------- title page ----------------------------- + +% add \occasion command +\newcommand{\occasion}[1]{\def\insertoccasion{#1}} +\occasion{} + +\newlength{\my@title@split@left} +\newlength{\my@title@split@right} +\@ifclasswith{beamer}{aspectratio=169}{ + \setlength{\my@title@split@left}{0.618\textwidth} + \setlength{\my@title@split@right}{0.382\textwidth} +}{ + \setlength{\my@title@split@left}{0.54\textwidth} + \setlength{\my@title@split@right}{0.46\textwidth} +} + + +\defbeamertemplate{title page}{split}{% + \begin{minipage}[c][0.9\textheight]{\my@title@split@left} + \linespread{1}\raggedright + \vfill + \ifx\insertoccasion\@empty\else + \usebeamerfont*{occasion}\usebeamercolor[fg]{occasion}\insertoccasion\\[3pt]% + \fi + \usebeamerfont*{date}\usebeamercolor[fg]{date}\insertdate + \vspace{4pt}{\color{gray}\hrule} + \vfill\vfill + \usebeamerfont*{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont*{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle + \fi% + \vfill\vfill{\color{gray}\hrule}\vspace{4pt} + \usebeamerfont*{author}\usebeamercolor[fg]{author}\insertauthor\\[3pt]% + \usebeamerfont*{institute}\usebeamercolor[fg]{institute}\insertinstitute + \vfill\vfill + \end{minipage}% + \begin{minipage}[c][0.9\textheight]{\my@title@split@right} + \hfill + \IfFileExists{titlepage.png}{% + \includegraphics[height=0.9\textheight]{titlepage}% + }{% + \begin{tikzpicture}[draw=gray,text=darkgray] + \draw[use as bounding box] (0,0) rectangle (0.5\paperheight,0.7\paperheight); + \draw (0,0) -- (0.5\paperheight,0.7\paperheight); + \draw (0,0.7\paperheight) -- (0.5\paperheight,0); + \node at (0.25\paperheight,0.35\paperheight) {titlepage.png}; + \end{tikzpicture}% + }% + \end{minipage} +} + +%% ----------------------- section and subsection -------------------- + +\def\sectionintochideskip{10pt} +\def\sectionintocshowskip{6pt} +\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip\sectionintochideskip}{}{} +\patchcmd{\beamer@sectionintoc}{\vfill}{\vskip\sectionintocshowskip}{}{} + +\AtBeginSection[]{% + \begin{frame} + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide] + \end{frame} +} + +\defbeamertemplate{section in toc}{numbered}{% + \leavevmode\leftskip=8mm\inserttocsectionnumber.\hspace{0.6em}\inserttocsection\par +} +\defbeamertemplate{section in toc}{dbend}{% + \leavevmode\leftskip=8mm{\color{accent3}\tiny\textdbend\scriptsize\inserttocsectionnumber}% + \hspace{0.6em}\inserttocsection\par +} + +\AtBeginSubsection[]{% + \begin{frame} + \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide] + \end{frame} +} + +\defbeamertemplate{subsection in toc}{numbered}{% + \vspace{6pt}\leavevmode\leftskip=12mm\inserttocsectionnumber.\inserttocsubsectionnumber + \hspace{0.8em}\inserttocsubsection\par +} +\defbeamertemplate{subsection in toc}{dbend}{% + \vspace{6pt}\leavevmode\leftskip=12mm{\color{accent3}\tiny\textdbend + \scriptsize\inserttocsectionnumber.\inserttocsubsectionnumber}% + \hspace{0.8em}\inserttocsubsection\par +} + +%% ---------------- headline, footline and textheight ---------------- + +% make \textheight = \paperheight - 12mm +\patchcmd{\beamer@calculateheadfoot}{\advance\footheight by 4pt}{}{}{} + +% modify plain frames +\def\beamer@frametemplate@plain{} + +\@ifclasswith{beamer}{aspectratio=169}{ + \setbeamertemplate{headline}{\vspace{5mm}} + \setbeamertemplate{footline}{\vspace{5mm}} +}{ + \setbeamertemplate{headline}{\vspace{6mm}} + \setbeamertemplate{footline}{\vspace{6mm}} +} + +% patch frames with t option +\patchcmd{\KV@beamerframe@t} + {\beamer@frametopskip=.2cm plus .5\paperheight} + {\beamer@frametopskip=0mm} + {}{} + +%% ------------------------- frame title ----------------------------- + +\defbeamertemplate{frametitle}{simple}[1][]{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin,#1]{frametitle} + \usebeamerfont{frametitle}% + \rule[-0.45em]{0pt}{1.5em}\insertframetitle\usebeamertemplate{frame number}% + \rule[-0.45em]{0pt}{1.5em}\par + \end{beamercolorbox} +} + +\defbeamertemplate{frame number}{simple}{% + \usebeamercolor{normal text}% + \hfill{\color{fg!60!bg}\insertframenumber}% +} + +%% ------------------- block and theorem ----------------------------- + +% allow it to be modified by user +\def\myinserttheoremaddition{\inserttheoremaddition} + +\defbeamertemplate{theorem begin}{simple} +{% + \upshape%\bfseries\inserttheoremheadfont + {\usebeamercolor[fg]{theoremname}% + \inserttheoremname\inserttheoremnumber + \ifx\inserttheoremaddition\@empty\else + \ \usebeamercolor[fg]{local structure}(\myinserttheoremaddition)% + \fi% + %\inserttheorempunctuation + }% + \quad\normalfont +} +\defbeamertemplate{theorem end}{simple}{\par} + +\defbeamertemplate{proof begin}{simple} +{% + %\bfseries + {\usebeamercolor[fg]{proofname}\insertproofname}% + \quad\normalfont +} +\defbeamertemplate{proof end}{simple}{\par} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE,series=\bfseries,family=\rmfamily} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{occasion}{size=\normalsize} +\setbeamerfont{date}{size=\normalsize} +\setbeamerfont{author}{size=\normalsize} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{section in toc}{size=\Large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{redx5}{Hsb}{0,1,0.5} +\definecolor{yellow86}{Hsb}{60,0.8,0.6} +\definecolor{greenx3}{Hsb}{120,1,0.3} +\definecolor{azurexx}{Hsb}{210,1,0.5} +\definecolor{blue29}{Hsb}{240,0.2,0.9} +\definecolor{magenta88}{Hsb}{300,0.8,0.8} + +\colorlet{text1}{black} +\colorlet{back1}{white} +\colorlet{accent1}{azurexx} +\colorlet{accent2}{greenx3} +\colorlet{accent3}{redx5} +\colorlet{accent4}{yellow86} +\colorlet{accent5}{magenta88} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{filler4}{accent4!40!back1} +\colorlet{filler5}{accent5!40!back1} +\colorlet{gray1}{black!20} +\colorlet{gray2}{black!35} +\colorlet{gray3}{black!50} +\colorlet{gray4}{black!65} +\colorlet{gray5}{black!80} +\colorlet{corner1}{white} +\colorlet{corner2}{blue29} + +\setbeamercolor{normal text}{bg=white,fg=black} +\setbeamercolor{structure}{fg=accent3} +\setbeamercolor{local structure}{fg=accent2} +\setbeamercolor{footline}{bg=,fg=black} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{fg=black} +\setbeamercolor{occasion}{fg=accent1} +\setbeamercolor{date}{fg=black} +\setbeamercolor{author}{fg=accent2} +\setbeamercolor{institute}{fg=black} +\setbeamercolor{section in toc}{parent=occasion} +\setbeamercolor{subsection in toc}{parent=author} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{subsection in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{parent=title} +\setbeamercolor{theoremname}{parent=occasion} +\setbeamercolor{proofname}{parent=occasion} +\setbeamercolor{block title}{fg=white,bg=accent1} +\setbeamercolor{block body}{bg=lightgray} +\setbeamercolor{block title example}{fg=white,bg=accent2} +\setbeamercolor{block body example}{bg=lightgray} +\setbeamercolor{block title alerted}{fg=white,bg=accent3} +\setbeamercolor{block body alerted}{bg=lightgray} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[vector] +\setbeamertemplate{title page}[split] +\setbeamertemplate{theorem begin}[simple] +\setbeamertemplate{theorem end}[simple] +\setbeamertemplate{proof begin}[simple] +\setbeamertemplate{proof end}[simple] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{frame number}[simple] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{section in toc}[dbend] +\setbeamertemplate{subsection in toc}[dbend] +\setbeamertemplate{subsubsection in toc}{} +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{subsection in toc shaded}[default][100] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \colorlet{corner1}{lightgray} + \colorlet{corner2}{white} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.pdf new file mode 100644 index 0000000000..46628de736 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.tex new file mode 100644 index 0000000000..59f793bcc4 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/lagrange/demo-lagrange.tex @@ -0,0 +1,71 @@ +% -*- coding: utf-8 -*- + +\documentclass[11pt,xcolor={rgb}]{beamer} + +\usetheme{lagrange} + +\usepackage{arev} + +\usepackage{listings} + +\lstset{ + basicstyle=\ttfamily\color{accent2}, + frame=single, +} + +\begin{document} + +\title{Beamer Theme Lagrange} +\author{Author Name} +\institute{Institute Name} +\occasion{Some Conference} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Introduction} + +\begin{frame} +\frametitle{Introduction} +Beamer theme Lagrange is inspired by these two themes +\begin{itemize} + \item Pdfscreen theme Overlay4 + \item Keynote theme Drafting +\end{itemize} +\end{frame} + +\section{First Example} + +\begin{frame}[fragile=singleslide] +\frametitle{First Example} +The following is a simple example +\begin{lstlisting} +\documentclass[xcolor={rgb}]{beamer} + +\usetheme{lagrange} + +\begin{document} + +\begin{frame} + Hello Beamer! +\end{frame} + +\end{document} +\end{lstlisting} +Note that you \textcolor{accent3}{need to} use \lstinline!xcolor={rgb}! option for this theme. +\end{frame} + +\section{Customization} + +\begin{frame}[fragile=singleslide] +\frametitle{Customization} +To change vertical spaces between lines in TOC pages, +you could redefine these two commands: +\begin{lstlisting} +\renewcommand{\sectionintochideskip}{10pt} +\renewcommand{\sectionintocshowskip}{6pt} +\end{lstlisting} +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/beamerthememobius.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/beamerthememobius.sty new file mode 100644 index 0000000000..7faf5b36c5 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/beamerthememobius.sty @@ -0,0 +1,291 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthememobius}[2024-01-19 v2024A Beamer Theme Mobius] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,adjustbox} +\usetikzlibrary{decorations.pathmorphing,calc} + +\mode + +\setbeamersize{text margin left=8mm,text margin right=8mm} + +%% ----------------- background canvas and background ---------------- + +\defbeamertemplate{background}{mobius}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \foreach \i in {0,16,...,128} \foreach \j in {0,16,...,96} { + \path[draw=purple94!90!black] (\i mm,\j mm) circle (16mm); + } + \end{tikzpicture}% +} + +% need "text badly ragged" option for correct space skips +% see http://tex.stackexchange.com/a/132748/8956 +\gdef\my@background@title{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[fill=fcolor,opacity=0.4] + (0,0.3\paperheight) rectangle (\paperwidth,0.8\paperheight); + \path[draw=dcolor,thick] (0,0.3\paperheight) -- (\paperwidth,0.3\paperheight) + (0,0.8\paperheight) -- (\paperwidth,0.8\paperheight); + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c][0.6\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \path[fill=fcolor,draw=dcolor,thick,opacity=0.4] + (0.15\paperwidth,0) -- (0.5\paperwidth,0.35\paperheight) -- (0.85\paperwidth,0); + \node[text width=0.9\paperwidth,text badly ragged] at (0.5\paperwidth,0.15\paperheight) {% + \begin{minipage}[c][0.25\paperheight]{0.9\paperwidth} + \centering + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\[3pt] + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute\\[3pt] + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + \end{minipage} + }; + \end{tikzpicture} +} + +\gdef\my@background@section{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[fill=fcolor,thick,opacity=0.4] + (0,0.35\paperheight) rectangle (\paperwidth,0.75\paperheight); + \path[draw=dcolor,thick] (0,0.35\paperheight) -- (\paperwidth,0.35\paperheight) + (0,0.75\paperheight) -- (\paperwidth,0.75\paperheight); + \node[text width=\textwidth,text badly ragged] at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{\textwidth} + \usebeamertemplate{section page content}% + \end{minipage} + }; + \end{tikzpicture} +} + +%% -------------------------- title page ----------------------------- + +\defbeamertemplate{title page}{mobius}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@title + \end{adjustbox}% +} + +%% ----------------------- section and subsection -------------------- + +% create new template for section +\defbeamertemplate{section}{simple}{% + \insertsectionnumber.\hspace*{1ex}\insertsection% +} + +\AtBeginSection[]{\begin{frame}[plain]{\sectionpage}\end{frame}} + +\defbeamertemplate{section page}{mobius}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \my@background@section + \end{adjustbox}% +} + +\defbeamertemplate{section page content}{simple}{ + \begin{beamercolorbox}[wd=\textwidth,center]{section title}% + \usebeamerfont{section title} + \usebeamertemplate{section}% + \end{beamercolorbox} +} + +%% ---------------------- headline and footline ---------------------- + +\newif\ifmy@subsection \my@subsectionfalse + +\newcommand{\my@sectionentry}[5]{% + \hfill + \ifnum\c@section=#1% + \usebeamercolor{footline highlight}% + \else% + \usebeamercolor{footline}% + \fi% + \hyperlink{Navigation#3}{% + \colorbox{bg}{% + \hspace{0.2em}\rule[-1ex]{0pt}{3.25ex}\color{fg}#2\hspace{0.2em}% + }% + }% + \let\slideentry=\my@slideentry +} + +\newcommand{\my@subsectionentry}[5]{\my@subsectiontrue} + +\newcommand{\my@slideentry}[6]{% + \ifmy@subsection + \usebeamercolor{footline}% + \def\my@box{$\circ$}% + \ifnum\c@section=#1% + \usebeamercolor{footline highlight}% + \ifnum\c@subsection=#2% + \def\my@box{$\bullet$}% + \fi + \fi + \beamer@link(#4){% + \colorbox{bg}{% + \rule[-1ex]{0pt}{3.25ex}\hspace{0.1em}\color{fg}\my@box\hspace{0.1em}% + }% + }% + \my@subsectionfalse + \fi +} + +\defbeamertemplate{footline}{mobius}{% + % default height is 0.4pt, which is ignored by adobe reader, so we increase it by 0.2pt + {\color{dcolor}\hrule height 0.6pt}% + %\pgfsetfillopacity{0.6}% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline}% + \usebeamerfont{footline}% + \kern\beamer@leftmargin + \setlength{\fboxsep}{0pt}% + \let\sectionentry=\my@sectionentry + \let\beamer@subsectionentry=\my@subsectionentry + \hskip 0pt plus -1fill\dohead + \hskip 0pt plus 9fill\relax + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber}% + \kern\beamer@rightmargin + \end{beamercolorbox}% +} + +%% ------------------------- frame title ----------------------------- + +\defbeamertemplate{frametitle}{simple}[1][]{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin,#1]{frametitle} + \usebeamerfont{frametitle}% + \rule[-3.6mm]{0pt}{12mm}\insertframetitle\rule[-3.6mm]{0pt}{12mm}\par + \end{beamercolorbox} +} + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\large} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\normalsize} +\setbeamerfont{section in toc}{size=\Large} +\setbeamerfont{footline}{size=\scriptsize} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%\setlength{\parskip}{5pt plus 1pt minus 1pt} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red69}{Hsb}{0,0.6,0.9} +\definecolor{yellow69}{Hsb}{60,0.6,0.9} +\definecolor{yellow99}{Hsb}{60,0.9,0.9} +\definecolor{green69}{Hsb}{120,0.6,0.9} +\definecolor{azure53}{Hsb}{210,0.5,0.3} +\definecolor{blue77}{Hsb}{240,0.7,0.7} +\definecolor{blue88}{Hsb}{240,0.8,0.8} +\definecolor{blue97}{Hsb}{240,0.9,0.7} +\definecolor{purple94}{Hsb}{330,0.9,0.4} +\definecolor{purple63}{Hsb}{320,0.6,0.3} + +\colorlet{text1}{white} +\colorlet{back1}{blue77} +\colorlet{accent1}{yellow69} +\colorlet{accent2}{green69} +\colorlet{accent3}{black} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{dcolor}{white} +\colorlet{fcolor}{azure53} + +\setbeamercolor{normal text}{bg=purple94,fg=white} +\setbeamercolor{structure}{fg=yellow99} +\setbeamercolor{local structure}{fg=accent2} +\setbeamercolor{footline}{bg=purple63,fg=white} +\setbeamercolor{footline highlight}{parent=footline,bg=filler2} +\setbeamercolor{navigation symbols}{bg=purple94} +\setbeamercolor{navigation symbols dimmed}{fg=purple94} +\setbeamercolor{title}{use=structure,fg=structure.fg} +\setbeamercolor{subtitle}{fg=white} +\setbeamercolor{author}{use=local structure,fg=local structure.fg} +\setbeamercolor{institute}{fg=white} +\setbeamercolor{date}{fg=white} +\setbeamercolor{section in toc}{parent=title} +\setbeamercolor{section in toc shaded}{parent=normal text} +\setbeamercolor{frametitle}{parent=title} +\setbeamercolor{block title}{fg=accent1,bg=back1!50!gray} +\setbeamercolor{block body}{bg=back1!50!lightgray} +\setbeamercolor{block title example}{fg=accent2,bg=back1!50!gray} +\setbeamercolor{block body example}{bg=back1!50!lightgray} +\setbeamercolor{block title alerted}{fg=accent3,bg=back1!50!gray} +\setbeamercolor{block body alerted}{bg=back1!50!lightgray} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[default] +\setbeamertemplate{background}[mobius] +\setbeamertemplate{title page}[mobius] +\setbeamertemplate{section page}[mobius] +\setbeamertemplate{section page content}[simple] +\setbeamertemplate{section}[simple] +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{section in toc shaded}[default][100] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[mobius] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background}{} + \colorlet{text1}{black} + \colorlet{back1}{white} + \colorlet{accent1}{purple94} + \colorlet{accent2}{teal!70!black} + \colorlet{accent3}{blue77} + \colorlet{dcolor}{gray} + \colorlet{fcolor}{white} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{structure}{fg=purple94} + \setbeamercolor{title}{fg=purple94} + \setbeamercolor{subtitle}{fg=black} + \setbeamercolor{author}{fg=accent2} + \setbeamercolor{institute}{fg=black} + \setbeamercolor{date}{fg=black} + \setbeamercolor{section in toc}{fg=purple94} + \setbeamercolor{section in toc shaded}{fg=lightgray} + \setbeamercolor{section title}{fg=purple94} + \setbeamercolor{footline}{bg=white,fg=black} + \setbeamercolor{footline highlight}{fg=accent2,bg=white} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.pdf new file mode 100644 index 0000000000..5260cfa1c6 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.tex new file mode 100644 index 0000000000..ea5f47bac7 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/mobius/demo-mobius.tex @@ -0,0 +1,171 @@ +% -*- coding: utf-8 -*- + +\documentclass[12pt,xcolor={rgb}]{beamer} + +\usetheme{mobius} + +\usepackage{arev} + +\begin{document} + +\title{Beamer Theme Mobius} +\author{Author Name} +\institute{Institute Name} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/beamerthemeriemann.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/beamerthemeriemann.sty new file mode 100644 index 0000000000..82f2fed151 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/beamerthemeriemann.sty @@ -0,0 +1,945 @@ +% -*- coding: utf-8 -*- +% ---------------------------------------------------------------------------- +% Author: Jianrui Lyu +% Website: https://github.com/lvjr/concrete +% License: The LaTeX Project Public License 1.3c +% ---------------------------------------------------------------------------- + +\ProvidesPackage{beamerthemeriemann}[2024-01-19 v2024A Beamer Theme Riemann] + +\makeatletter + +% compatible with old versions of beamer +\providecommand{\beamer@endinputifotherversion}[1]{} + +\RequirePackage{tikz,etoolbox,adjustbox,calc} +\usetikzlibrary{calc} + +\mode + +\setbeamersize{text margin left=8mm,text margin right=8mm} + +%% ----------------- background canvas and background ---------------- + +\newif\ifbackgroundmarkleft +\newif\ifbackgroundmarkright + +\newcommand{\insertbackgroundmark}{ + \ifbackgroundmarkleft + \foreach \x in {1,2,...,11} \draw[line width=0.2mm,markcolor] + (0,\x*\paperheight/12) ++(0.1mm,-0.5mm) rectangle +(1mm,1mm); + \fi + \ifbackgroundmarkright + \foreach \x in {1,2,...,11} \draw[line width=0.2mm,markcolor] + (\paperwidth,\x*\paperheight/12) ++(-1.1mm,-0.5mm) rectangle +(1mm,1mm); + \fi +} + +\defbeamertemplate{background}{line}[1][]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[xstep=\paperwidth,ystep=1mm,color=tcolor,#1] (0,0) grid (\paperwidth,\paperheight); + \insertbackgroundmark + \end{tikzpicture}% +} + +\defbeamertemplate{background}{linear}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[pattern=horizontal lines, pattern color=tcolor] + (0,0) rectangle (\paperwidth,\paperheight); + \insertbackgroundmark + \end{tikzpicture}% +} + +\defbeamertemplate{background}{lattice}[1][1mm]{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \draw[step=#1,color=tcolor,semithick] (0,0) grid (\paperwidth,\paperheight); + \insertbackgroundmark + \end{tikzpicture}% +} + +\defbeamertemplate{background}{empty}{ + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \insertbackgroundmark + \end{tikzpicture}% +} + +%% -------------------------- title page ----------------------------- + +% add \occasion command +\newcommand{\occasion}[1]{\def\insertoccasion{#1}} +\occasion{} + +\defbeamertemplate{title page}{banner}{% + \nointerlineskip + \begin{adjustbox}{width=\paperwidth,center}% + \usebeamertemplate{title page content}% + \end{adjustbox}% +} + +% need "text badly ragged" option for correct space skips +% see http://tex.stackexchange.com/a/132748/8956 +\defbeamertemplate{title page content}{hexagon}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.8] + (0,0) rectangle (\paperwidth,\paperheight); + \node[text width=0.86\paperwidth,text badly ragged,inner ysep=1.5cm] (main) at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{0.86\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[rectangle,inner sep=0pt,minimum size=3mm,fill=dcolor,right] (a) at (0,0.55\paperheight) {}; + \node[rectangle,inner sep=0pt,minimum size=3mm,fill=dcolor,left] (b) at (\paperwidth,0.55\paperheight) {}; + \ifx\insertoccasion\@empty + \draw[thick,dcolor] (a.north east) -- (main.north west) + -- (main.north east) -- (b.north west); + \else + \node[text badly ragged] (occasion) at (main.north west -| 0.5\paperwidth,\paperheight) { + \usebeamerfont{occasion}\usebeamercolor[fg]{occasion}\insertoccasion + }; + \draw[thick,dcolor] (a.north east) -- (main.north west) -- (occasion.west) + (b.north west) -- (main.north east) -- (occasion.east); + \fi + \node[text badly ragged] (date) at (main.south west -| 0.5\paperwidth,0) { + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + }; + \draw[thick,dcolor] (a.south east) -- (main.south west) -- (date.west) + (b.south west) -- (main.south east) -- (date.east); + \node[below=4mm,text width=0.9\paperwidth,inner xsep=0.05\paperwidth, + text badly ragged,fill=white,draw=dcolor] at (date.south) {% + \begin{minipage}[c]{0.9\paperwidth} + \centering + \textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \hspace{1em}\textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{minipage} + }; + \end{tikzpicture} +} + +\defbeamertemplate{title page content}{rectangle}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.8] + (0,0) rectangle (\paperwidth,\paperheight); + \node[text width=0.9\paperwidth,text badly ragged,inner ysep=1.5cm] (main) at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{0.9\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,below right,xshift=2pt] + (a) at (main.north west -| 0,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,below left,xshift=-2pt] + (b) at (main.north east -| \paperwidth,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,above right,xshift=2pt] + (c) at (main.south west -| 0,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,above left,xshift=-2pt] + (d) at (main.south east -| \paperwidth,0) {}; + \coordinate (mw) at (main.west -| a.west); + \coordinate (me) at (main.east -| b.east); + \draw[thick,dcolor] (a.south east) -- (a.south west) -- (a.north west) -- (a.north east) + -- ++(0,-6mm) -- ++(-3mm,0) -- (mw) + (c.north east) -- (c.north west) -- (c.south west) -- (c.south east) + -- ++(0,6mm) -- ++(-3mm,0) -- (mw) + (b.south west) -- (b.south east) -- (b.north east) -- (b.north west) + -- ++(0,-6mm) -- ++(3mm,0) -- (me) + (d.north west) -- (d.north east) -- (d.south east) -- (d.south west) + -- ++(0,6mm) -- ++(3mm,0) -- (me); + \ifx\insertoccasion\@empty + \draw[thick,dcolor] (a.south east) -- ++(3mm,0) -- ++(0,3mm) -- (main.north) + (b.south west) -- ++(-3mm,0) -- ++(0,3mm) -- (main.north); + \else + \node[text badly ragged] (occasion) at (main.north west -| 0.5\paperwidth,\paperheight) { + \usebeamerfont{occasion}\usebeamercolor[fg]{occasion}\insertoccasion + }; + \draw[thick,dcolor] (a.south east) -- ++(3mm,0) -- ++(0,3mm) -- (occasion.west) + (b.south west) -- ++(-3mm,0) -- ++(0,3mm) -- (occasion.east); + \fi + \node[text badly ragged] (date) at (main.south west -| 0.5\paperwidth,0) { + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + }; + \draw[thick,dcolor] (c.north east) -- ++(3mm,0) -- ++(0,-3mm) -- (date.west) + (d.north west) -- ++(-3mm,0) -- ++(0,-3mm) -- (date.east); + \node[below=4mm,text width=0.9\paperwidth,inner xsep=0.05\paperwidth, + text badly ragged,fill=white,draw=dcolor] (author) at (date.south) {% + \begin{minipage}[c]{0.9\paperwidth} + \centering + \textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \hspace{1em}\textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{minipage} + }; + \end{tikzpicture} +} + +\defbeamertemplate{title page content}{polygon}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.8] + (0,0) rectangle (\paperwidth,\paperheight); + \node[text width=0.82\paperwidth,text badly ragged,inner ysep=1.5cm] (main) at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{0.82\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,right,yshift=12pt] + (a) at (main.north west -| 0,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,left,yshift=12pt] + (b) at (main.north east -| \paperwidth,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,right,yshift=-12pt] + (c) at (main.south west -| 0,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=3mm,fill=dcolor,left,yshift=-12pt] + (d) at (main.south east -| \paperwidth,0) {}; + \draw[thick,dcolor] (a.south east) -- (main.west) -- (c.north east) + (b.south west) -- (main.east) -- (d.north west); + \ifx\insertoccasion\@empty + \draw[thick,dcolor] (a.south east) -- (main.north west) -- (main.north east) -- (b.south west); + \else + \node[text badly ragged] (occasion) at (main.north west -| 0.5\paperwidth,\paperheight) { + \usebeamerfont{occasion}\usebeamercolor[fg]{occasion}\insertoccasion + }; + \draw[thick,dcolor] (a.south east) -- (main.north west) -- (occasion.west) + (b.south west) -- (main.north east) -- (occasion.east); + \fi + \node[text badly ragged] (date) at (main.south west -| 0.5\paperwidth,0) { + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + }; + \draw[thick,dcolor] (c.north east) -- (main.south west) -- (date.west) + (d.north west) -- (main.south east) -- (date.east); + \node[below=4mm,text width=0.9\paperwidth,inner xsep=0.026\paperwidth, + text badly ragged,fill=white,draw=dcolor] (author) at (date.south) {% + \begin{minipage}[c]{0.9\paperwidth} + \centering + \textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \hspace{1em}\textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{minipage} + }; + \path[fill=dcolor] (author.north west) -- (author.north west -| 0,0) -- (author.west) + -- (author.south west -| 0,0) -- (author.south west) + (author.north east) -- (author.north east -| \paperwidth,0) -- (author.east) + -- (author.south east -| \paperwidth,0) -- (author.south east); + \end{tikzpicture} +} + +\defbeamertemplate{title page content}{hypotenuse}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.8] + (0,0) rectangle (\paperwidth,\paperheight); + \node[text width=0.82\paperwidth,text badly ragged,inner ysep=1.5cm] (main) at (0.5\paperwidth,0.55\paperheight) {% + \begin{minipage}[c]{0.82\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=2.7mm,fill=dcolor] (a) at (main.north west) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=2.7mm,fill=dcolor,left] (b) at (main.north -| \paperwidth,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=2.7mm,fill=dcolor,right] (c) at (main.south -| 0,0) {}; + \node[rectangle,inner sep=0pt,outer sep=0pt,minimum size=2.7mm,fill=dcolor] (d) at (main.south east) {}; + \draw[thick,dcolor] ($(a.south west)+(0.4pt,0)$) -- ($(c.north east)+(-0.4pt,0)$) + ($(b.south west)+(0.4pt,0)$) -- ($(d.north east)+(-0.4pt,0)$); + \draw[thick,dcolor] ($(a.south east)+(-0.4pt,0)$) -- ($(c.north west)+(0.4pt,0)$) + ($(b.south east)+(-0.4pt,0)$) -- ($(d.north west)+(0.4pt,0)$); + \ifx\insertoccasion\@empty + \draw[thick,dcolor] (a.north west) -- (b.north east) + (a.south west) -- (b.south east); + \else + \node[text badly ragged] (occasion) at (main.north west -| 0.5\paperwidth,\paperheight) { + \usebeamerfont{occasion}\usebeamercolor[fg]{occasion}\insertoccasion + }; + \draw[thick,dcolor] (a.north west) -- (a.north west -| occasion.north west) + (a.south west) -- (a.south west -| occasion.south west) + (b.north east) -- (b.north east -| occasion.north east) + (b.south east) -- (b.south east -| occasion.south east); + \fi + \node[text badly ragged] (date) at (main.south west -| 0.5\paperwidth,0) { + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + }; + \draw[thick,dcolor] (c.north west) -- (c.north west -| date.north west) + (c.south west) -- (c.south west -| date.south west) + (d.north east) -- (d.north east -| date.north east) + (d.south east) -- (d.south east -| date.south east); + \node[below=4mm,text width=0.9\paperwidth,inner xsep=0.015\paperwidth, + text badly ragged,fill=white,draw=dcolor] (author) at (date.south) {% + \begin{minipage}[c]{0.9\paperwidth} + \centering + \textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \hspace{1em}\textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{minipage} + }; + \path[fill=dcolor] (author.north west) -- (author.south west) -- (author.south west -| 0,0) + (author.south east) -- (author.north east) -- (author.north west -| \paperwidth,0); + \end{tikzpicture} +} + +% Several safe primes and Blum-Blum-Shub generator +\newcommand{\my@composite}{43921} % 43921=167*263 +\newcounter{my@random@seed} +\setcounter{my@random@seed}{43787} +\newcommand{\next@random@seed}{% + \setcounter{my@random@seed}{\value{my@random@seed}*\value{my@random@seed}}% + \setcounter{my@random@seed}{\value{my@random@seed}-(\value{my@random@seed}/\my@composite)*\my@composite}% +} + +\newlength{\my@title@height} + +\defbeamertemplate{title page content}{block}{% + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight); + \path[draw=dcolor,fill=fcolor,opacity=0.8] (0,0) rectangle (\paperwidth,\paperheight); + \path[step=4mm,draw=dcolor,ultra thick] (0,0) grid (\paperwidth,\paperheight); + \foreach \x in {0,1,...,31} \foreach \y in {0,1,...,23} { + \next@random@seed + \ifodd\value{my@random@seed} + \path[draw=dcolor,ultra thick,fill=fcolor2,opacity=0.8] (\x*\paperwidth/32,\y*\paperheight/24) rectangle +(4mm,4mm); + \fi + } + \ifx\insertsubtitle\@empty + \setlength{\my@title@height}{39.7mm} + \else + \setlength{\my@title@height}{47.7mm} + \fi + \node[minimum width=0.84\paperwidth,minimum height=\my@title@height,inner xsep=2mm,inner ysep=0mm, + opacity=0.95,text opacity=1,text badly ragged,fill=fcolor] (main) at (0.5\paperwidth,0.542\paperheight) {% + \begin{minipage}[c]{0.84\paperwidth} + \centering + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle + \ifx\insertsubtitle\@empty\else + \\[5pt]\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} + \insertsubtitle + \fi + \end{minipage} + }; + \ifx\insertoccasion\@empty\else + \node[text badly ragged,fill=fcolor,minimum height=7.8mm,draw=dcolor,very thick] + (occasion) at (main.north west -| 0.5\paperwidth,\paperheight) { + \usebeamerfont{occasion}\usebeamercolor[fg]{occasion}\insertoccasion + }; + \fi + \node[text badly ragged,fill=fcolor,minimum height=7.8mm,draw=dcolor,very thick] + (date) at (main.south west -| 0.5\paperwidth,0) { + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + }; + \node[below=4mm,minimum width=0.84\paperwidth,minimum height=7.6mm,inner xsep=2mm,inner ysep=0mm, + opacity=0.85,text opacity=1,text badly ragged,fill=white] at (date.south) {% + \begin{minipage}[c]{0.84\paperwidth} + \centering + \textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \hspace{0.4em}\textcolor{accent2}{$\blacksquare$}\hspace{0.2em}% + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{minipage} + }; + \end{tikzpicture} +} + +%% ----------------------- section and subsection -------------------- + +\newcounter{my@pgf@picture@count} + +\def\sectionintocskip{0.5pt plus 0.1fill} +\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip\sectionintocskip}{}{} + +\AtBeginSection[]{% + \begin{frame}%[plain] + \sectionpage + \end{frame}% +} + +\defbeamertemplate{section name}{simple}{\insertsectionnumber.} + +\defbeamertemplate{section name}{chinese}[1][θŠ‚]{第\CJKnumber{\insertsectionnumber}#1} + +\defbeamertemplate{section page}{single}{% + \centerline{% + \usebeamerfont{section name}% + \usebeamercolor[fg]{section name}% + \usebeamertemplate{section name}% + \hspace{0.8em}% + \usebeamerfont{section title}% + \usebeamercolor[fg]{section title}% + \insertsection + }% +} + +\defbeamertemplate{section name in toc}{simple}{% + Section \inserttocsectionnumber +} + +\defbeamertemplate{section name in toc}{full}{% + Section \ifnum\the\beamer@tempcount<10 0\fi\inserttocsectionnumber +} + +\defbeamertemplate{section name in toc}{chinese}[1][θŠ‚]{% + 第\CJKnumber{\inserttocsectionnumber}#1% +} + +\newcounter{my@section@from} +\newcounter{my@section@to} + +\defbeamertemplate{show sections in toc}{total}{% + \setcounter{my@section@from}{1}% + \setcounter{my@section@to}{50}% +} + +% show at most five sections +\defbeamertemplate{show sections in toc}{partial}{% + \setcounter{my@section@from}{\value{section}}% + \addtocounter{my@section@from}{-2}% + \setcounter{my@section@to}{\value{section}}% + \addtocounter{my@section@to}{2}% + \ifnum\my@totalsectionnumber>0% + \ifnum\value{my@section@to}>\my@totalsectionnumber + \setcounter{my@section@to}{\my@totalsectionnumber}% + \setcounter{my@section@from}{\value{my@section@to}}% + \addtocounter{my@section@from}{-4}% + \fi + \fi + \ifnum\value{my@section@from}<1\setcounter{my@section@from}{1}% + \setcounter{my@section@to}{\value{my@section@from}}% + \addtocounter{my@section@to}{4}% + \fi +} + +% reset pgfid to get correct result with \tikzmark in second run +\defbeamertemplate{section page}{fill}{% + \usebeamertemplate{show sections in toc}% + \setcounter{my@pgf@picture@count}{\the\pgf@picture@serial@count}% + \setlength{\parskip}{5pt minus 1pt}% + \tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide, + sections={\arabic{my@section@from}-\arabic{my@section@to}}]% + \global\pgf@picture@serial@count=\value{my@pgf@picture@count}% + \unskip +} + +\defbeamertemplate{section in toc}{fill}{% + \noindent + \begin{tikzpicture} + \node[text width=\textwidth,inner xsep=0pt,inner ysep=5pt,text badly ragged,fill=bg] (title) {% + \hspace{0.28\textwidth}\parbox{0.7\textwidth}{\inserttocsection\vphantom{g}}% + }; + \path (title.south west) +(2pt,2pt) coordinate (sw) + (title.north west) +(0.25\textwidth,-2pt) coordinate (ne); + \path[fill=fg,overlay] (sw) rectangle (ne); + \node[inner xsep=0pt,text badly ragged,overlay] at ($(sw)!0.5!(ne)$) {% + \color{bg}\vphantom{g}\usebeamertemplate{section name in toc}% + }; + \draw[line width=1pt,dcolor,overlay] ($(ne)+(2pt,2pt)$) -- ($(ne |- title.south)+(2pt,0)$); + \end{tikzpicture}% + \par +} + +\AtBeginSubsection{% + \begin{frame}%[plain] + \setlength{\parskip}{0pt}% + \offinterlineskip + \subsectionpage + \end{frame}% +} + +\defbeamertemplate{subsection name}{simple}{% + \insertsectionnumber.\insertsubsectionnumber +} + +\defbeamertemplate{subsection page}{single}{% + \centerline{% + \usebeamerfont{subsection name}% + \usebeamercolor[fg]{subsection name}% + \usebeamertemplate{subsection name}% + \hspace{0.8em}% + \usebeamerfont{subsection title}% + \usebeamercolor[fg]{subsection title}% + \insertsubsection + }% +} + +\defbeamertemplate{subsection name in toc}{empty}{} + +\newcounter{mysubseccnt} +\defbeamertemplate{subsection name in toc}{alphabet}{% + \setcounter{mysubseccnt}{\inserttocsubsectionnumber}% + \Alph{mysubseccnt}% +} + +\defbeamertemplate{subsection name in toc}{simple}{% + \inserttocsubsectionnumber +} + +\defbeamertemplate{subsection name in toc}{full}{% + \inserttocsectionnumber.\inserttocsubsectionnumber +} + +% reset pgfid to get correct result with \tikzmark in second run +\defbeamertemplate{subsection page}{fill}{% + \setcounter{my@pgf@picture@count}{\the\pgf@picture@serial@count}% + \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide]% + \global\pgf@picture@serial@count=\value{my@pgf@picture@count}% + \unskip +} + +\defbeamertemplate{subsection in toc}{fill}{% + \vspace{1pt}\noindent% + \begin{tikzpicture} + \node[text width=\textwidth,inner xsep=0pt,inner ysep=5pt,text badly ragged,fill=bg] (title) {% + \hspace{0.28\textwidth}\parbox{0.7\textwidth}{\inserttocsubsection\vphantom{g}}% + }; + \path (title.south west) +(2pt,2pt) coordinate (sw) + (title.north west) +(0.25\textwidth,-2pt) coordinate (ne); + \path[fill=fg,overlay] (sw) rectangle (ne); + \node[inner xsep=0pt,text badly ragged,overlay] at ($(sw)!0.5!(ne)$) {% + \color{bg}\vphantom{g}\usebeamertemplate{subsection name in toc}% + }; + \draw[line width=1pt,dcolor,overlay] ($(ne)+(2pt,2pt)$) -- ($(ne |- title.south)+(2pt,0)$); + \end{tikzpicture}% + \par +} + +% chinese sections and subsections +\defbeamertemplate{section and subsection}{chinese}[1][θŠ‚]{% + \setbeamertemplate{section name in toc}[chinese][#1]% + \setbeamertemplate{section name}[chinese][#1]% + \setbeamertemplate{subsection name in toc}[alphabet]% +} + +%% ---------------------- headline and footline ---------------------- + +% fix headline bug in old versions +\@ifclasslater{beamer}{2017/01/23}{}{% + \patchcmd{\ps@empty} + {\raise\headheight\box\beamer@tempbox\box\@tempboxa} + {\raise\headheight\box\beamer@tempbox\raise\headheight\box\@tempboxa} + {}{} +} + +\defbeamertemplate{headline mark}{line}{ + \draw[overlay,color=white,line width=0.8pt] (0,0.5mm) -- (\paperwidth,0.5mm); +} + +\defbeamertemplate{headline}{shading}{% + \begin{tikzpicture} + \fill[left color=accent2,right color=blue85] (0,0) rectangle (\paperwidth,1mm); + \usebeamertemplate{headline mark} + \end{tikzpicture} +} + +\defbeamertemplate{headline}{border}{% + \begin{tikzpicture} + \path[use as bounding box] (0,0) rectangle (\paperwidth,1mm); + \fill[left color=accent2,right color=blue85] (0,0) rectangle (\paperwidth,0.8pt); + \end{tikzpicture} +} + +\defbeamertemplate{headline}{phantom}{% + \begin{tikzpicture} + \path[use as bounding box] (0,0) rectangle (\paperwidth,1mm); + \end{tikzpicture} +} + +\defbeamertemplate{footline left}{author}{% + \insertshortauthor +} + +\defbeamertemplate{footline center}{title}{% + \insertshorttitle +} + +\defbeamertemplate{footline right}{number}{% + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber}% +} +\defbeamertemplate{footline right}{normal}{% + \hyperlinkframeendprev{$\vartriangle$} + \Acrobatmenu{GoToPage}{\insertframenumber{}/\inserttotalframenumber} + \hyperlinkframestartnext{$\triangledown$}% +} + +\defbeamertemplate{footline}{simple}{% + \hbox{% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,left]{footline}% + \usebeamerfont{footline}\kern\beamer@leftmargin + \usebeamertemplate{footline left}% + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.6\paperwidth,ht=2.25ex,dp=1ex,center]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline center}% + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,right]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline right}% + \kern\beamer@rightmargin + \end{beamercolorbox}% + }% +} + +\defbeamertemplate{footline separator}{shading}{% + \begin{tikzpicture} + \fill[left color=blue85,right color=accent2] (0,0) rectangle (\paperwidth,1pt); + \end{tikzpicture} +} + +\defbeamertemplate{footline}{sectioning}{% + \usebeamertemplate{footline separator}% + \hbox{% + \begin{beamercolorbox}[wd=.8\paperwidth,ht=2.25ex,dp=1ex,left]{footline}% + \usebeamerfont{footline}\kern\beamer@leftmargin\insertshorttitle + \ifx\insertsection\@empty\else\qquad$\vartriangleright$\qquad\insertsection\fi + \ifx\insertsubsection\@empty\else\qquad$\vartriangleright$\qquad\insertsubsection\fi + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,right]{footline}% + \usebeamerfont{footline}\usebeamertemplate{footline right}% + \kern\beamer@rightmargin + \end{beamercolorbox}% + }% +} + +% customize mini frames template to get a section navigation bar + +\defbeamertemplate{navigation box}{current}{% + \usebeamercolor{navigation box}% + \colorbox{bg}{% + \rule[-1ex]{0pt}{3.25ex}\color{white}\kern1.4pt\my@navibox\kern1.4pt% + }% +} + +\defbeamertemplate{navigation box}{other}{% + %\colorbox{white}{% + \rule[-1ex]{0pt}{3.25ex}\color{black}\kern1.4pt\my@navibox\kern1.4pt% + %}% +} + +\newcommand{\my@navibox@subsection}{$\blacksquare$} +\newcommand{\my@navibox@frame}{$\square$} +\let\my@navibox=\my@navibox@frame + +% optional navigation box for some special frame +\newcommand{\my@navibox@frame@opt}{$\boxplus$} +\newcommand{\my@change@navibox}{\let\my@navibox=\my@navibox@frame@opt} +\newcommand{\changenavibox}{% + \addtocontents{nav}{\protect\headcommand{\protect\my@change@navibox}}% +} + +\newcommand{\my@sectionentry@show}[5]{% + \ifnum\c@section=#1% + \setbeamertemplate{navigation box}[current]% + \else + \setbeamertemplate{navigation box}[other]% + \fi + \begingroup + \def\my@navibox{#1}% + \hyperlink{Navigation#3}{\usebeamertemplate{navigation box}}% + \endgroup +} + +\newif\ifmy@hidesection + +\newcommand{\my@sectionentry@hide}[5]{\my@hidesectiontrue} + +\pretocmd{\beamer@setuplinks}{\renewcommand{\beamer@subsectionentry}[5]{}}{}{} +\apptocmd{\beamer@setuplinks}{\global\let\beamer@subsectionentry\mybeamer@subsectionentry}{}{} + +\newcommand{\mybeamer@subsectionentry}[5]{\global\let\my@navibox=\my@navibox@subsection} + +\newcommand{\my@slideentry@empty}[6]{} + +\newcommand{\my@slideentry@section}[6]{% + \ifmy@hidesection + \my@hidesectionfalse + \else + \ifnum\c@section=#1% + \setbeamertemplate{navigation box}[other]% + \ifnum\c@subsection=#2\ifnum\c@subsectionslide=#3% + \setbeamertemplate{navigation box}[current]% + \fi\fi + \beamer@link(#4){\usebeamertemplate{navigation box}}% + \fi + \fi + \global\let\my@navibox=\my@navibox@frame +} + +\newcommand{\my@slideentry@subsection}[6]{% + \ifmy@hidesection + \my@hidesectionfalse + \else + \ifnum\c@section=#1% + \ifboolexpr{test{\ifnumcomp{\c@subsection}{=}{#2}} or test{\ifnumcomp{#3}{=}{1}}}{% + \setbeamertemplate{navigation box}[other]% + \ifnum\c@subsection=#2\ifnum\c@subsectionslide=#3% + \setbeamertemplate{navigation box}[current]% + \fi\fi + \beamer@link(#4){\usebeamertemplate{navigation box}}% + }{}% + \fi + \fi + \global\let\my@navibox=\my@navibox@frame +} + +\AtEndDocument{% + \immediate\write\@auxout{% + \noexpand\gdef\noexpand\my@totalsectionnumber{\the\c@section}% + }% +} + +\def\my@totalsectionnumber{0} + +\defbeamertemplate{footline navigation}{section}{% + \setbeamercolor{navigation box}{bg=accent2}% + \let\sectionentry=\my@sectionentry@hide + \let\slideentry=\my@slideentry@section + \dohead +} + +\defbeamertemplate{footline navigation}{subsection}{% + \setbeamercolor{navigation box}{bg=accent2}% + \let\sectionentry=\my@sectionentry@hide + \let\slideentry=\my@slideentry@subsection + \dohead +} + +\defbeamertemplate{footline}{navigation}{% + \usebeamertemplate{footline separator}% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline}% + \usebeamerfont{footline}% + \kern\beamer@leftmargin + \setlength{\fboxsep}{0pt}% + \setbeamercolor{navigation box}{bg=blue85}% + \ifnum\my@totalsectionnumber=0% + \insertshorttitle + \else + \let\sectionentry=\my@sectionentry@show + \let\slideentry=\my@slideentry@empty + \dohead + \fi + \hfill + \usebeamertemplate{footline navigation}% + \kern\beamer@rightmargin + \end{beamercolorbox}% +} + +%% ------------------------- frame title ----------------------------- + +% remove extra vertical space after frametitle +\patchcmd{\endbeamer@frameslide}{\vskip0.25em}{\relax}{}{} + +\defbeamertemplate{frametitle}{simple}[1][] +{% + \nointerlineskip + \begin{beamercolorbox}[wd=\paperwidth,sep=0pt,leftskip=\beamer@leftmargin,% + rightskip=\beamer@rightmargin,#1]{frametitle} + \usebeamerfont{frametitle}% + \rule[-3mm]{0pt}{10mm}\insertframetitle\rule[-3mm]{0pt}{10mm}\par + \end{beamercolorbox} +} + +%% ------------------- block and theorem ----------------------------- + +% allow it to be modified by user +\def\myinserttheoremaddition{\inserttheoremaddition} + +\defbeamertemplate{theorem begin}{simple} +{% + \upshape%\bfseries\inserttheoremheadfont + {\usebeamercolor[fg]{theoremname}% + \inserttheoremname\inserttheoremnumber + \ifx\inserttheoremaddition\@empty\else + \ \usebeamercolor[fg]{local structure}(\myinserttheoremaddition)% + \fi% + %\inserttheorempunctuation + }% + \quad\normalfont +} +\defbeamertemplate{theorem end}{simple}{\par} + +\defbeamertemplate{proof begin}{simple} +{% + %\bfseries + \let\@addpunct=\@gobble + {\usebeamercolor[fg]{proofname}\insertproofname}% + \quad\normalfont +} +\defbeamertemplate{proof end}{simple}{\par} + +%% ---------------------- enumerate and itemize ---------------------- + +\expandafter\patchcmd\csname beamer@@tmpop@enumerate item@square\endcsname + {height1.85ex depth.4ex}{height1.85ex depth.3ex}{}{} +\expandafter\patchcmd\csname beamer@@tmpop@enumerate subitem@square\endcsname + {height1.85ex depth.4ex}{height1.85ex depth.3ex}{}{} +\expandafter\patchcmd\csname beamer@@tmpop@enumerate subsubitem@square\endcsname + {height1.85ex depth.4ex}{height1.85ex depth.3ex}{}{} + +%% ------------------------ select templates ------------------------- + +\setbeamertemplate{background canvas}[default] +\setbeamertemplate{background}[line] +\setbeamertemplate{headline}[shading] +\setbeamertemplate{footline}[navigation] +\setbeamertemplate{footline navigation}[section] +\setbeamertemplate{footline separator}[shading] +\setbeamertemplate{footline left}[author] +\setbeamertemplate{footline center}[title] +\setbeamertemplate{footline right}[number] +\setbeamertemplate{title page}[banner] +\setbeamertemplate{title page content}[hexagon] +\setbeamertemplate{section page}[fill] +\setbeamertemplate{show sections in toc}[partial] +\setbeamertemplate{section name}[simple] +\setbeamertemplate{section name in toc}[simple] +\setbeamertemplate{section in toc}[fill] +\setbeamertemplate{section in toc shaded}[default][50] +\setbeamertemplate{subsection page}[fill] +\setbeamertemplate{subsection name}[simple] +\setbeamertemplate{subsection name in toc}[simple] +\setbeamertemplate{subsection in toc}[fill] +\setbeamertemplate{subsection in toc shaded}[default][50] +\setbeamertemplate{theorem begin}[default] +\setbeamertemplate{theorem end}[default] +\setbeamertemplate{proof begin}[default] +\setbeamertemplate{proof end}[default] +\setbeamertemplate{frametitle}[simple] +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{itemize items}[square] +\setbeamertemplate{enumerate items}[square] + +%% --------------------------- font theme ---------------------------- + +\setbeamerfont{title}{size=\LARGE} +\setbeamerfont{subtitle}{size=\large} +\setbeamerfont{author}{size=\normalsize} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\normalsize} +\setbeamerfont{occasion}{size=\normalsize} +\setbeamerfont{section in toc}{size=\large} +\setbeamerfont{subsection in toc}{size=\large} +\setbeamerfont{frametitle}{size=\large} +\setbeamerfont{block title}{size=\normalsize} +\setbeamerfont{item projected}{size=\footnotesize} +\setbeamerfont{subitem projected}{size=\scriptsize} +\setbeamerfont{subsubitem projected}{size=\tiny} + +\usefonttheme{professionalfonts} +%\usepackage{arev} + +%% ---------------------------- color theme -------------------------- + +% always use rgb colors in pdf files +\substitutecolormodel{hsb}{rgb} + +\definecolor{red99}{Hsb}{0,0.9,0.9} +\definecolor{yellow5x}{Hsb}{60,0.5,1} +\definecolor{yellow6x}{Hsb}{53,0.6,1} +\definecolor{yellow86}{Hsb}{60,0.8,0.6} +\definecolor{yellow99}{Hsb}{60,0.9,0.9} +\definecolor{cyan95}{Hsb}{180,0.9,0.5} +\definecolor{blue74}{Hsb}{240,0.7,0.4} +\definecolor{blue77}{Hsb}{240,0.7,0.7} +\definecolor{blue85}{Hsb}{230,0.8,0.5} +\definecolor{blue99}{Hsb}{240,0.9,0.9} +\definecolor{magenta88}{Hsb}{300,0.8,0.8} + +\colorlet{text1}{black} +\colorlet{back1}{white} +\colorlet{accent1}{blue99} +\colorlet{accent2}{cyan95} +\colorlet{accent3}{red99} +\colorlet{accent4}{yellow86} +\colorlet{accent5}{magenta88} +\colorlet{filler1}{accent1!40!back1} +\colorlet{filler2}{accent2!40!back1} +\colorlet{filler3}{accent3!40!back1} +\colorlet{filler4}{accent4!40!back1} +\colorlet{filler5}{accent5!40!back1} +\colorlet{gray1}{black!20} +\colorlet{gray2}{black!35} +\colorlet{gray3}{black!50} +\colorlet{gray4}{black!65} +\colorlet{gray5}{black!80} +\colorlet{tcolor}{text1!10!back1} +\colorlet{dcolor}{white} +\colorlet{fcolor}{blue77} +\colorlet{fcolor2}{gray3} +\colorlet{markcolor}{gray} + +\setbeamercolor{normal text}{bg=white,fg=black} +\setbeamercolor{structure}{fg=blue85} +\setbeamercolor{local structure}{fg=cyan95} +\setbeamercolor{footline}{bg=,fg=black} +\setbeamercolor{title}{fg=yellow99} +\setbeamercolor{subtitle}{fg=white} +\setbeamercolor{author}{fg=black} +\setbeamercolor{institute}{fg=black} +\setbeamercolor{date}{fg=white} +\setbeamercolor{occasion}{fg=white} +\setbeamercolor{section name}{fg=blue85} +\setbeamercolor{section in toc}{fg=yellow6x,bg=blue85} +\setbeamercolor{section in toc shaded}{fg=white,bg=blue74} +\setbeamercolor{subsection name}{parent=section name} +\setbeamercolor{subsection in toc}{fg=yellow5x,bg=accent2} +\setbeamercolor{subsection in toc shaded}{fg=white,bg=accent2!50!black} +\setbeamercolor{frametitle}{parent=structure} +\setbeamercolor{theoremname}{fg=blue77} +\setbeamercolor{proofname}{fg=blue77} +\setbeamercolor{block title}{fg=accent1,bg=gray} +\setbeamercolor{block body}{bg=lightgray} +\setbeamercolor{block title example}{fg=accent2,bg=gray} +\setbeamercolor{block body example}{bg=lightgray} +\setbeamercolor{block title alerted}{fg=accent3,bg=gray} +\setbeamercolor{block body alerted}{bg=lightgray} + +%% ----------------------- handout mode ------------------------------ + +\mode{ + \setbeamertemplate{background canvas}{} + \setbeamertemplate{background}[empty] + \setbeamertemplate{headline}[phantom] + \setbeamertemplate{footline}[sectioning] + \setbeamertemplate{section page}[single] + \setbeamertemplate{subsection page}[single] + \setbeamerfont{subsection in toc}{size=\large} + \colorlet{dcolor}{darkgray} + \colorlet{fcolor}{white} + \colorlet{fcolor2}{gray1} + \setbeamercolor{normal text}{fg=black, bg=white} + \setbeamercolor{title}{fg=blue} + \setbeamercolor{subtitle}{fg=gray} + \setbeamercolor{occasion}{fg=black} + \setbeamercolor{date}{fg=black} + \setbeamercolor{section in toc}{fg=blue!90!gray,bg=} + \setbeamercolor{section in toc shaded}{fg=lightgray,bg=} + \setbeamercolor{subsection in toc}{fg=blue!80!gray} + \setbeamercolor{subsection in toc shaded}{fg=lightgray} + \setbeamercolor{frametitle}{fg=blue!70!gray,bg=} + \setbeamercolor{theoremname}{fg=blue!60!gray} + \setbeamercolor{proofname}{fg=blue!60!gray} + \setbeamercolor{footline}{bg=white,fg=black} +} + +\mode + + +\makeatother diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.pdf new file mode 100644 index 0000000000..982ad4d8d8 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.tex new file mode 100644 index 0000000000..ad68361dca --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeconcrete/riemann/demo-riemann.tex @@ -0,0 +1,178 @@ +% -*- coding: utf-8 -*- + +\documentclass[12pt,xcolor={rgb}]{beamer} + +\usetheme{riemann} + +\usepackage{arev} + +%% use these lines to get section numbers in Chinese +%\usepackage[UTF8,noindent]{ctex} +%\usepackage{CJKnumb} +%\setbeamertemplate{section and subsection}[chinese] +%\usebeamertemplate{section and subsection} + +\begin{document} + +\title{Beamer Theme Riemann} +\author{Author Name} +\institute{Institute Name} +\occasion{Some Conference} + +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Section One} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Two} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\section{Section Three} + +\subsection{Subsection One} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Two} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\subsection{Subsection Three} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\begin{frame}{Frame Title} +Frame \insertframenumber +\end{frame} + +\end{document} diff --git a/macros/latex/contrib/csvsimple/CHANGES.md b/macros/latex/contrib/csvsimple/CHANGES.md index 18e055de83..768f8f65cb 100644 --- a/macros/latex/contrib/csvsimple/CHANGES.md +++ b/macros/latex/contrib/csvsimple/CHANGES.md @@ -16,6 +16,38 @@ and this project adheres to ### Security + +## [2.6.0] - 2024-01-19 + +### Added +- `consume collected data` +- `\csvcollecte` (replacement for `\csvcollectx`) +- New CamelCase macro names for several existing string and number test macros + to adapt expl3 naming conventions (issue #34): + - `\IfCsvsimStrEqualTF` + - `\IfCsvsimTlEqualTF` + - `\IfCsvsimTlProtectedEqualTF` + - `\IfCsvsimFpCompareTF` + - `\IfCsvsimIntCompareTF` + +### Changed +- Default settings for `\csvautotabularray` and friends slightly changed + (line width and added uppercase setting) +- In documentation for `collect data`, `after first line` is + added to the list of collected keys (issue/pull request #31) +- Expl3 scratch variables like `\l_tmpa_tl` replaced by package variables like `\l__csvsim_tmpa_tl` +- Implementation of `\csvexpval` changed from `\exp_not:V` to `\exp_not:o` +- Implementation of `data collection` changed to piecewise token list constructions +- Implementation of `generic collected table` does not alter `after reading` anymore +- Implementation of `\ifcsvstrcmp` and `\ifcsvstrequal` changed +- Documentation of Section "String and Number Tests" updated (issue #33) +- Leading `/` removed from all l3keys inside the documentation +- `l3keys2e` removed from `csvsimple.sty` and code adapted +- Needed LaTeX version updated to 2023-11-01 +- Several minor changes + + + ## [2.5.0] - 2023-10-16 ### Added diff --git a/macros/latex/contrib/csvsimple/README.md b/macros/latex/contrib/csvsimple/README.md index d72e0a6cc7..d3e0860104 100644 --- a/macros/latex/contrib/csvsimple/README.md +++ b/macros/latex/contrib/csvsimple/README.md @@ -1,7 +1,7 @@ -# The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +# The LaTeX package csvsimple - version 2.6.0 (2024/01/19) -> Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +> Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm > This work may be distributed and/or modified under the > conditions of the LaTeX Project Public License, either version 1.3 diff --git a/macros/latex/contrib/csvsimple/csvsimple-doc.sty b/macros/latex/contrib/csvsimple/csvsimple-doc.sty index 36f052ac9b..2f507037fb 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-doc.sty +++ b/macros/latex/contrib/csvsimple/csvsimple-doc.sty @@ -1,9 +1,9 @@ % !TeX encoding=UTF-8 -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple-doc.sty: style file for the documentation %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -18,8 +18,8 @@ %% %% This work consists of all files listed in README.md %% -\def\version{2.5.0}% -\def\datum{2023/10/16}% +\def\version{2.6.0}% +\def\datum{2024/01/19}% \IfFileExists{csvsimple-doc.cfg}{\input{csvsimple-doc.cfg}}{}\providecommand\csvpkgprefix{} @@ -33,7 +33,7 @@ \RequirePackage[english]{babel} \RequirePackage{lmodern,parskip,array,ifthen,calc,makeidx} \RequirePackage{amsmath,amssymb} -\RequirePackage[svgnames,table,hyperref]{xcolor} +\RequirePackage[svgnames,table]{xcolor} \RequirePackage{tikz,siunitx,xfp,tabularray} \RequirePackage{varioref} \RequirePackage[pdftex,bookmarks,raiselinks,pageanchor,hyperindex,colorlinks]{hyperref} diff --git a/macros/latex/contrib/csvsimple/csvsimple-example.pdf b/macros/latex/contrib/csvsimple/csvsimple-example.pdf index 8915e27291..5485a99c1e 100644 Binary files a/macros/latex/contrib/csvsimple/csvsimple-example.pdf and b/macros/latex/contrib/csvsimple/csvsimple-example.pdf differ diff --git a/macros/latex/contrib/csvsimple/csvsimple-example.tex b/macros/latex/contrib/csvsimple/csvsimple-example.tex index 5d872f5fb2..364596562a 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-example.tex +++ b/macros/latex/contrib/csvsimple/csvsimple-example.tex @@ -1,8 +1,8 @@ -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple-example.tex: an example for csvsimple %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.pdf b/macros/latex/contrib/csvsimple/csvsimple-l3.pdf index 9bf62e2f40..bbef5c75a9 100644 Binary files a/macros/latex/contrib/csvsimple/csvsimple-l3.pdf and b/macros/latex/contrib/csvsimple/csvsimple-l3.pdf differ diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.sty b/macros/latex/contrib/csvsimple/csvsimple-l3.sty index cb6a676054..9aa9b2c428 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-l3.sty +++ b/macros/latex/contrib/csvsimple/csvsimple-l3.sty @@ -1,8 +1,8 @@ -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple-l3.sty: Simple LaTeX CSV file processing (LaTeX3) %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -17,11 +17,11 @@ %% %% This work consists of all files listed in README.md %% -\ProvidesExplPackage{csvsimple-l3}{2023/10/16}{2.5.0} +\NeedsTeXFormat{LaTeX2e}[2023-11-01] +\ProvidesExplPackage{csvsimple-l3}{2024/01/19}{2.6.0} {LaTeX3 CSV file processing} - %---- check package \cs_if_exist:NT \c__csvsim_package_expl_bool @@ -42,10 +42,12 @@ \bool_new:N \g__csvsim_check_column_count_bool \bool_new:N \g__csvsim_collect_data_bool \bool_new:N \g__csvsim_colnames_detection_bool +\bool_new:N \g__csvsim_consume_collected_data_bool \bool_new:N \g__csvsim_head_bool \bool_new:N \g__csvsim_head_to_colnames_bool \bool_new:N \g__csvsim_line_accepted_bool \bool_new:N \g__csvsim_line_firstline_bool + \bool_new:N \l__csvsim_respect_and_bool \bool_new:N \l__csvsim_respect_backslash_bool \bool_new:N \l__csvsim_respect_circumflex_bool @@ -60,22 +62,30 @@ \int_new:N \g__csvsim_col_int \int_new:N \g__csvsim_colmax_int +\int_new:N \g_csvsim_columncount_int \int_new:N \g_csvsim_inputline_int \int_new:N \g_csvsim_row_int -\int_new:N \g_csvsim_columncount_int + +\int_new:N \l__csvsim_tmpa_int +\int_new:N \l__csvsim_tmpb_int \seq_new:N \g__csvsim_colname_seq \seq_new:N \g__csvsim_line_seq \seq_new:N \g__csvsim_range_seq +\seq_new:N \l__csvsim_tmpa_seq + \str_new:N \g__csvsim_curfilename_str \str_new:N \g__csvsim_filename_str + \str_new:N \l__csvsim_csvsorter_command_str \str_new:N \l__csvsim_csvsorter_configpath_str \str_new:N \l__csvsim_csvsorter_log_str \str_new:N \l__csvsim_csvsorter_token_str \str_new:N \l__csvsim_ppfilename_str \str_new:N \l__csvsim_temp_filename_str +\str_new:N \l__csvsim_tmpa_str +\str_new:N \l__csvsim_tmpb_str \tl_const:Nn \c__csvsim_par_tl { \par } @@ -104,16 +114,19 @@ \tl_new:N \g__csvsim_hook_late_after_first_line_tl \tl_new:N \g__csvsim_hook_late_after_head_tl \tl_new:N \g__csvsim_hook_late_after_last_line_tl -\tl_new:N \g__csvsim_hook_late_after_line_tl \tl_new:N \g__csvsim_hook_late_after_line_application_tl +\tl_new:N \g__csvsim_hook_late_after_line_tl \tl_new:N \g__csvsim_hook_table_begin_tl \tl_new:N \g__csvsim_hook_table_end_tl \tl_new:N \g__csvsim_preprocessor_tl \tl_new:N \g__csvsim_separator_tl \tl_new:N \g__csvsim_table_foot_tl \tl_new:N \g__csvsim_table_head_tl +\tl_new:N \g__csvsim_tmpa_tl \tl_new:N \l__csvsim_filter_condition_tl +\tl_new:N \l__csvsim_tmpa_tl +\tl_new:N \l__csvsim_tmpb_tl \group_begin: @@ -164,9 +177,9 @@ { \group_begin: \g__csvsim_catcode_tl - \ior_get:NNTF \g__csvsim_ior \l_tmpa_tl + \ior_get:NNTF \g__csvsim_ior \l__csvsim_tmpa_tl { - \tl_gset_eq:NN \csvline \l_tmpa_tl + \tl_gset_eq:NN \csvline \l__csvsim_tmpa_tl \int_gincr:N \g_csvsim_inputline_int } { @@ -199,13 +212,15 @@ \cs_new_protected_nopar:Npn \__csvsim_process_head_name:n #1 { - \tl_set:No \l_tmpa_tl {\cs:w csvcol\int_to_roman:n{#1} \cs_end:} - \exp_args:NnV \cs_set_nopar:cpn {__csvsim__/\l_tmpa_tl} \l_tmpa_tl + \tl_set:No \l__csvsim_tmpa_tl {\cs:w csvcol\int_to_roman:n{#1} \cs_end:} + \exp_args:NnV \cs_set_nopar:cpn {__csvsim__/\l__csvsim_tmpa_tl} \l__csvsim_tmpa_tl \bool_if:NT \g__csvsim_head_to_colnames_bool { - \tl_set:No \l_tmpb_tl {\cs:w \g__csvsim_headname_prefix_tl \l_tmpa_tl \cs_end:} - \tl_put_right:NV \l_tmpb_tl \l_tmpa_tl - \exp_args:NNV \seq_gput_right:Nn \g__csvsim_colname_seq \l_tmpb_tl + \exp_args:NNe \seq_gput_right:Nn \g__csvsim_colname_seq + { + \exp_not:o { \cs:w \g__csvsim_headname_prefix_tl \l__csvsim_tmpa_tl \cs_end: } + \exp_not:o { \l__csvsim_tmpa_tl } + } } } @@ -215,7 +230,7 @@ \__csvsim_read_line: \tl_if_eq:NNTF \csvline \c__csvsim_par_tl { - \msg_error:nnx { csvsimple }{ empty-head }{ \g__csvsim_filename_str } + \msg_error:nne { csvsimple }{ empty-head }{ \g__csvsim_filename_str } } { \int_gzero:N \g_csvsim_columncount_int @@ -232,20 +247,24 @@ { \cs_if_exist:cTF {__csvsim__/#1} { - \tl_set:Nv \l_tmpa_tl {__csvsim__/#1} - \tl_put_left:Nn \l_tmpa_tl {#2} - \exp_args:NNV \seq_gput_right:Nn \g__csvsim_colname_seq \l_tmpa_tl + \exp_args:NNe \seq_gput_right:Nn \g__csvsim_colname_seq + { + \exp_not:n { #2 } + \exp_not:v { __csvsim__/#1 } + } } { \regex_match:NnTF \c__csvsim_integer_regex {#1} { - \tl_set:No \l_tmpa_tl {\cs:w csvcol\int_to_roman:n{#1} \cs_end:} - \tl_put_left:Nn \l_tmpa_tl {#2} - \exp_args:NNV \seq_gput_right:Nn \g__csvsim_colname_seq \l_tmpa_tl + \exp_args:NNe \seq_gput_right:Nn \g__csvsim_colname_seq + { + \exp_not:n { #2 } + \exp_not:o { \cs:w csvcol\int_to_roman:n{#1} \cs_end: } + } } { - \str_set:Nn \l_tmpb_str {#2} - \msg_error:nnxx { csvsimple }{ column-name }{ #1 }{ \l_tmpb_str } + \str_set:Nn \l__csvsim_tmpb_str {#2} + \msg_error:nnee { csvsimple }{ column-name }{ #1 }{ \l__csvsim_tmpb_str } } } } @@ -284,7 +303,7 @@ \int_gset_eq:NN \g__csvsim_colmax_int \c_one_int \bool_if:NT \g__csvsim_collect_data_bool { - \__csvsim_collect_data: + \__csvsim_collect_data_begin: } % open file @@ -368,10 +387,10 @@ % clear macros \int_step_inline:nn \g__csvsim_colmax_int { - \tl_set:No \l_tmpa_tl {\cs:w csvcol\int_to_roman:n{##1} \cs_end:} - \use:x + \tl_set:No \l__csvsim_tmpa_tl {\cs:w csvcol\int_to_roman:n{##1} \cs_end:} + \use:e { - \exp_not:N\tl_gclear:N \exp_not:V\l_tmpa_tl + \exp_not:N\tl_gclear:N \exp_not:V\l__csvsim_tmpa_tl } } \__csvsim_set_colnames: @@ -384,8 +403,7 @@ \g__csvsim_hook_after_reading_tl \bool_if:NT \g__csvsim_collect_data_bool { - \exp_args:NV \tl_gset_eq:NN \g__csvsim_data_collection_tl \g__csvsim_collect_tl - \tl_gclear:N \g__csvsim_collect_tl + \__csvsim_collect_data_end: } } @@ -408,25 +426,6 @@ %---- auxiliary user macros -% \NewDocumentCommand \csvlinetotablerow { } - % { - % \tl_clear:N \l_tmpa_tl - % \bool_set_false:N \l_tmpa_bool - % \seq_map_inline:Nn \g__csvsim_line_seq - % { - % \bool_if:NTF \l_tmpa_bool - % { - % \tl_put_right:Nn \l_tmpa_tl { & ##1 } - % } - % { - % \tl_put_right:Nn \l_tmpa_tl { ##1 } - % \bool_set_true:N \l_tmpa_bool - % } - % } - % \l_tmpa_tl - % } - - \NewExpandableDocumentCommand \csvlinetotablerow { } { \seq_use:Nn \g__csvsim_line_seq { & } @@ -475,44 +474,50 @@ } -\NewExpandableDocumentCommand \ifcsvstrcmp { m m } +%---- String and Number Tests + + +\NewExpandableDocumentCommand \IfCsvsimStrEqualTF { } { - \str_compare:eNeTF {#1} = {#2} + \str_if_eq:eeTF } +\NewCommandCopy \ifcsvstrcmp \IfCsvsimStrEqualTF \NewExpandableDocumentCommand \ifcsvnotstrcmp { m m +m +m } { - \ifcsvstrcmp{#1}{#2}{#4}{#3} + \IfCsvsimStrEqualTF{#1}{#2}{#4}{#3} } -\NewDocumentCommand \ifcsvstrequal { m m } +\NewDocumentCommand \IfCsvsimTlEqualTF { } { - \tl_set:Nx \l_tmpa_tl {#1} - \tl_set:Nx \l_tmpb_tl {#2} - \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl + \tl_if_eq:eeTF } +\NewCommandCopy \ifcsvstrequal \IfCsvsimTlEqualTF -\NewDocumentCommand \ifcsvprostrequal { m m } +\NewDocumentCommand \IfCsvsimTlProtectedEqualTF { m m } { - \protected@edef \l_tmpa_tl {#1} - \protected@edef \l_tmpb_tl {#2} - \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl + \protected@edef \l__csvsim_tmpa_tl {#1} + \protected@edef \l__csvsim_tmpb_tl {#2} + \tl_if_eq:NNTF \l__csvsim_tmpa_tl \l__csvsim_tmpb_tl } +\NewCommandCopy \ifcsvprostrequal \IfCsvsimTlProtectedEqualTF -\NewExpandableDocumentCommand \ifcsvfpcmp { m } +\NewExpandableDocumentCommand \IfCsvsimFpCompareTF { m } { \fp_compare:nTF {#1} } +\NewCommandCopy \ifcsvfpcmp \IfCsvsimFpCompareTF -\NewExpandableDocumentCommand \ifcsvintcmp { m } +\NewExpandableDocumentCommand \IfCsvsimIntCompareTF { m } { \int_compare:nTF {#1} } +\NewCommandCopy \ifcsvintcmp \IfCsvsimIntCompareTF %---- filename functions @@ -525,15 +530,15 @@ \str_set:Nn \l__csvsim_temp_filename_str {#1} } { - \str_set:Nn \l_tmpa_str {#1} - \str_if_empty:NF \l_tmpa_str + \str_set:Nn \l__csvsim_tmpa_str {#1} + \str_if_empty:NF \l__csvsim_tmpa_str { - \str_compare:eNeF { \str_item:Nn \l_tmpa_str {-1} } = { / } + \str_compare:eNeF { \str_item:Nn \l__csvsim_tmpa_str {-1} } = { / } { - \str_put_right:Nn \l_tmpa_str {/} + \str_put_right:Nn \l__csvsim_tmpa_str {/} } \str_concat:NNN \l__csvsim_temp_filename_str - \l_tmpa_str \l__csvsim_temp_filename_str + \l__csvsim_tmpa_str \l__csvsim_temp_filename_str } } } @@ -635,7 +640,7 @@ no~check~column~count .meta:n = { check~column~count=false }, warn~on~column~count~error .meta:n = { on~column~count~error= { - \msg_warning:nnxxxx { csvsimple }{ column-wrong-count } + \msg_warning:nneeee { csvsimple }{ column-wrong-count } { \int_use:N\g__csvsim_col_int } { \int_use:N\g_csvsim_columncount_int } { \int_use:N\g_csvsim_inputline_int } @@ -840,51 +845,51 @@ { \tl_if_in:nnTF {#1}{-} { - \seq_set_split:Nnn \l_tmpa_seq {-} {#1} - \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl - \seq_pop_left:NN \l_tmpa_seq \l_tmpb_tl - \tl_if_empty:NTF \l_tmpa_tl + \seq_set_split:Nnn \l__csvsim_tmpa_seq {-} {#1} + \seq_pop_left:NN \l__csvsim_tmpa_seq \l__csvsim_tmpa_tl + \seq_pop_left:NN \l__csvsim_tmpa_seq \l__csvsim_tmpb_tl + \tl_if_empty:NTF \l__csvsim_tmpa_tl { - \int_set_eq:NN \l_tmpa_int \c_one_int + \int_set_eq:NN \l__csvsim_tmpa_int \c_one_int } { - \int_set:Nn \l_tmpa_int { \l_tmpa_tl } + \int_set:Nn \l__csvsim_tmpa_int { \l__csvsim_tmpa_tl } } - \tl_if_empty:NTF \l_tmpb_tl + \tl_if_empty:NTF \l__csvsim_tmpb_tl { - \int_set_eq:NN \l_tmpb_int \c_max_int + \int_set_eq:NN \l__csvsim_tmpb_int \c_max_int } { - \int_set:Nn \l_tmpb_int { \l_tmpb_tl } + \int_set:Nn \l__csvsim_tmpb_int { \l__csvsim_tmpb_tl } } } { \tl_if_in:nnTF {#1}{+} { - \seq_set_split:Nnn \l_tmpa_seq {+} {#1} - \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl - \seq_pop_left:NN \l_tmpa_seq \l_tmpb_tl - \tl_if_empty:NTF \l_tmpa_tl + \seq_set_split:Nnn \l__csvsim_tmpa_seq {+} {#1} + \seq_pop_left:NN \l__csvsim_tmpa_seq \l__csvsim_tmpa_tl + \seq_pop_left:NN \l__csvsim_tmpa_seq \l__csvsim_tmpb_tl + \tl_if_empty:NTF \l__csvsim_tmpa_tl { - \int_set:Nn \l_tmpa_int { 1 } + \int_set:Nn \l__csvsim_tmpa_int { 1 } } { - \int_set:Nn \l_tmpa_int { \l_tmpa_tl } + \int_set:Nn \l__csvsim_tmpa_int { \l__csvsim_tmpa_tl } } - \tl_if_empty:NTF \l_tmpb_tl + \tl_if_empty:NTF \l__csvsim_tmpb_tl { - \int_set_eq:NN \l_tmpb_int \l_tmpa_int + \int_set_eq:NN \l__csvsim_tmpb_int \l__csvsim_tmpa_int } { - \int_set:Nn \l_tmpb_int { \l_tmpa_int + \l_tmpb_tl - 1 } + \int_set:Nn \l__csvsim_tmpb_int { \l__csvsim_tmpa_int + \l__csvsim_tmpb_tl - 1 } } } { - \int_set:Nn \l_tmpa_int {#1} - \int_set_eq:NN \l_tmpb_int \l_tmpa_int + \int_set:Nn \l__csvsim_tmpa_int {#1} + \int_set_eq:NN \l__csvsim_tmpb_int \l__csvsim_tmpa_int } } - \seq_gput_right:Nx \g__csvsim_range_seq {{\int_use:N \l_tmpa_int}{\int_use:N \l_tmpb_int}} + \seq_gput_right:Ne \g__csvsim_range_seq {{\int_use:N \l__csvsim_tmpa_int}{\int_use:N \l__csvsim_tmpb_int}} } @@ -944,28 +949,29 @@ \cs_new_protected_nopar:Npn \__csvsim_gset_tl_to_collect:N #1 { - \tl_gset:Nx #1 + \tl_gset:Ne #1 { - \exp_not:N \tl_gput_right:Nn + \exp_not:N \tl_build_gput_right:Nn \exp_not:N \g__csvsim_collect_tl - {\exp_not:V #1} + { \exp_not:o { #1 } } } } \cs_new_protected_nopar:Npn \__csvsim_gset_tl_to_collect_expanded:N #1 { - \tl_gset:Nx #1 + \tl_gset:Ne #1 { - \exp_not:N \tl_gput_right:Nx + \exp_not:N \tl_build_gput_right:Ne \exp_not:N \g__csvsim_collect_tl - {\exp_not:V #1} + { \exp_not:o { #1 } } } } -\cs_new_protected_nopar:Npn \__csvsim_collect_data: +\cs_new_protected_nopar:Npn \__csvsim_collect_data_begin: { + \tl_build_gbegin:N \g__csvsim_collect_tl \__csvsim_gset_tl_to_collect:N \g__csvsim_hook_after_head_tl \__csvsim_gset_tl_to_collect:N \g__csvsim_hook_after_first_line_tl \__csvsim_gset_tl_to_collect:N \g__csvsim_hook_after_line_tl @@ -976,29 +982,50 @@ \__csvsim_gset_tl_to_collect:N \g__csvsim_hook_late_after_last_line_tl \__csvsim_gset_tl_to_collect:N \g__csvsim_hook_late_after_line_tl \__csvsim_gset_tl_to_collect_expanded:N \g__csvsim_body_tl + } + + +\cs_new_protected_nopar:Npn \__csvsim_collect_data_end: + { + \tl_build_gend:N \g__csvsim_collect_tl + \bool_if:NTF \g__csvsim_consume_collected_data_bool + { + \g__csvsim_collect_tl + \exp_args:NV \tl_gclear:N \g__csvsim_data_collection_tl + } + { + \exp_args:NV \tl_gset_eq:NN \g__csvsim_data_collection_tl \g__csvsim_collect_tl + } \tl_gclear:N \g__csvsim_collect_tl } -\cs_set_eq:NN \csvexpval \exp_not:V +\cs_set_eq:NN \csvexpval \exp_not:o \cs_set_eq:NN \csvexpnot \exp_not:N \NewDocumentCommand{ \csvcollectn }{ +m } { - \tl_gput_right:Nn \g__csvsim_collect_tl {#1} + \tl_build_gput_right:Nn \g__csvsim_collect_tl {#1} + } + + +\NewDocumentCommand{ \csvcollecte }{ +m } + { + \tl_build_gput_right:Ne \g__csvsim_collect_tl {#1} } +% alias for \csvcollecte \NewDocumentCommand{ \csvcollectx }{ +m } { - \tl_gput_right:Nx \g__csvsim_collect_tl {#1} + \tl_build_gput_right:Ne \g__csvsim_collect_tl {#1} } \NewDocumentCommand{ \csvcollectV }{ m } { - \tl_gput_right:NV \g__csvsim_collect_tl #1 + \tl_build_gput_right:Ne \g__csvsim_collect_tl { \exp_not:o { #1 } } } @@ -1006,6 +1033,7 @@ { collect~data .bool_gset:N = \g__csvsim_collect_data_bool, data~collection .tl_gset:N = \g__csvsim_data_collection_tl, + consume~collected~data .bool_gset:N = \g__csvsim_consume_collected_data_bool, } @@ -1139,9 +1167,9 @@ { \g__csvsim_begin_table_center_tl \g__csvsim_before_table_tl - \tl_gset:Nn \g_tmpa_tl {\begin{#1}} - \tl_gput_right:NV \g_tmpa_tl \g__csvsim_generic_table_options_tl - \g_tmpa_tl + \tl_gset:Nn \g__csvsim_tmpa_tl {\begin{#1}} + \tl_gput_right:NV \g__csvsim_tmpa_tl \g__csvsim_generic_table_options_tl + \g__csvsim_tmpa_tl \g__csvsim_table_head_tl } { @@ -1155,25 +1183,28 @@ generic~collected~table .meta:n = { collect~data, + consume~collected~data = true, _table_ = { - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_begin_table_center_tl - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_before_table_tl - \tl_gput_right:Nn \g__csvsim_collect_tl { \begin{#1} } - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_generic_table_options_tl - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_table_head_tl + \tl_build_gput_right:Ne \g__csvsim_collect_tl + { + \exp_not:o { \g__csvsim_begin_table_center_tl } + \exp_not:o { \g__csvsim_before_table_tl } + \exp_not:n { \begin{#1} } + \exp_not:o { \g__csvsim_generic_table_options_tl } + \exp_not:o { \g__csvsim_table_head_tl } + } } { - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_table_foot_tl - \tl_gput_right:Nn \g__csvsim_collect_tl { \end{#1} } - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_after_table_tl - \tl_gput_right:NV \g__csvsim_collect_tl \g__csvsim_end_table_center_tl + \tl_build_gput_right:Ne \g__csvsim_collect_tl + { + \exp_not:o { \g__csvsim_table_foot_tl } + \exp_not:n { \end{#1} } + \exp_not:o { \g__csvsim_after_table_tl } + \exp_not:o { \g__csvsim_end_table_center_tl } + } }, late~after~line = \\, - after~reading = - { - \tl_use:N \g__csvsim_collect_tl - }, }, } @@ -1338,9 +1369,9 @@ _autotabularray_ = {#1}, generic~table~options = { { - row{1} = {font=\bfseries}, - hline{1,Z} = {0.8pt}, - hline{2} = {0.4pt}, + row{1} = {font=\bfseries,preto=\MakeUppercase}, + hline{1,Z} = {0.08em}, + hline{2} = {0.05em}, } } }, autotabularray* .meta:n = @@ -1348,7 +1379,7 @@ _autotabularray_ = {#1}, generic~table~options = { { - hline{1,Z} = {0.8pt}, + hline{1,Z} = {0.08em}, } } }, _autolongtabularray_ .meta:n = @@ -1363,9 +1394,9 @@ _autolongtabularray_ = {#1}, generic~table~options = { { - row{1} = {font=\bfseries}, - hline{1,Z} = {0.8pt}, - hline{2} = {0.4pt}, + row{1} = {font=\bfseries,preto=\MakeUppercase}, + hline{1,Z} = {0.08em}, + hline{2} = {0.05em}, } } }, autolongtabularray* .meta:n = @@ -1373,7 +1404,7 @@ _autolongtabularray_ = {#1}, generic~table~options = { { - hline{1,Z} = {0.8pt}, + hline{1,Z} = {0.08em}, } } }, } @@ -1441,14 +1472,14 @@ { \keys_set:nn { csvsim } { autotabularray={#3}, #2} } - \IfNoValueF {#4} + \IfValueT {#4} { - \IfNoValueTF {#5} + \IfValueTF {#5} { - \keys_set:nn { csvsim } { generic~table~options = { { #4 } } } + \keys_set:nn { csvsim } { generic~table~options = { [ #4 ]{ #5 } } } } { - \keys_set:nn { csvsim } { generic~table~options = { [ #4 ]{ #5 } } } + \keys_set:nn { csvsim } { generic~table~options = { { #4 } } } } } \__csvsim_loop: @@ -1465,14 +1496,14 @@ { \keys_set:nn { csvsim } { autolongtabularray={#3}, #2} } - \IfNoValueF {#4} + \IfValueT {#4} { - \IfNoValueTF {#5} + \IfValueTF {#5} { - \keys_set:nn { csvsim } { generic~table~options = { { #4 } } } + \keys_set:nn { csvsim } { generic~table~options = { [ #4 ]{ #5 } } } } { - \keys_set:nn { csvsim } { generic~table~options = { [ #4 ]{ #5 } } } + \keys_set:nn { csvsim } { generic~table~options = { { #4 } } } } } \__csvsim_loop: @@ -1532,7 +1563,7 @@ \sys_if_shell_unrestricted:TF { \__csvsim_set_temp_filename:n { #1 } - \msg_note:nnxx { csvsimple }{ sort-info }{ #2 }{ \l__csvsim_temp_filename_str } + \msg_note:nnee { csvsimple }{ sort-info }{ #2 }{ \l__csvsim_temp_filename_str } \cs_if_exist:NF \g__csvsim_iow { \iow_new:N \g__csvsim_iow @@ -1540,7 +1571,7 @@ \iow_open:Nn \g__csvsim_iow { \l__csvsim_csvsorter_token_str } \iow_now:Nn \g__csvsim_iow { \ExplSyntaxOn \msg_error:nn { csvsimple }{ sort-error } \ExplSyntaxOff } \iow_close:N \g__csvsim_iow - \sys_shell_now:x + \sys_shell_now:e { "\l__csvsim_csvsorter_command_str" \c_space_tl -c~ "\l__csvsim_csvsorter_configpath_str/\l__csvsim_temp_filename_str" \c_space_tl @@ -1576,6 +1607,7 @@ head~to~column~names~prefix = , head~to~column~names = false, collect~data = false, + consume~collected~data = false, column~count = 0, on~column~count~error =, range =, diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.tex b/macros/latex/contrib/csvsimple/csvsimple-l3.tex index 3377217755..9fad48644d 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-l3.tex +++ b/macros/latex/contrib/csvsimple/csvsimple-l3.tex @@ -1,11 +1,11 @@ % \LaTeX-Main\ % !TeX encoding=UTF-8 % !TeX spellcheck=en_US -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple.tex: Manual %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -26,8 +26,8 @@ \usepackage{\csvpkgprefix csvsimple-l3} -\tcbmakedocSubKey{docCsvKey}{csvsim} -\tcbmakedocSubKeys{docCsvKeys}{csvsim} +\tcbmakedocSubKey[doc key prefix=]{docCsvKey}{csvsim} +\tcbmakedocSubKeys[doc key prefix=]{docCsvKeys}{csvsim} \hypersetup{ pdftitle={Manual for the csvsimple-l3 package}, @@ -143,7 +143,7 @@ Not automatically loaded, but used for many examples are the packages \clearpage \subsection{First Steps} Every line of a processable CSV file has to contain an identical amount of -comma\footnote{See \refKey{/csvsim/separator} for other separators than comma.} separated values. The curly braces |{}| of \TeX\ groups can be used +comma\footnote{See \refKey{csvsim/separator} for other separators than comma.} separated values. The curly braces |{}| of \TeX\ groups can be used to mask a block which may contain commas not to be processed as separators. The first line of such a CSV file is usually but not necessarily a header line @@ -193,7 +193,7 @@ assigned to \TeX\ macros which may be used deliberately. \clearpage |\csvreader| is controlled by a plenty of options. For example, for table applications line breaks are easily inserted by -\refKey{/csvsim/late after line}. This defines a macro execution just before +\refKey{csvsim/late after line}. This defines a macro execution just before the following line. Additionally, the assignment of columns to \TeX\ macros is shown in a non automated way. @@ -231,10 +231,10 @@ using \refCom{csvstyle} or |keys_define:nn| from |l3keys|. \clearpage The next example shows such a style definition with the convenience macro \refCom{csvstyle}. Here, we see again the automated assignment of header -entries to column names by \refKey{/csvsim/head to column names}. +entries to column names by \refKey{csvsim/head to column names}. For this, the header entries have to be without spaces and special characters. But you can always assign entries to canonical macro names manually like in the examples -above. Here, we also add a \refKey{/csvsim/head to column names prefix} to avoid +above. Here, we also add a \refKey{csvsim/head to column names prefix} to avoid macro name clashes. \begin{dispExample} @@ -344,7 +344,7 @@ a certificate is printed only for students with grade unequal to 5.0. ]{grade.csv} {1=\name,2=\firstname,3=\matnumber,4=\gender,5=\grade}{% \begin{center}\Large\bfseries Certificate in Mathematics\end{center} - \large\ifcsvstrcmp{\gender}{f}{Ms.}{Mr.} + \large\IfCsvsimStrEqualTF{\gender}{f}{Ms.}{Mr.} \firstname~\name, matriculation number \matnumber, has passed the test in mathematics with grade \grade.\par\ldots\par }% @@ -406,7 +406,7 @@ Mainly, the |\csvreader| command consists of a \refCom{csvloop} macro with following parameters:\par |\csvloop{|\meta{options}|, file=|\meta{file name}|, column names=|\meta{assignments}|,|\\ \hspace*{2cm} |command=|\meta{command list}|}|\par - Therefore, the application of the keys \refKey{/csvsim/file} and \refKey{/csvsim/command} + Therefore, the application of the keys \refKey{csvsim/file} and \refKey{csvsim/command} is useless for |\csvreader|. \end{docCommand} @@ -436,8 +436,8 @@ is useless for |\csvreader|. \refCom{csvreader} and \refCom{csvloop}. Note that most options are set to default values at the begin of these commands and therefore cannot be defined reasonable by \refCom{csvset}. - But it may be used for options like \refKey{/csvsim/csvsorter command} - to give global settings. Also see \refKey{/csvsim/every csv}. + But it may be used for options like \refKey{csvsim/csvsorter command} + to give global settings. Also see \refKey{csvsim/every csv}. \end{docCommand} @@ -575,12 +575,12 @@ purpose: \begin{docCommand}{csvfilteraccept}{} All following consistent data lines will be accepted and processed. This command overwrites all previous filter settings and may be used - inside \refKey{/csvsim/full filter} to implement + inside \refKey{csvsim/full filter} to implement an own filtering rule together with |\csvfilterreject|. \begin{dispExample} \csvreader[ autotabular, - full filter = \ifcsvstrcmp{\csvcoliv}{m}{\csvfilteraccept}{\csvfilterreject} + full filter = \IfCsvsimStrEqualTF{\csvcoliv}{m}{\csvfilteraccept}{\csvfilterreject} ]{grade.csv}{}{% \csvlinetotablerow } @@ -633,7 +633,7 @@ purpose: } Typesets the number of columns of the current CSV file. This number is either computed from the first valid line (header or data) or - given by \refKey{/csvsim/column count}. + given by \refKey{csvsim/column count}. Despite of the name, there is no associated \LaTeX\ counter |csvcolumncount|, but \refCom{thecsvcolumncount} accesses the \LaTeX3 integer \refCom{g_csvsim_columncount_int}. @@ -689,7 +689,7 @@ for the general table options in combination with \refCom{csvreader} and } |\csvautotabular| or |\csvautotabular*| is an abbreviation for the application of the option key - \refKey{/csvsim/autotabular} or \refKey{/csvsim/autotabular*} + \refKey{csvsim/autotabular} or \refKey{csvsim/autotabular*} together with other \meta{options} to \refCom{csvloop}. This macro reads the whole CSV file denoted by \meta{file name} with an automated formatting. @@ -713,7 +713,7 @@ for the general table options in combination with \refCom{csvreader} and } |\csvautolongtable| or |\csvautolongtable*| is an abbreviation for the application of the option key - \refKey{/csvsim/autolongtable} or \refKey{/csvsim/autolongtable*} + \refKey{csvsim/autolongtable} or \refKey{csvsim/autolongtable*} together with other \meta{options} to \refCom{csvloop}. This macro reads the whole CSV file denoted by \meta{file name} with an automated formatting. @@ -739,7 +739,7 @@ for the general table options in combination with \refCom{csvreader} and } |\csvautobooktabular| or |\csvautobooktabular*| is an abbreviation for the application of the option key - \refKey{/csvsim/autobooktabular} or \refKey{/csvsim/autobooktabular*} + \refKey{csvsim/autobooktabular} or \refKey{csvsim/autobooktabular*} together with other \meta{options} to \refCom{csvloop}. This macro reads the whole CSV file denoted by \meta{file name} with an automated formatting. @@ -761,7 +761,7 @@ for the general table options in combination with \refCom{csvreader} and } |\csvautobooklongtable| or |\csvautobooklongtable*| is an abbreviation for the application of the option key - \refKey{/csvsim/autobooklongtable} or \refKey{/csvsim/autobooklongtable*} + \refKey{csvsim/autobooklongtable} or \refKey{csvsim/autobooklongtable*} together with other \meta{options} to \refCom{csvloop}. This macro reads the whole CSV file denoted by \meta{file name} with an automated formatting. @@ -779,17 +779,16 @@ for the general table options in combination with \refCom{csvreader} and \begin{docCommands}[ doc parameter = \oarg{options}\marg{file name}\oarg{taboptions 1}\oarg{taboptions 2}, - doc new = 2023-10-13 ] { - { doc name = csvautotabularray }, + { doc name = csvautotabularray, doc new and updated={2023-10-13}{2023-10-17}, }, { doc name = csvautotabularray* }, { doc name = csvautolongtabularray }, { doc name = csvautolongtabularray* }, } These macros are abbreviations for the application of the option keys - \refKey{/csvsim/autotabularray}, \refKey{/csvsim/autotabularray*},\\ - \refKey{/csvsim/autolongtabularray}, or \refKey{/csvsim/autolongtabularray*} + \refKey{csvsim/autotabularray}, \refKey{csvsim/autotabularray*},\\ + \refKey{csvsim/autolongtabularray}, or \refKey{csvsim/autolongtabularray*} together with other \meta{options} to \refCom{csvloop}. These macros read the whole CSV file denoted by \meta{file name} with an automated formatting. @@ -799,22 +798,22 @@ for the general table options in combination with \refCom{csvreader} and \refCom{csvautolongtabularray} uses the \docAuxEnvironment*{longtblr} environment. The star variants treat the first line as data line and not as header line.\par Options to the table environments from \ctanpkg{tabularray} may be given - by either setting \refKey{/csvsim/generic table options} or + by either setting \refKey{csvsim/generic table options} or using \meta{taboptions 1} and \meta{taboptions 2}.\par The default setting is \begin{dispListing} generic table options = { { - row{1} = {font=\bfseries}, - hline{1,Z} = {0.8pt}, - hline{2} = {0.4pt}, + row{1} = {font=\bfseries,preto=\MakeUppercase}, + hline{1,Z} = {0.08em}, + hline{2} = {0.05em}, } } \end{dispListing} For the star variants, the default setting is \begin{dispListing} generic table options = { { - hline{1,Z} = {0.8pt}, + hline{1,Z} = {0.08em}, } } \end{dispListing} @@ -829,29 +828,34 @@ Examples: generic table options = {{ row{odd} = {red!85!gray!7}, - row{1} = {bg=red!85!gray, fg=white, font=\bfseries}, + row{1} = {bg=red!85!gray, fg=white, + font=\bfseries, preto=\MakeUppercase}, }} - ] - {grade.csv} + ] {grade.csv} \end{dispExample} \clearpage -Alternatively to \refKey{/csvsim/generic table options} +Alternatively to \refKey{csvsim/generic table options} (and overruling this option), one may give options to \docAuxEnvironment*{tblr} or \docAuxEnvironment*{longtblr} using \meta{taboptions 1} and \meta{taboptions 2}. If \meta{taboptions 2} is \emph{not present}, then \meta{taboptions 1} -is used as mandatory argument. -Otherwise, \meta{taboptions 1} is used as optional argument and -\meta{taboptions 2} as mandatory argument. +is used as +mandatory argument (\ctanpkg{tabularray} inner specification). +Otherwise, \meta{taboptions 1} is used as +optional argument (\ctanpkg{tabularray} outer specification) +and +\meta{taboptions 2} as +mandatory argument (\ctanpkg{tabularray} inner specification). \begin{dispExample} \csvautotabularray[table centered] {grade.csv} [ row{odd} = {red!85!gray!7}, - row{1} = {bg=red!85!gray, fg=white, font=\bfseries}, + row{1} = {bg=red!85!gray, fg=white, + font=\bfseries, preto=\MakeUppercase}, ] \end{dispExample} @@ -866,7 +870,8 @@ Otherwise, \meta{taboptions 1} is used as optional argument and ] [ row{odd} = {red!85!gray!7}, - row{1} = {bg=red!85!gray, fg=white, font=\bfseries}, + row{1} = {bg=red!85!gray, fg=white, + font=\bfseries, preto=\MakeUppercase}, ] \end{dispExample} @@ -877,7 +882,7 @@ Otherwise, \meta{taboptions 1} is used as optional argument and \clearpage \section{Option Keys}\label{sec:schluessel}% For the \meta{options} in \refCom{csvreader} respectively \refCom{csvloop} -the following |l3keys| keys can be applied. The \meta{module} name |/csvsim/| is not +the following |l3keys| keys can be applied. The \meta{module} name |csvsim| is not to be used inside these macros. @@ -895,15 +900,15 @@ to be used inside these macros. \begin{docCsvKey}{before filter}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed after reading and consistency checking of a data line. It is executed before any filter condition is checked, - see e.g. \refKey{/csvsim/filter ifthen} and - also see \refKey{/csvsim/full filter}. + see e.g. \refKey{csvsim/filter ifthen} and + also see \refKey{csvsim/full filter}. No additions to the input stream should be given here. All line entries are available. \end{docCsvKey} \begin{docCsvKey}[][doc new=2021-07-06]{after filter}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed for an accepted line after - \refKey{/csvsim/late after line} and before \refKey{/csvsim/before line}. + \refKey{csvsim/late after line} and before \refKey{csvsim/before line}. All line entries are available. No additions to the input stream should be given here. \meta{code} may contain processing of data content to generate new values. @@ -919,73 +924,73 @@ to be used inside these macros. \begin{docCsvKey}{late after line}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed after reading and disassembling - of the next accepted data line (after \refKey{/csvsim/before filter}). + of the next accepted data line (after \refKey{csvsim/before filter}). These operations are executed before further processing of this line. \meta{code} should not refer to any data content, but may be something like |\\|. - \refKey{/csvsim/late after line} overwrites - \refKey{/csvsim/late after first line} and - \refKey{/csvsim/late after last line}. - Note that table options like \refKey{/csvsim/tabular} set this key to |\\| + \refKey{csvsim/late after line} overwrites + \refKey{csvsim/late after first line} and + \refKey{csvsim/late after last line}. + Note that table options like \refKey{csvsim/tabular} set this key to |\\| automatically. \end{docCsvKey} \begin{docCsvKey}{late after first line}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed after reading and disassembling - of the second accepted data line instead of \refKey{/csvsim/late after line}. + of the second accepted data line instead of \refKey{csvsim/late after line}. \meta{code} should not refer to any data content. - This key has to be set after \refKey{/csvsim/late after line}. + This key has to be set after \refKey{csvsim/late after line}. \end{docCsvKey} \begin{docCsvKey}{late after last line}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed after processing of the last - accepted data line instead of \refKey{/csvsim/late after line}. + accepted data line instead of \refKey{csvsim/late after line}. \meta{code} should not refer to any data content. - This key has to be set after \refKey{/csvsim/late after line}. + This key has to be set after \refKey{csvsim/late after line}. \end{docCsvKey} \begin{docCsvKey}{before line}{=\meta{code}}{no default, initially empty} - Sets the \meta{code} to be executed after \refKey{/csvsim/after filter} - and before \refKey{/csvsim/command}. + Sets the \meta{code} to be executed after \refKey{csvsim/after filter} + and before \refKey{csvsim/command}. All line entries are available. - \refKey{/csvsim/before line} overwrites - \refKey{/csvsim/before first line}. + \refKey{csvsim/before line} overwrites + \refKey{csvsim/before first line}. \end{docCsvKey} \begin{docCsvKey}{before first line}{=\meta{code}}{no default, initially empty} - Sets the \meta{code} to be executed instead of \refKey{/csvsim/before line} + Sets the \meta{code} to be executed instead of \refKey{csvsim/before line} for the first accepted data line. All line entries are available. - This key has to be set after \refKey{/csvsim/before line}. + This key has to be set after \refKey{csvsim/before line}. \end{docCsvKey} \pagebreak \begin{docCsvKey}{command}{=\meta{code}}{no default, initially \cs{csvline}} Sets the \meta{code} to be executed for every accepted data line. - It is executed between \refKey{/csvsim/before line} and \refKey{/csvsim/after line}. - \refKey{/csvsim/command} describes the main processing of the line - entries. \refCom{csvreader} sets \refKey{/csvsim/command} as mandatory + It is executed between \refKey{csvsim/before line} and \refKey{csvsim/after line}. + \refKey{csvsim/command} describes the main processing of the line + entries. \refCom{csvreader} sets \refKey{csvsim/command} as mandatory parameter. \end{docCsvKey} \begin{docCsvKey}{after line}{=\meta{code}}{no default, initially empty} Sets the \meta{code} to be executed for every accepted data line - after \refKey{/csvsim/command}. + after \refKey{csvsim/command}. All line entries are still available. - \refKey{/csvsim/after line} overwrites \refKey{/csvsim/after first line}. + \refKey{csvsim/after line} overwrites \refKey{csvsim/after first line}. \end{docCsvKey} \begin{docCsvKey}{after first line}{=\meta{code}}{no default, initially empty} - Sets the \meta{code} to be executed instead of \refKey{/csvsim/after line} + Sets the \meta{code} to be executed instead of \refKey{csvsim/after line} for the first accepted data line. All line entries are still available. - This key has to be set after \refKey{/csvsim/after line}. + This key has to be set after \refKey{csvsim/after line}. \end{docCsvKey} \begin{docCsvKey}{after reading}{=\meta{code}}{no default, initially empty} @@ -995,7 +1000,7 @@ to be used inside these macros. \bigskip The following example illustrates the sequence of command execution. -Note that \refKey{/csvsim/command} is set by the mandatory last +Note that \refKey{csvsim/command} is set by the mandatory last parameter of \refCom{csvreader}. \begin{dispExample} @@ -1063,14 +1068,14 @@ see Section~\ref{subsec:tabsupport} from page~\pageref{subsec:tabsupport}. used as feasible \LaTeX\ macro names. Note that the macro definition is \emph{global} and may therefore override existing macros for the rest of the document. Adding - \refKey{/csvsim/head to column names prefix} may help to avoid unwanted + \refKey{csvsim/head to column names prefix} may help to avoid unwanted overrides. \end{docCsvKey} \begin{docCsvKey}[][doc new=2019-07-16]{head to column names prefix}{=\meta{text}}{no default, initially empty} The given \meta{text} is prefixed to the name of all macros generated by - \refKey{/csvsim/head to column names}. For example, if you use the settings + \refKey{csvsim/head to column names}. For example, if you use the settings \begin{dispListing} head to column names, head to column names prefix=MY, @@ -1082,7 +1087,7 @@ see Section~\ref{subsec:tabsupport} from page~\pageref{subsec:tabsupport}. \begin{docCsvKey}[][doc new=2022-02-01]{column names detection}{\colOpt{=true\textbar false}}{default |true|, initially |true|} If this key is set, the header line is detected for names which can be used - for \refKey{/csvsim/column names} and \refKey{/csvsim/head to column names}. + for \refKey{csvsim/column names} and \refKey{csvsim/head to column names}. Otherwise, these options are not functional.\\ This key can and should be set to |false|, if the header line contains macros or characters not allowed inside \LaTeX\ control sequences, because @@ -1109,10 +1114,10 @@ see Section~\ref{subsec:tabsupport} from page~\pageref{subsec:tabsupport}. \begin{docCsvKey}[][doc updated=2021-06-24]{column count}{=\meta{number}}{no default, initially |0|} Sets the \meta{number} of feasible entries per data line. - If \refKey{/csvsim/column count} is set to |0|, the number of entries of + If \refKey{csvsim/column count} is set to |0|, the number of entries of the first non-empty line determines the column count (automatic detection). - This setting is only useful in connection with \refKey{/csvsim/no head}, + This setting is only useful in connection with \refKey{csvsim/no head}, since \meta{number} would be replaced by the number of entries in the header line otherwise. \end{docCsvKey} @@ -1134,8 +1139,8 @@ see Section~\ref{subsec:tabsupport} from page~\pageref{subsec:tabsupport}. Applying a \emph{filter} means that data lines are only processed / displayed, if they fulfill a given \emph{condition}. -The following string compare filters \refKey{/csvsim/filter strcmp} and -\refKey{/csvsim/filter equal} are identical by logic, but differ in implementation. +The following string compare filters \refKey{csvsim/filter strcmp} and +\refKey{csvsim/filter equal} are identical by logic, but differ in implementation. \begin{docCsvKey}[][doc updated=2022-10-21]{filter strcmp}{=\marg{stringA}\marg{stringB}}{no default} Only lines where \meta{stringA} and \meta{stringB} are equal after expansion @@ -1203,7 +1208,7 @@ The following string compare filters \refKey{/csvsim/filter strcmp} and Only data lines which fulfill a \LaTeX3 \meta{boolean expression} are accepted. Note that such an \meta{boolean expression} needs expl3 code. To preprocess the data line before testing the \meta{boolean expression}, - the option key \refKey{/csvsim/before filter} can be used. + the option key \refKey{csvsim/before filter} can be used. \begin{dispExample} % For convenience, we save the filter \ExplSyntaxOn @@ -1232,7 +1237,7 @@ The following string compare filters \refKey{/csvsim/filter strcmp} and \medskip \begin{docCommand}[doc new=2021-06-25]{csvfilterbool}{\marg{key}\marg{boolean expression}} - Defines a new |l3keys| meta key which applies \refKey{/csvsim/filter bool} + Defines a new |l3keys| meta key which applies \refKey{csvsim/filter bool} with the given \meta{boolean expression}. \begin{dispExample} % For convenience, we save the filter @@ -1263,10 +1268,10 @@ The following string compare filters \refKey{/csvsim/filter strcmp} and The following filter options are \emph{appendable} to the expl3 based filter options: \begin{itemize} -\item \refKey{/csvsim/filter strcmp} -\item \refKey{/csvsim/filter not strcmp} -\item \refKey{/csvsim/filter fp} -\item \refKey{/csvsim/filter bool} +\item \refKey{csvsim/filter strcmp} +\item \refKey{csvsim/filter not strcmp} +\item \refKey{csvsim/filter fp} +\item \refKey{csvsim/filter bool} \end{itemize} \begin{docCsvKeys}[ @@ -1278,7 +1283,7 @@ filter options: { doc name = and filter strcmp }, { doc name = or filter strcmp }, } - Like \refKey{/csvsim/filter strcmp}, but appended to a required existing + Like \refKey{csvsim/filter strcmp}, but appended to a required existing expl3 based filter with \emph{and} (|&&|) resp. \emph{or} (\texttt{\textbar\textbar}). \begin{dispExample} @@ -1305,7 +1310,7 @@ filter options: { doc name = and filter not strcmp }, { doc name = or filter not strcmp }, } - Like \refKey{/csvsim/filter not strcmp}, but appended to a required existing + Like \refKey{csvsim/filter not strcmp}, but appended to a required existing expl3 based filter with \emph{and} (|&&|) resp. \emph{or} (\texttt{\textbar\textbar}). \end{docCsvKeys} @@ -1319,7 +1324,7 @@ filter options: { doc name = and filter fp }, { doc name = or filter fp }, } - Like \refKey{/csvsim/filter fp}, but appended to a required existing + Like \refKey{csvsim/filter fp}, but appended to a required existing expl3 based filter with \emph{and} (|&&|) resp. \emph{or} (\texttt{\textbar\textbar}). \end{docCsvKeys} @@ -1333,7 +1338,7 @@ filter options: { doc name = and filter bool }, { doc name = or filter bool }, } - Like \refKey{/csvsim/filter bool}, but appended to a required existing + Like \refKey{csvsim/filter bool}, but appended to a required existing expl3 based filter with \emph{and} (|&&|) resp. \emph{or} (\texttt{\textbar\textbar}). \end{docCsvKeys} @@ -1375,7 +1380,7 @@ filter test=\iftest{some testing}, Every \meta{boolean expression} from the \ctanpkg{etoolbox} package is feasible (package loading required!). To preprocess the data line before testing the \meta{boolean expression}, - the option key \refKey{/csvsim/before filter} can be used. + the option key \refKey{csvsim/before filter} can be used. \begin{dispExample} % \usepackage{etoolbox,booktabs} \csvreader[ @@ -1400,7 +1405,7 @@ filter test=\iftest{some testing}, For the \meta{boolean expression}, every term from the \ctanpkg{ifthen} package is feasible (package loading required!). To preprocess the data line before testing the \meta{boolean expression}, - the option key \refKey{/csvsim/before filter} can be used. + the option key \refKey{csvsim/before filter} can be used. \begin{dispExample} % \usepackage{ifthen,booktabs} @@ -1434,9 +1439,9 @@ filter test=\iftest{some testing}, \begin{docCsvKey}[][doc new=2016-07-01]{full filter}{=\meta{code}}{no default} - Technically, this key is an alias for \refKey{/csvsim/before filter}. - Philosophically, \refKey{/csvsim/before filter} computes something before - a filter condition is set, but \refKey{/csvsim/full filter} should implement + Technically, this key is an alias for \refKey{csvsim/before filter}. + Philosophically, \refKey{csvsim/before filter} computes something before + a filter condition is set, but \refKey{csvsim/full filter} should implement the full filtering. Especially, \refCom{csvfilteraccept} or \refCom{csvfilterreject} \emph{should} be set inside the \meta{code}. \begin{dispExample} @@ -1478,7 +1483,7 @@ line 10 to 30 of the accepted lines. Defines a comma separated list of line ranges. If a line number \refCom{thecsvrow} satisfies one or more of the given \meta{range1}, \meta{range2}, \ldots, the corresponding line is processed and displayed. - If \refKey{/csvsim/range} is set to empty, all lines are accepted. + If \refKey{csvsim/range} is set to empty, all lines are accepted. Every \meta{range} can corresponds to one of the following variants: @@ -1579,58 +1584,58 @@ The following example displays the last three line numbers: Surrounds the CSV processing with |\begin{tabular}|\marg{table format} at begin and with |\end{tabular}| at end. Additionally, the commands defined by the key values of - \refKey{/csvsim/before table}, \refKey{/csvsim/table head}, \refKey{/csvsim/table foot}, - and \refKey{/csvsim/after table} are executed at the appropriate places. - \refKey{/csvsim/late after line} is set to \cs{}\cs{}. + \refKey{csvsim/before table}, \refKey{csvsim/table head}, \refKey{csvsim/table foot}, + and \refKey{csvsim/after table} are executed at the appropriate places. + \refKey{csvsim/late after line} is set to \cs{}\cs{}. \end{docCsvKey} \begin{docCsvKey}{centered tabular}{=\meta{table format}}{style, no default} - Like \refKey{/csvsim/tabular} but inside an additional |center| environment. + Like \refKey{csvsim/tabular} but inside an additional |center| environment. \end{docCsvKey} \begin{docCsvKey}{longtable}{=\meta{table format}}{style, no default} - Like \refKey{/csvsim/tabular} but for the |longtable| environment. + Like \refKey{csvsim/tabular} but for the |longtable| environment. This requires the package \ctanpkg{longtable} (not loaded automatically). \end{docCsvKey} \begin{docCsvKey}{tabbing}{}{style, no value} - Like \refKey{/csvsim/tabular} but for the |tabbing| environment. + Like \refKey{csvsim/tabular} but for the |tabbing| environment. \end{docCsvKey} \begin{docCsvKey}{centered tabbing}{}{style, no value} - Like \refKey{/csvsim/tabbing} but inside an additional |center| environment. + Like \refKey{csvsim/tabbing} but inside an additional |center| environment. \end{docCsvKey} \begin{docCsvKey}[][doc new=2021-07-06]{tabularray}{=\meta{table format}}{style, no default} - Like \refKey{/csvsim/tabular} but for the |tblr| environment. + Like \refKey{csvsim/tabular} but for the |tblr| environment. This requires the package \ctanpkg{tabularray} (not loaded automatically). - This also sets \refKey{/csvsim/collect data} since this kind of table + This also sets \refKey{csvsim/collect data} since this kind of table needs collected content, see \Fullref{sec:datacollection}. - Note that \refKey{/csvsim/after reading} is set to use the collected + Note that \refKey{csvsim/after reading} is set to use the collected data immediately. See \Fullref{sec:tabularray} for examples. \end{docCsvKey} \begin{docCsvKey}[][doc new=2021-07-23]{long tabularray}{=\meta{table format}}{style, no default} - Like \refKey{/csvsim/tabularray} but using the |longtblr| environment + Like \refKey{csvsim/tabularray} but using the |longtblr| environment from the package \ctanpkg{tabularray} (not loaded automatically). \end{docCsvKey} \begin{docCsvKey}[][doc new=2021-07-06]{centered tabularray}{=\meta{table format}}{style, no default} - Like \refKey{/csvsim/tabularray} but inside an additional |center| environment. + Like \refKey{csvsim/tabularray} but inside an additional |center| environment. \end{docCsvKey} \begin{docCsvKey}{no table}{}{style, no value} Deactivates |tabular|-like environments activated by - \refKey{/csvsim/tabular}, \refKey{/csvsim/longtable}, etc. - Note that not all settings of \refKey{/csvsim/tabularray} are reverted. + \refKey{csvsim/tabular}, \refKey{csvsim/longtable}, etc. + Note that not all settings of \refKey{csvsim/tabularray} are reverted. \end{docCsvKey} @@ -1663,8 +1668,8 @@ The following example displays the last three line numbers: \begin{docCsvKey}[][doc new=2021-09-09]{table centered}{\colOpt{=true\textbar false}}{default |true|, initially |false|} If |true|, the table is put inside an additional |center| environment. - This environment begins before \refKey{/csvsim/before table} - and ends after \refKey{/csvsim/after table}. The predefined |tabular|-like environments + This environment begins before \refKey{csvsim/before table} + and ends after \refKey{csvsim/after table}. The predefined |tabular|-like environments from Section~\fullref{subsubsec:table_predef} use this option internally, i.e. \mbox{|centered tabular={ccc}|} is identical to \mbox{|tabular={ccc}, table centered|}. @@ -1682,11 +1687,11 @@ are described with predefined keys. The following keys allow to use further Surrounds the CSV processing with \cs{begin}\marg{name} at begin and with \cs{end}\marg{name} at end. Additionally, the commands defined by the key values of - \refKey{/csvsim/before table}, \refKey{/csvsim/table head}, \refKey{/csvsim/table foot}, - and \refKey{/csvsim/after table} are executed at the appropriate places. - \refKey{/csvsim/late after line} is set to \cs{}\cs{}.\par + \refKey{csvsim/before table}, \refKey{csvsim/table head}, \refKey{csvsim/table foot}, + and \refKey{csvsim/after table} are executed at the appropriate places. + \refKey{csvsim/late after line} is set to \cs{}\cs{}.\par If the environment \meta{name} takes options, these have to be set using - \refKey{/csvsim/generic table options}. + \refKey{csvsim/generic table options}. \begin{dispListing} % The `tabular` environment would be used like the following example @@ -1698,11 +1703,11 @@ are described with predefined keys. The following keys allow to use further \end{docCsvKey} -\begin{docCsvKey}[][doc new=2021-09-09]{generic collected table}{=\meta{name}}{no default, initially empty} - Like \refKey{/csvsim/generic table} but for environments which need +\begin{docCsvKey}[][doc new and updated={2021-09-09}{2023-12-18}]{generic collected table}{=\meta{name}}{no default, initially empty} + Like \refKey{csvsim/generic table} but for environments which need collected content, e.g. |tblr| from package \ctanpkg{tabularray}, see \Fullref{sec:datacollection}. - Note that \refKey{/csvsim/after reading} is set to use the collected - data immediately. + Note that \refKey{csvsim/consume collected data} is set to |true| to + use the collected data immediately. \begin{dispListing} % The `tblr` environment from package `tabularray` would be used @@ -1717,7 +1722,7 @@ are described with predefined keys. The following keys allow to use further \begin{docCsvKey}[][doc new=2021-09-09]{generic table options}{=\marg{code}}{no default, initially empty} Places \meta{code} immediately after \cs{begin}\marg{name} set up with - \refKey{/csvsim/generic table} or \refKey{/csvsim/generic collected table}. + \refKey{csvsim/generic table} or \refKey{csvsim/generic collected table}. \meta{code} may contain any parameters the environment \meta{name} needs to have. \textbf{\color{red!50!black}You are strongly advised to use an extra pair of curly brackets \marg{code} around \meta{code}}, because the outer pair of braces is @@ -1812,8 +1817,8 @@ completeness, but are unlikely to be used directly. } Reads the whole CSV file denoted \meta{file name} with an automated formatting using the required |tabularray| package. - \refKey{/csvsim/autotabularray} uses the \docAuxEnvironment*{tblr} environment and - \refKey{/csvsim/autolongtabularray} uses the \docAuxEnvironment*{longtblr} environment. + \refKey{csvsim/autotabularray} uses the \docAuxEnvironment*{tblr} environment and + \refKey{csvsim/autolongtabularray} uses the \docAuxEnvironment*{longtblr} environment. The star variants treat the first line as data line and not as header line. \end{docCsvKeys} @@ -1939,7 +1944,7 @@ as normal characters (|\catcode| 12, other), if one or more of the following opt \medskip \item\docValue{tab}: Sets the separator to the tabulator sign. - Automatically, \refKey{/csvsim/respect tab} is set also. + Automatically, \refKey{csvsim/respect tab} is set also. \clearpage \item\docValue{space}:\tcbdocmarginnote{\tcbdocnew{2023-05-08}} @@ -1996,9 +2001,9 @@ as normal characters (|\catcode| 12, other), if one or more of the following opt \begin{docCsvKey}{preprocessor}{=\meta{macro}}{no default} Defines a preprocessor for the given CSV file. The \meta{macro} has to have two mandatory arguments. The first argument - is the original CSV file which is set by \refKey{/csvsim/file}. + is the original CSV file which is set by \refKey{csvsim/file}. The second argument is the preprocessed CSV file - which is set by \refKey{/csvsim/preprocessed file}.\par\smallskip + which is set by \refKey{csvsim/preprocessed file}.\par\smallskip Typically, the \meta{macro} may call an external program which preprocesses the original CSV file (e.\,g. sorting the file) and creates the preprocessed CSV file. The later file is used by \refCom{csvreader} @@ -2043,7 +2048,7 @@ First, one should consider the appropriate \emph{place} for sorting: \end{itemize} The first two methods are decoupled from anything concerning |csvsimple-l3|. -For the third method, the \refKey{/csvsim/preprocessor} option is made for. +For the third method, the \refKey{csvsim/preprocessor} option is made for. This allows to access an external tool for sorting. \emph{Which tool} is your choice. @@ -2112,10 +2117,10 @@ following options. \begin{itemize} \item \csvsorter\ uses the given CSV file as input file. \item \csvsorter\ uses \meta{file name} as configuration file. - \item The output CSV file is denoted by \refKey{/csvsim/preprocessed file} + \item The output CSV file is denoted by \refKey{csvsim/preprocessed file} which is by default \texttt{\textbackslash\detokenize{jobname_sorted.csv}}. This output file is this actual file processed by \refCom{csvreader} or \refCom{csvloop}. - \item \csvsorter\ also generates a log file denoted by \refKey{/csvsim/csvsorter log} which is by default |csvsorter.log|. + \item \csvsorter\ also generates a log file denoted by \refKey{csvsim/csvsorter log} which is by default |csvsorter.log|. \end{itemize} \par\medskip\textbf{First example:} @@ -2185,7 +2190,7 @@ following options. \clearpage \begin{docCsvKey}{new sorting rule}{=\marg{name}\marg{file name}}{style, initially unset} This is a convenience option to generate a new shortcut for often used -\refKey{/csvsim/sort by} applications. It also adds a more semantic touch. +\refKey{csvsim/sort by} applications. It also adds a more semantic touch. The new shortcut option is \tcbox[on line,size=small,colback=white,colframe=red]{|sort by| \meta{name}} which expands to \tcbox[on line,size=small,colback=white,colframe=red]{|sort by=|\marg{file name}}.\par\medskip @@ -2209,7 +2214,7 @@ Now, we can use the new rule: \begin{docCommand}[doc new=2021-06-28]{csvsortingrule}{\marg{name}\marg{file name}} - Identical in function to \refKey{/csvsim/new sorting rule}, see above. + Identical in function to \refKey{csvsim/new sorting rule}, see above. A good place for setting up a new sorting rule would be inside the preamble: \csvsortingrule{name}{namesort.xml} @@ -2235,29 +2240,31 @@ the \ctanpkg{tabularray} package, collecting the data from the CSV file into a m This macro can be given to the target application for further processing. -\begin{docCsvKey}[][doc new=2021-07-06]{collect data}{\colOpt{=true\textbar false}}{default |true|, initially |false|} +\begin{docCsvKey}[][doc new and updated={2021-07-06}{2023-10-17}]{collect data}{\colOpt{=true\textbar false}}{default |true|, initially |false|} |csvsimple-l3| provides limited and experimental support to collect the input data from the CSV file plus user additions into a macro named \refCom{csvdatacollection}. -Setting \refKey{/csvsim/collect data} adds the contents of the following keys +Setting \refKey{csvsim/collect data} adds the contents of the following keys to \refCom{csvdatacollection}: \begin{itemize} -\item\refKey{/csvsim/after head} -\item\refKey{/csvsim/after line} -\item\refKey{/csvsim/before first line} -\item\refKey{/csvsim/before line} -\item\refKey{/csvsim/late after first line} -\item\refKey{/csvsim/late after head} -\item\refKey{/csvsim/late after last line} -\item\refKey{/csvsim/late after line} +\item\refKey{csvsim/after head} +\item\refKey{csvsim/after first line} +\item\refKey{csvsim/after line} +\item\refKey{csvsim/before first line} +\item\refKey{csvsim/before line} +\item\refKey{csvsim/late after first line} +\item\refKey{csvsim/late after head} +\item\refKey{csvsim/late after last line} +\item\refKey{csvsim/late after line} \end{itemize} Also, the \emph{expanded} content of \begin{itemize} -\item\refKey{/csvsim/command} +\item\refKey{csvsim/command} \end{itemize} -is added to \docAuxCommand{csvdatacollection}. -Note that for \refKey{/csvsim/command} special care has to be taken +is added to \refCom{csvdatacollection} +(depending on \refKey{csvsim/consume collected data} and \refKey{csvsim/data collection}). +Note that for \refKey{csvsim/command} special care has to be taken \emph{what} should be protected from expansion and \emph{what not}. -Observe the following hints for \refKey{/csvsim/command}: +Observe the following hints for \refKey{csvsim/command}: \begin{itemize} \item For data macros like |\csvcoli| use |\csvexpval\csvcoli| to add the \emph{value} of this macro to \refCom{csvdatacollection}. @@ -2284,14 +2291,22 @@ Collected data:\par \end{dispExample} Note that data collection is \emph{limited} to some special cases and does not -allow to save all possible content. Table options like \refKey{/csvsim/longtable} -are generally not supported with the important exception of \refKey{/csvsim/tabularray} -which uses \refKey{/csvsim/collect data} automatically.\par +allow to save all possible content. Table options like \refKey{csvsim/longtable} +are generally not supported with the important exception of \refKey{csvsim/tabularray} +which uses \refKey{csvsim/collect data} automatically.\par See \Fullref{sec:tabularray} for examples. \end{docCsvKey} \clearpage +\begin{docCsvKey}[][doc new={2023-12-18}]{consume collected data}{\colOpt{=true\textbar false}}{default |true|, initially |false|} +If set to |false|, the collected data of a CSV file processed with +\refKey{csvsim/collect data} is saved into \refCom{csvdatacollection}.\par +Otherwise, if set to |true|, the collected data is not saved, but directly used +after reading the CSV file, see \refKey{csvsim/generic collected table}. +\end{docCsvKey} + + \begin{docCsvKey}[][doc new=2021-07-06]{data collection}{=\meta{macro}}{no default, initially \refCom{csvdatacollection}} Sets the collection macro to an alternative for \refCom{csvdatacollection}. \begin{dispListing} @@ -2302,14 +2317,14 @@ Sets the collection macro to an alternative for \refCom{csvdatacollection}. \begin{docCommand}[doc new=2021-07-06]{csvdatacollection}{} Macro which contains the collected data of a CSV file processed with - \refKey{/csvsim/collect data}. This macro name can be changed by - setting \refKey{/csvsim/data collection}. + \refKey{csvsim/collect data}. This macro name can be changed by + setting \refKey{csvsim/data collection}. \end{docCommand} -\begin{docCommand}[doc new=2021-07-06]{csvexpval}{\meta{macro}} +\begin{docCommand}[doc new and updated={2021-07-06}{2023-12-17}]{csvexpval}{\meta{macro}} Recovers the content of the given \meta{macro} and prevents further - expansion. This is a wrapper for \docAuxCommand*{exp_not:V}. + expansion. This is a wrapper for \docAuxCommand*{exp_not:o}. Alternatively, |\expandonce| from \ctanpkg{etoolbox} could be used. \end{docCommand} @@ -2321,90 +2336,128 @@ Sets the collection macro to an alternative for \refCom{csvdatacollection}. \end{docCommand} The following macros can only be used inside keys which are \emph{not} -collected to \refCom{csvdatacollection}, e.g. inside \refKey{/csvsim/after filter}. +collected to \refCom{csvdatacollection}, e.g. inside \refKey{csvsim/after filter}. -\begin{docCommand}[doc new=2021-07-06]{csvcollectn}{\marg{code}} +\begin{docCommand}[doc new and updated={2021-07-06}{2023-12-17}]{csvcollectn}{\marg{code}} Appends the given \meta{code} to \refCom{csvdatacollection}.\\ - This corresponds to \docAuxCommand*{tl_gput_right:Nn}. + This corresponds to \docAuxCommand*{tl_build_gput_right:Nn}. \end{docCommand} -\begin{docCommand}[doc new=2021-07-06]{csvcollectx}{\marg{code}} +\begin{docCommands}[ + doc parameter = \marg{code} + ] + { + { doc name = csvcollecte, doc new and updated = {2021-07-06}{2023-12-18} }, + { doc name = csvcollectx } + } Appends the expansion of the given \meta{code} to \refCom{csvdatacollection}.\\ - This corresponds to \docAuxCommand*{tl_gput_right:Nx}. -\end{docCommand} + This corresponds to \docAuxCommand*{tl_build_gput_right:Ne}.\\ + \refCom{csvcollectx} is an alias for \refCom{csvcollecte} and is kept for backward compatibility. +\end{docCommands} -\begin{docCommand}[doc new=2021-07-06]{csvcollectV}{\meta{macro}} +\begin{docCommand}[doc new and updated={2021-07-06}{2023-12-17}]{csvcollectV}{\meta{macro}} Appends the content of the given \meta{macro} to \refCom{csvdatacollection}.\\ - This corresponds to \docAuxCommand*{tl_gput_right:NV}. + This corresponds to \docAuxCommand*{tl_build_gput_right:Ne} and \docAuxCommand*{exp_not:o} for + \meta{macro}. \end{docCommand} \clearpage \section{String and Number Tests}\label{sec:stringtests}% -The following string tests are complementing the string tests -from packages like |etoolbox|. They all do the same, i.e., -comparing expanded strings for equality. To some extent, they are -provided for backward compatibility. -\begin{itemize} -\item\refCom{ifcsvstrcmp} may be the most efficient method, because it uses - the native compiler string comparison (if available). -\item\refCom{ifcsvstrequal} does not rely on a compiler. It also is the - fallback implementation for \refCom{ifcsvstrcmp}, if there is no - native comparison method. -\item\refCom{ifcsvprostrequal} is possibly more failsafe than the other two - string tests. It may be used, if strings contain dirty things like |\textbf{A}|. -\end{itemize} +The following string and number tests are, to some extent, provided for +backward compatibility. +Mainly, they are wrappers for corresponding |expl3| conditionals. +Therefore, you are encouraged to use the following CamelCase macros +like \refCom{IfCsvsimStrEqualTF} which provide by their name insight +to the underlying |expl3| functions. The lowercase variants are kept +for backward compatibility. \medskip -\begin{docCommand}[doc new and updated={2016-07-01}{2021-06-28}]{ifcsvstrcmp}{\marg{stringA}\marg{stringB}\marg{true}\marg{false}} + +\begin{docCommands}[ + doc parameter = \marg{string A}\marg{string B}\marg{true}\marg{false} + ] + { + { doc name = IfCsvsimStrEqualTF, doc new and updated = {2016-07-01}{2023-12-19} }, + { doc name = ifcsvstrcmp, color command=black } + } Compares two strings and executes \meta{true} if they are equal, and \meta{false} otherwise. - The comparison is done using |\str_compare:eNeTF|. - \refCom{ifcsvstrcmp} is expandable. -\end{docCommand} + The comparison is done using |\str_if_eq:eeTF|. + \refCom{IfCsvsimStrEqualTF} is expandable. + Typically, this is the preferred function for many use cases. +\end{docCommands} -\begin{docCommand}[doc new and updated={2016-07-01}{2021-06-28}]{ifcsvnotstrcmp}{\marg{stringA}\marg{stringB}\marg{true}\marg{false}} +\begin{docCommand}[doc new and updated={2016-07-01}{2021-06-28},color command=black]{ifcsvnotstrcmp}{\marg{string A}\marg{string B}\marg{true}\marg{false}} Compares two strings and executes \meta{true} if they are \emph{not} equal, and \meta{false} otherwise. - The implementation uses \refCom{ifcsvstrcmp}. - \refCom{ifcsvstrcmp} is expandable. + The implementation uses \refCom{IfCsvsimStrEqualTF}. + \refCom{ifcsvnotstrcmp} is expandable. + Consider using \refCom{IfCsvsimStrEqualTF} alternatively. \end{docCommand} -\begin{docCommand}[doc new and updated={2016-07-01}{2021-06-28}]{ifcsvstrequal}{\marg{stringA}\marg{stringB}\marg{true}\marg{false}} - Compares two strings and executes \meta{true} if they are equal, and \meta{false} otherwise. - The strings are expanded - and the comparison is done using |\tl_if_eq:NNTF|. - \refCom{ifcsvstrequal} is not expandable. -\end{docCommand} +\begin{docCommands}[ + doc parameter = \marg{token list A}\marg{token list B}\marg{true}\marg{false} + ] + { + { doc name = IfCsvsimTlEqualTF, doc new and updated = {2016-07-01}{2023-12-19} }, + { doc name = ifcsvstrequal, color command=black } + } + Compares two token lists and executes \meta{true} if they are equal, and \meta{false} otherwise. + The comparison is done using |\tl_if_eq:eeTF|. + \refCom{IfCsvsimTlEqualTF} is not expandable. + If you have no special reason for using a token list comparison, where + characters and category codes of those characters are compared, you may + rather choose \refCom{IfCsvsimStrEqualTF}. +\end{docCommands} -\begin{docCommand}[doc new and updated={2016-07-01}{2021-06-28}]{ifcsvprostrequal}{\marg{stringA}\marg{stringB}\marg{true}\marg{false}} - Compares two strings and executes \meta{true} if they are equal, and \meta{false} otherwise. - The strings are expanded with |\protected@edef| + +\begin{docCommands}[ + doc parameter = \marg{token list A}\marg{token list B}\marg{true}\marg{false} + ] + { + { doc name = IfCsvsimTlProtectedEqualTF, doc new and updated = {2016-07-01}{2023-12-19} }, + { doc name = ifcsvprostrequal, color command=black } + } + Compares two token lists and executes \meta{true} if they are equal, and \meta{false} otherwise. + The token lists are expanded with |\protected@edef| in the test, i.e. parts of the - strings which are protected stay unexpanded. + token lists which are protected stay unexpanded. The comparison is done using |\tl_if_eq:NNTF|. - \refCom{ifcsvprostrequal} is not expandable. -\end{docCommand} - + \refCom{IfCsvsimTlProtectedEqualTF} is not expandable. +\end{docCommands} -The following number tests are wrappers for corresponding \LaTeX3 conditionals. -\begin{docCommand}[doc new={2021-06-28}]{ifcsvfpcmp}{\marg{floating point expression}\marg{true}\marg{false}} +\begin{docCommands}[ + doc parameter = \marg{floating point expression}\marg{token list B}\marg{true}\marg{false} + ] + { + { doc name = IfCsvsimFpCompareTF, doc new and updated = {2021-06-28}{2023-12-19} }, + { doc name = ifcsvfpcmp, color command=black } + } Evaluates the given \meta{floating point expression} and executes \meta{true} or \meta{false} appropriately. The evaluation is done using |\fp_compare:nTF|. - \refCom{ifcsvfpcmp} is expandable. -\end{docCommand} + \refCom{IfCsvsimFpCompareTF} is expandable. +\end{docCommands} -\begin{docCommand}[doc new={2021-06-28}]{ifcsvintcmp}{\marg{integer expression}\marg{true}\marg{false}} + +\begin{docCommands}[ + doc parameter = \marg{integer expression}\marg{token list B}\marg{true}\marg{false} + ] + { + { doc name = IfCsvsimIntCompareTF, doc new and updated = {2021-06-28}{2023-12-19} }, + { doc name = ifcsvintcmp, color command=black } + } Evaluates the given \meta{integer expression} and executes \meta{true} or \meta{false} appropriately. The evaluation is done using |\int_compare:nTF|. - \refCom{ifcsvintcmp} is expandable. -\end{docCommand} + \refCom{IfCsvsimIntCompareTF} is expandable. +\end{docCommands} + \clearpage @@ -2472,13 +2525,13 @@ introduced. \begin{dispExample} % this example requires the tcolorbox package -\newcommand{\ifmale}[2]{\ifcsvstrcmp{\gender}{m}{#1}{#2}} +\newcommand{\ifmale}[2]{\IfCsvsimStrEqualTF{\gender}{m}{#1}{#2}} \csvreader[head to column names]{address.csv}{}{% \begin{tcolorbox}[colframe=DarkGray,colback=White,arc=0mm,width=(\linewidth-2pt)/2, equal height group=letter,before=,after=\hfill,fonttitle=\bfseries, adjusted title={Letter to \name}] - \ifcsvstrcmp{\degree}{}{\ifmale{Mr.}{Ms.}}{\degree}~\givenname~\name\\ + \IfCsvsimStrEqualTF{\degree}{}{\ifmale{Mr.}{Ms.}}{\degree}~\givenname~\name\\ \street\\\zip~\location \tcblower {\itshape Dear \ifmale{Sir}{Madam},}\\ @@ -2809,7 +2862,7 @@ Hessen,B,2100 \csvlisting{data_headless} -Note that you cannot use the \refKey{/csvsim/no head} option for the auto tabular +Note that you cannot use the \refKey{csvsim/no head} option for the auto tabular commands. If no options are given, the first line is interpreted as header line which gives an unpleasant result: @@ -2837,8 +2890,8 @@ This example can be extended to insert a table head for this headless data: \clearpage -For the normal \refCom{csvreader} command, the \refKey{/csvsim/no head} option -should be applied. Of course, we cannot use \refKey{/csvsim/head to column names} +For the normal \refCom{csvreader} command, the \refKey{csvsim/no head} option +should be applied. Of course, we cannot use \refKey{csvsim/head to column names} because there is no head, but the columns can be addressed by their numbers: \begin{dispExample} @@ -2858,11 +2911,11 @@ because there is no head, but the columns can be addressed by their numbers: \subsection{Tables with \texttt{tabularray}}\label{sec:tabularray}% The \ctanpkg{tabularray} package gives extended control for generating -tables. \refKey{/csvsim/tabularray} and \refKey{/csvsim/centered tabularray} +tables. \refKey{csvsim/tabularray} and \refKey{csvsim/centered tabularray} support such tables. A distinctiveness is that for \ctanpkg{tabularray} data from a CSV file has to be \emph{collected} first (into a macro) and applied afterwards. The process is hidden from the user view, but -has to be taken into account when \refKey{/csvsim/command} is set up, +has to be taken into account when \refKey{csvsim/command} is set up, see \Fullref{sec:datacollection}. The following examples uses |data.csv| from \Fullref{sec:examgrapghpres}. @@ -2882,7 +2935,7 @@ The following examples uses |data.csv| from \Fullref{sec:examgrapghpres}. }, table head = {\SetCell[c=4]{c} Important Data Table \\}, ]{data.csv}{}{ - \ifcsvstrcmp{\group}{A}{\csvexpnot\SetRow{brown7}}{} + \IfCsvsimStrEqualTF{\group}{A}{\csvexpnot\SetRow{brown7}}{} \csvexpnot\SetCell{bg=purple7} \csvexpval\land & \csvexpval\group @@ -2894,16 +2947,16 @@ The following examples uses |data.csv| from \Fullref{sec:examgrapghpres}. Note in the example above that \begin{itemize} -\item \refKey{/csvsim/table head} is \emph{collected} unexpanded, i.e. +\item \refKey{csvsim/table head} is \emph{collected} unexpanded, i.e. |\SetCell| has not to be protected. On the other hand, CSV data could not be used here. -\item \refKey{/csvsim/command} is \emph{collected} expanded. This is identical +\item \refKey{csvsim/command} is \emph{collected} expanded. This is identical to the mandatory last argument of \refCom{csvreader}. \begin{itemize} \item Therefore, expansion of |\SetRow|, |\SetCell|, etc. is prevented by \refCom{csvexpnot}. \item The \emph{values} (content) of |\land|, |\group|, etc. are recovered by \refCom{csvexpval}. - \item |\ifcsvstrcmp| and |\fpeval| are \emph{expandable} and therefore the + \item |\IfCsvsimStrEqualTF| and |\fpeval| are \emph{expandable} and therefore the results of these commands are \emph{collected}. \item |\tablenum| from \ctanpkg{siunitx} is a robust command and therefore needs no protection. If you are not sure, if a command is robust or not, it @@ -2973,7 +3026,7 @@ optional argument. \csvautotabularray[table centered]{data.csv} [ row{odd} = {blue!85!gray!7}, - row{1} = {blue!50!gray!25, font=\bfseries}, + row{1} = {blue!50!gray!25, font=\bfseries, preto=\MakeUppercase}, hline{1,Z} = {0.1em, blue!50!black}, hline{2} = {blue!50!black} ] diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf b/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf index a2b995531c..7079052a74 100644 Binary files a/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf and b/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf differ diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.sty b/macros/latex/contrib/csvsimple/csvsimple-legacy.sty index f47d7540bd..28b5562b5d 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-legacy.sty +++ b/macros/latex/contrib/csvsimple/csvsimple-legacy.sty @@ -1,8 +1,8 @@ -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple-legacy.sty: Simple LaTeX CSV file processing (LaTeX2e) %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -18,7 +18,7 @@ %% This work consists of all files listed in README.md %% \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{csvsimple-legacy}[2023/10/16 version 2.5.0 LaTeX2e CSV file processing] +\ProvidesPackage{csvsimple-legacy}[2024/01/19 version 2.6.0 LaTeX2e CSV file processing] %---- check package diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.tex b/macros/latex/contrib/csvsimple/csvsimple-legacy.tex index 290d512fb5..caa65712ec 100644 --- a/macros/latex/contrib/csvsimple/csvsimple-legacy.tex +++ b/macros/latex/contrib/csvsimple/csvsimple-legacy.tex @@ -1,10 +1,10 @@ % \LaTeX-Main\ % !TeX encoding=UTF-8 -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple.tex: Manual %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/csvsimple/csvsimple.pdf b/macros/latex/contrib/csvsimple/csvsimple.pdf index e4b5badc01..7f4023fd07 100644 Binary files a/macros/latex/contrib/csvsimple/csvsimple.pdf and b/macros/latex/contrib/csvsimple/csvsimple.pdf differ diff --git a/macros/latex/contrib/csvsimple/csvsimple.sty b/macros/latex/contrib/csvsimple/csvsimple.sty index 1d3840f1eb..60776f67ce 100644 --- a/macros/latex/contrib/csvsimple/csvsimple.sty +++ b/macros/latex/contrib/csvsimple/csvsimple.sty @@ -1,8 +1,8 @@ -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple.sty: Simple LaTeX CSV file processing %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -17,9 +17,8 @@ %% %% This work consists of all files listed in README.md %% -\RequirePackage{l3keys2e} - -\ProvidesExplPackage{csvsimple}{2023/10/16}{2.5.0} +\NeedsTeXFormat{LaTeX2e}[2022-06-01] +\ProvidesExplPackage{csvsimple}{2024/01/19}{2.6.0} {LaTeX CSV file processing} \cs_if_exist:NT \c__csvsim_package_expl_bool @@ -36,14 +35,16 @@ \tex_endinput:D } -\keys_define:nn { csvsimple } +\tl_new:N \l__csvsim_package_expl_tl + +\DeclareKeys { l3 .code:n = \tl_set:Nn \l__csvsim_package_expl_tl { l3 }, legacy .code:n = \tl_set:Nn \l__csvsim_package_expl_tl { legacy }, } -\keys_set:nn { csvsimple } { legacy } +\SetKeys{ legacy } -\ProcessKeysPackageOptions { csvsimple } +\ProcessKeyOptions \RequirePackage{csvsimple-\l__csvsim_package_expl_tl} diff --git a/macros/latex/contrib/csvsimple/csvsimple.tex b/macros/latex/contrib/csvsimple/csvsimple.tex index 7e4e93d1ed..7d34586a42 100644 --- a/macros/latex/contrib/csvsimple/csvsimple.tex +++ b/macros/latex/contrib/csvsimple/csvsimple.tex @@ -1,10 +1,10 @@ % \LaTeX-Main\ % !TeX encoding=UTF-8 -%% The LaTeX package csvsimple - version 2.5.0 (2023/10/16) +%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19) %% csvsimple.tex: Manual %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2008-2023 by Prof. Dr. Dr. Thomas F. Sturm +%% Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index a8dad994d6..0889094f34 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -15,7 +15,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2024/01/18}{2024K} +\ProvidesExplClass{easybook}{2024/01/19}{2024L} {Easily typesetting Chinese theses or books} \bool_set_false:N \l__eb_compile_draft_bool @@ -302,7 +302,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplPackage{easybase}{2024/01/18}{2024K} +\ProvidesExplPackage{easybase}{2024/01/19}{2024L} {Easily typesetting Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -323,12 +323,6 @@ \seq_set_from_clist:Nn \l_tmpa_seq {#1} \seq_map_inline:Nn \l_tmpa_seq {#2} } -\cs_new_protected:Npn \eb_char_patch_cmd:Nnn #1#2#3 - { - \ExplSyntaxOn\makeatletter - \eb_patch_cmd:Nnn {#1} {#2} {#3} - \ExplSyntaxOff\makeatother - } \cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3 { \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} @@ -1670,14 +1664,9 @@ {O{Appendix\space}D(){\Alph{chapter}}} { \ctex_assign_heading_name:nn { biappendix } {#1} - \int_compare:nNnTF { \c@chapter } > { 0 } + \bool_if:NTF \l__eb_class_mode_book_bool { - \eb_char_patch_cmd:Nnn \CTEX@addbitocline - { - \def\CTEX@prechapter{\CTEX@prebichapter} - \def\CTEX@thechapter{\CTEX@bichapter@number} - \def\CTEX@postchapter{\CTEX@postbichapter} - } + \eb_preto_cmd:nn { eb@before@addbitoc@hook } { \def\CTEX@prechapter{\CTEX@prebiappendix} \def\CTEX@thechapter{#2} @@ -2334,7 +2323,7 @@ } % %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/18}{2024K} +\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/19}{2024L} {Customization of tcolorbox for easybook} \cs_set_protected:Npn \addtotcbstyle #1#2 diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf index 265c1e40d0..55a91f1b6b 100644 Binary files a/macros/latex/contrib/easybook/easybook.pdf and b/macros/latex/contrib/easybook/easybook.pdf differ diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex index 60c949af32..0387b7301c 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -23,8 +23,8 @@ name = easybook, color-scheme = blue, title = EASYBOOKδ½Ώη”¨ζ‰‹ε†Œ, - version = v2024K, - date = 2024/01/18, + version = v2024L, + date = 2024/01/19, authors = ηžΏζ―…, info = η€δΎΏεœ°ζŽ’η‰ˆδΈ­ζ–‡ε­¦δ½θΊζ–‡ζˆ–书籍, email = toquyi@163.com, @@ -1350,9 +1350,10 @@ \shortversion{v = 1.638,date = 2022/03/04,changes = 咞加η›ε½•ζ‘η›ζ ·εΌι€‰ι‘Ήζ³¨ε†Œε‘½δ»€ \cs{RegisterTocName}。} \shortversion{v = 1.644,date = 2022/03/10,changes = 咞加ζ΅εŠ¨ηŽ―ε’ƒη›ε½•ε£°ζ˜Žε‘½δ»€ \cs{DeclareFloatList} ι…εˆ \pkg*{caption} εεŒ…。} \shortversion{v = 1.682,date = 2022/05/01,changes = ε°†θΏ·δ½ ι‘΅εˆ€ζ–­ε‘½δ»€ \cs{notminipage} ζ”ΉδΈΊθ’«δΏζŠ€ε‘½δ»€ε…ΌεΉ \pkg*{circledtext} εεŒ…。} - \begin{version}[v = 2024K,date = 2024/01/18,simple] + \begin{version}[v = 2024L,date = 2024/01/19,simple] \item 核对依衖εεŒ…ηš„ζ›΄ζ–°ζ”ΉεŠ¨οΌŒδΌ˜εŒ–δ½Ώη”¨ζ‰‹ε†Œηš„ε†…εΉη»†θŠ‚。 \item δΏε€ε›Ύθ‘¨η­‰ζ΅εŠ¨ηŽ―ε’ƒι’˜ζ³¨η›ε½•δΈ­ζ‘η›ζ ‡η­ΎηΌ–ε·ηš„θ‘ζ•°ε™¨ε€Όζ˜Ύη€Ίι”™θ――ι—ι’˜γ€‚ + \item δΏε€ι™„录命什 \cs{appendix} ηš„ε―ι€‰ε‚ζ•°θΎη½θ‹±ζ–‡η›ε½•δΈ­ζ‘η›εε­—ε’ŒηΌ–ε·ε€±ζ•ˆηš„ι—ι’˜γ€‚ \item ζ–°ε’žη›ε½•ι£Žζ ΌεšδΉ‰ε‘½δ»€ \cs{SetTocStyle} ε’Œδ½Ώη”¨ε‘½δ»€ \cs{UseTocStyle}。 \end{version} \end{changelog} diff --git a/macros/latex/contrib/metalogox/README.txt b/macros/latex/contrib/metalogox/README.txt index 1b67dd9b6b..18c947b32b 100644 --- a/macros/latex/contrib/metalogox/README.txt +++ b/macros/latex/contrib/metalogox/README.txt @@ -1,8 +1,8 @@ The LaTeX metalogox package Automatically adjusts the TeX logo and related, depending on the font. -v1.02 -Copyright 2019, 2023--2024 Brian Dunn β€” https://github.com/bdtc/metalogox +v1.03 +Copyright 2019, 2023–2024 Brian Dunn β€” https://github.com/bdtc/metalogox LaTeX Project Public License, version 1.3 The metalogox package extends the metalogo package to automatically adjust diff --git a/macros/latex/contrib/metalogox/metalogox.dtx b/macros/latex/contrib/metalogox/metalogox.dtx index b036b6685f..471107229a 100644 --- a/macros/latex/contrib/metalogox/metalogox.dtx +++ b/macros/latex/contrib/metalogox/metalogox.dtx @@ -16,7 +16,7 @@ % \iffalse %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{metalogox} -% [2024/01/12 v1.02 Extends the metalogo package with font detection.] +% [2024/01/19 v1.03 Extends the metalogo package with font detection.] % %<*driver> \documentclass{ltxdoc} @@ -127,6 +127,7 @@ pageanchor=true, \usepackage{\mypackagename} +\makeatletter \newcommand*{\onetex}[3]{% \usefont{T1}{#1}{m}{#3}% \adjustlogos{default}% @@ -136,6 +137,7 @@ pageanchor=true, \autoadjustlogos% \LaTeXe \\ } +\makeatother \newcommand*{\textblue}[1]{\textcolor{blue!70!black}{#1}} @@ -158,6 +160,10 @@ pageanchor=true, % \changes{v1.01}{2023/01/03}{\ 2023/01/03} % \changes{v1.02}{2024/01/12}{Updated contact info.} % \changes{v1.02}{2024/01/12}{\ 2024/01/12} +% \changes{v1.03}{2024/01/18}{Improved TOC change log and index entries.} +% \changes{v1.03}{2024/01/18}{Added Atkinson Hyperlegible, Charis SIL, Cuprum, +% Eczar, Ibarra, Inria, Inter, MLModern, Nunito, Oswald.} +% \changes{v1.03}{2024/01/19}{2024/01/19} @@ -192,11 +198,11 @@ pageanchor=true, % Font & Default & \pkg{metalogox} \\ \midrule % Latin Modern & \onetex{lmr}{lmodern}{n} % Erewhon & \onetex{erewhon-TLF}{utopia}{n} -% Libre Caslon & \onetex{LibreCaslonText-TLF}{baskerville}{n} +% Libre Caslon & \onetex{LibreCsln-TLF}{baskerville}{n} % IM Fell English & \onetex{IMFELLEnglish-TLF}{baskerville}{n} % Coelacanth & \onetex{Coelacanth-TLF}{coelacanth}{n} % Alegreya & \onetex{Alegreya-TLF}{alegreya}{n} -% Helvetica & \onetex{phv}{helvetica}{sf} +% Helvetica & \onetex{phv}{helvetica}{n} % Antiqua & \onetex{uaq}{antiqua}{n} % \bottomrule % \end{tabular} @@ -342,10 +348,23 @@ pageanchor=true, % % \item Since the same settings are usually shared by many fonts, % some logos may not be perfect. +% +% \item If a font is not known by \pkg{metalogox} then a warning is issued, +% and a few common options are recommended. +% +% \item Please contact the author of \pkg{metalogox} if an unknown font is found, +% \margintag{Unknown font?} +% especially if it is a common font, as sometimes the font family names +% are changed. See the contact link on the title page of this document. % \end{itemize} % % -% \StopEventually{\PrintChanges\PrintIndex} +% \StopEventually{ +% \appendix +% \GlossaryPrologue{\section{Change History}} +% \PrintChanges +% \IndexPrologue{\section{Index}} +% \PrintIndex} % % \clearpage % @@ -1149,6 +1168,14 @@ pageanchor=true, % % \subsection{Font detection} % + +% \DescribeBoolean{MLX@@foundfont} Found the font? +% \changes{v1.03}{2024/01/18}{Warning if font was not found.} +% \begin{macrocode} +\newbool{MLX@@foundfont} +% \end{macrocode} + + % \begin{macro}{\MLX@@detectvariant} % \marg{1: family} \marg{2: variant} \marg{3: name} \marg{4: setting} % @@ -1156,9 +1183,11 @@ pageanchor=true, % % (The doubled |@| is to distinguish this from a valid \pkg{metalogox} option.) % +% \changes{v1.03}{2024/01/18}{Warning if font was not found.} % \begin{macrocode} \newcommand*{\MLX@@detectvariant}[4]{% \ifdefstring{\MLX@@thisfont}{#1#2}{% + \booltrue{MLX@@foundfont}% \PackageInfo{metalogox}{Detected #1#2, #3. Using #4}% \adjustlogos{#4}% }{}% @@ -1185,6 +1214,7 @@ pageanchor=true, \MLX@@detectvariant{#1}{Condensed-OsF}{#2}{#3}% \MLX@@detectvariant{#1}{Condensed-TOsF}{#2}{#3}% \MLX@@detectvariant{#1}{(0)}{#2}{#3}% +\MLX@@detectvariant{#1}{(1)}{#2}{#3}% } % \end{macrocode} % \end{macro} @@ -1196,6 +1226,12 @@ pageanchor=true, % \begin{macrocode} \NewDocumentCommand{\autoadjustlogos}{s}{% % \end{macrocode} +% +% Not yet discovered the font: +% \begin{macrocode} +\boolfalse{MLX@@foundfont}% +% \end{macrocode} +% % If starred, use the text body font, else use the local font: % \begin{macrocode} \IfBooleanTF{#1}{% @@ -1204,15 +1240,19 @@ pageanchor=true, \edef\MLX@@thisfont{\f@family}% }% % \end{macrocode} +% % Announce the desired font: % \begin{macrocode} \PackageInfo{metalogox}{Searching for \MLX@@thisfont}% % \end{macrocode} +% % Default if nothing is found: % \begin{macrocode} \adjustlogos{lmodern}% % \end{macrocode} +% % Seach a list of possibilities: +% \changes{v1.03}{2024/01/19}{Updated many fonts for changed family names.} % \begin{macrocode} \MLX@@detectone{AccanthisADFStdNoThree}{accanthis}{accanthis}% \MLX@@detectone{AccanthisADFStdNo3}{accanthis}{accanthis}% @@ -1224,8 +1264,12 @@ pageanchor=true, \MLX@@detectone{AntykwaPoltawskiego}{antpolt}{antpolt}% \MLX@@detectone{antt}{anttor}{antpolt}%% \MLX@@detectone{AntykwaTorunska}{anttor}{antpolt}% +\MLX@@detectone{ArchivZero-OsF}{Archiv0}{helvetica}% +\MLX@@detectone{Archiv0(0)}{Archiv0}{helvetica}% \MLX@@detectone{fav}{arev}{vera}% \MLX@@detectone{Arimo}{Arimo}{helvetica}% +\MLX@@detectone{atkinsn-LF}{Atkinson Hyperlegible}{helvetica}% +\MLX@@detectone{AtkinsonHyperlegible(0)}{Atkinson Hyperlegible}{helvetica}% \MLX@@detectone{pag}{Avant Garde}{avantgarde}% \MLX@@detectone{qag}{tgadventor}{avantgarde}% \MLX@@detectone{ybv}{baskervald}{baskerville}% @@ -1243,14 +1287,17 @@ pageanchor=true, \MLX@@detectone{Cabin}{Cabin}{helvetica}% \MLX@@detectone{CabinCondensed}{CabinCondensed}{helvetica}% \MLX@@detectone{Caladea}{caladea}{baskerville}% -\MLX@@detectone{fca}{cantarell}{helvetica}% +\MLX@@detectone{cantarell}{cantarell}{helvetica}% +\MLX@@detectone{Crlt}{Carlito}{crimson}% \MLX@@detectone{Carlito}{Carlito}{crimson}% +\MLX@@detectone{charssil}{CharisSIL}{times}% +\MLX@@detectone{CharisSIL}{CharisSIL}{times}% \MLX@@detectone{mdbch}{mdbch - Math Design Bitstream Charter}{charter}% \MLX@@detectone{Chivo}{Chivo}{helvetica}% \MLX@@detectone{ClearSans}{Clear Sans}{helvetica}% \MLX@@detectone{Cochineal}{cochineal}{baskerville}% \MLX@@detectone{Coelacanth}{coelacanth}{coelacanth}% -\MLX@@detectone{fco}{comfortaa}{avantgarde}% +\MLX@@detectone{comfortaa}{comfortaa}{avantgarde}% \MLX@@detectone{ComicNeue}{comicneue}{avantgarde}% \MLX@@detectone{cmbr}{Computer Modern Bright}{lmodern}% \MLX@@detectone{lcmss}{Computer Modern Sans Quote}{lmodern}% @@ -1260,17 +1307,20 @@ pageanchor=true, \MLX@@detectone{CormorantGaramond}{CormorantGaramond}{garamond}% \MLX@@detectone{Crimson}{crimson}{crimson}% \MLX@@detectone{CrimsonPro}{CrimsonPro}{crimson}% -% cyklop: default +\MLX@@detectone{cpr}{Cuprum}{utopia}% +\MLX@@detectone{Cuprum(0)}{Cuprum}{utopia}% +\MLX@@detectone{cyklop}{Cyklop}{lmodern}% \MLX@@detectone{DejaVuSerif}{DejaVuSerif}{vera}% \MLX@@detectone{DejaVuSerifCondensed}{DejaVuSerif Condensed}{vera}% \MLX@@detectone{DejaVuSans}{DejaVuSans}{verasans}% -% drm: default -\MLX@@detectone{fdr}{Droid Serif}{droidserif}%% -\MLX@@detectone{fds}{Droid Sans}{droidsans}%% +\MLX@@detectone{drm}{DRM}{lmodern}% +\MLX@@detectone{droidserif}{Droid Serif}{droidserif}%% +\MLX@@detectone{droidsans}{Droid Sans}{droidsans}%% \MLX@@detectone{DroidSerif}{Droid Serif}{droidserif}%% \MLX@@detectone{DroidSans}{Droid Sans}{droidsans}%% \MLX@@detectone{EBGaramond}{EB Garamond}{garamond}% \MLX@@detectone{EBGaramond12}{EB Garamond}{garamond}% +\MLX@@detectone{Eczar(0)}{Eczar}{times}% \MLX@@detectone{erewhon}{erewhon}{utopia}% \MLX@@detectone{Erewhon-Regular}{erewhon}{utopia}% \MLX@@detectone{fbb}{fbb}{baskerville}% @@ -1283,12 +1333,12 @@ pageanchor=true, \MLX@@detectone{futs}{fourier}{utopia}% \MLX@@detectone{fnc}{fouriernc}{newcent}% \MLX@@detectone{gentium}{gentium}{gentium}% -\MLX@@detectone{Gentium}{gentium}{gentium}% +\MLX@@detectone{GentiumPlus}{gentium}{gentium}% \MLX@@detectone{artemisia}{gfsartemisia}{baskerville}% \MLX@@detectone{GFSArtemisia}{gfsartemisia}{baskerville}% \MLX@@detectone{artemisiaeuler}{gfsartemisia}{baskerville}% \MLX@@detectone{bodoni}{gfsbodoni}{bodoni}% -\MLX@@detectone{GFS Bodoni}{gfsbodoni}{bodoni}% +\MLX@@detectone{GFSBodoni}{gfsbodoni}{bodoni}% \MLX@@detectone{udidot}{gfsdidot}{didot}% \MLX@@detectone{FreeSerif}{GNU Freeserif}{times}% \MLX@@detectone{FreeSans}{GNU Freesans}{helvetica}% @@ -1303,7 +1353,12 @@ pageanchor=true, \MLX@@detectone{phv}{helvet}{helvetica}% \MLX@@detectone{Heuristica}{heuristica}{utopia}% \MLX@@detectone{heuristica}{heuristica}{utopia}% +\MLX@@detectone{IbarraRealNova-LF}{Ibarra}{times}% +\MLX@@detectone{IbarraRealNova(0)}{Ibarra}{times}% \MLX@@detectone{IMFELLEnglish}{imfellEnglish}{baskerville}% +\MLX@@detectone{InriaSans}{Inria Sans}{helvetica}% +\MLX@@detectone{InriaSerif}{Inria Serif}{baskerville}% +\MLX@@detectone{Inter}{Inter}{helvetica}% \MLX@@detectone{iwona}{Iwona}{helvetica}% \MLX@@detectone{Iwona}{Iwona}{helvetica}% \MLX@@detectone{IwonaLight}{Iwona}{helvetica}% @@ -1368,6 +1423,7 @@ pageanchor=true, \MLX@@detectone{jkpxos}{kpfonts}{kpfonts}% \MLX@@detectone{jkpxosn}{kpfonts}{kpfonts}% \MLX@@detectone{jkpxvos}{kpfonts}{kpfonts}% +\MLX@@detectone{JosefinSans}{Josefin}{lmodern}% \MLX@@detectone{kurier}{Kurier}{helvetica}% \MLX@@detectone{Kurier}{Kurier}{helvetica}% \MLX@@detectone{KurierLight}{Kurier}{helvetica}% @@ -1380,6 +1436,8 @@ pageanchor=true, \MLX@@detectone{lato}{Lato}{helvetica}% \MLX@@detectone{Lato}{Lato}{helvetica}% \MLX@@detectone{lmr}{lmodern}{lmodern}% +\MLX@@detectone{mlmr}{MLModern}{lmodern}% +\MLX@@detectone{mlmss}{MLModern}{lmodern}% \MLX@@detectone{lmss}{lmodern sans}{lmodernsans}% \MLX@@detectone{lmssq}{lmodern sans}{lmodernsans}% \MLX@@detectone{LatinModernRoman}{Latin Modern Roman}{lmodern}% @@ -1391,9 +1449,11 @@ pageanchor=true, \MLX@@detectone{LibertinusSans}{libertinus-type1}{helvetica}% \MLX@@detectone{libertinusserif}{libertinus-otf}{libertinus}% \MLX@@detectone{libertinussans}{libertinus-otf}{helvetica}% +\MLX@@detectone{LibreBskvl}{librebaskerville}{baskerville}% \MLX@@detectone{LibreBaskerville}{librebaskerville}{baskerville}% \MLX@@detectone{LibreBodoni}{LibreBodoni}{librebodoni}% -\MLX@@detectone{LibreCaslonText}{librecaslon}{baskerville}% +\MLX@@detectone{LibreCaslonText}{Libre Caslon}{baskerville}% +\MLX@@detectone{LibreCsln}{Libre Caslon}{baskerville}% \MLX@@detectone{yly}{libris}{avantgarde}% \MLX@@detectone{llcmss}{LX Fonts}{avantgarde}% \MLX@@detectone{ptm}{mathptmx}{times}% @@ -1401,6 +1461,8 @@ pageanchor=true, \MLX@@detectone{bch}{mdbch}{charter}% \MLX@@detectone{mdput}{mdput - Math Design Utopia}{utopia}% \MLX@@detectone{mdugm}{mdugm - Math Design URW Garamond}{baskerville}% +\MLX@@detectone{Merriwthr}{merriweather}{merriweather}% +\MLX@@detectone{MerriwthrSans}{merriweather}{merriweather}% \MLX@@detectone{Merriweather}{merriweather}{merriweather}% \MLX@@detectone{MerriweatherSans}{merriweather}{merriweather}% \MLX@@detectone{MintSpirit}{Mint Spirit}{avantgarde}% @@ -1410,6 +1472,7 @@ pageanchor=true, \MLX@@detectone{MontserratAlternates}{Montserrat}{helvetica}% \MLX@@detectone{pnc}{newcent}{newcent}% \MLX@@detectone{zpltlf}{newpxtext}{palatino}% +\MLX@@detectone{minntx}{newtxtext}{times}% \MLX@@detectone{ntxtlf}{newtxtext}{times}% \MLX@@detectone{nimbussans}{nimbussans}{helvetica}% \MLX@@detectone{NimbusSans}{nimbusserif}{helvetica}% @@ -1419,9 +1482,14 @@ pageanchor=true, \MLX@@detectone{zhv}{nimbussans}{helvetica}% \MLX@@detectone{NotoSerif}{noto}{noto}% \MLX@@detectone{NotoSans}{noto}{noto}% +\MLX@@detectone{Nunito-TOsF}{Nunito}{helvetica}% +\MLX@@detectone{Nunito(0)}{Nunito}{helvetica}% \MLX@@detectone{OldStandard}{Old Standard}{didot}% \MLX@@detectone{fosj}{opensans}{avantgarde}% +\MLX@@detectone{opensans}{opensans}{avantgarde}% \MLX@@detectone{OpenSans}{Open Sans}{avantgarde}% +\MLX@@detectone{Zeroswald}{Oswald}{utopia}% +\MLX@@detectone{Ovrlck}{Overlock}{avantgarde}% bug with XeLaTeX% \MLX@@detectone{Overlock}{Overlock}{avantgarde}% bug with XeLaTeX% \MLX@@detectone{panr}{pandora}{pandora}% \MLX@@detectone{pss}{pandora}{pandora}% @@ -1432,6 +1500,8 @@ pageanchor=true, \MLX@@detectone{IBMPlexSans}{plex-sans}{plexsans}% \MLX@@detectone{pxr}{pxfonts}{palatino}% \MLX@@detectone{pxss}{pxfonts}{helvetica}% +\MLX@@detectone{Quattro}{quattrocento}{quattrocento}% +\MLX@@detectone{QuattroSans}{quattrocento}{quattrocento}% \MLX@@detectone{Quattrocento}{quattrocento}{quattrocento}% \MLX@@detectone{QuattrocentoSans}{quattrocento}{quattrocento}% \MLX@@detectone{Raleway}{raleway}{helvetica}% @@ -1449,6 +1519,7 @@ pageanchor=true, \MLX@@detectone{stix}{stix}{times}% \MLX@@detectone{stix2}{stix2}{times}% \MLX@@detectone{STIXTwoText}{stix2}{times}% +\MLX@@detectone{pbk}{bookman}{bookman}% \MLX@@detectone{qbk}{tgbonum}{bookman}% \MLX@@detectone{qhv}{tgheros}{helvetica}% \MLX@@detectone{qpl}{tgpagella}{palatino}% @@ -1461,6 +1532,7 @@ pageanchor=true, \MLX@@detectone{TeXGyreSchola}{TeX Gyre Schola}{newcent}% \MLX@@detectone{TeXGyreTermes}{TeX Gyre Termes}{times}% \MLX@@detectone{txr}{txfonts}{times}% +\MLX@@detectone{txss}{txfonts}{times}% \MLX@@detectone{UniversalisADFStd}{Universalis ADF Std}{crimson}% \MLX@@detectone{ugq}{URW Grotesk}{crimson}% \MLX@@detectone{put}{utopia}{utopia}% @@ -1477,6 +1549,23 @@ pageanchor=true, \MLX@@detectone{yvoa}{venturisold}{venturis}% \MLX@@detectone{XCharter}{XCharter}{charter}% \MLX@@detectone{XITS}{XITS}{times}% +% \end{macrocode} +% +% Warning if font was not found: +% \changes{v1.03}{2024/01/18}{Warning if font was not found.} +% \begin{macrocode} +\ifbool{MLX@@foundfont}% + {}% + {% + \PackageWarningNoLine{metalogox} + {% + Did not find font \MLX@@thisfont.\MessageBreak + To improve \string\LaTeX, and related logos:\MessageBreak% + \string\usepackage[option]{metalogox}\MessageBreak% + Common options: times, bookman for serif,\MessageBreak% + helvetica, avantgarde for sans% + } + } } % \end{macrocode} % \end{macro} @@ -1512,8 +1601,6 @@ pageanchor=true, % % \clearpage % ^^A \pagestyle{plain} -% \phantomsection -% \addcontentsline{toc}{section}{Change History and \indexname} % % \pagestyle{plain} % diff --git a/macros/latex/contrib/metalogox/metalogox.pdf b/macros/latex/contrib/metalogox/metalogox.pdf index 8ff317b2ae..19a7a0d596 100644 Binary files a/macros/latex/contrib/metalogox/metalogox.pdf and b/macros/latex/contrib/metalogox/metalogox.pdf differ diff --git a/macros/latex/contrib/tagpdf/README.md b/macros/latex/contrib/tagpdf/README.md index 21be5e7a7d..1b6bdfc3b5 100644 --- a/macros/latex/contrib/tagpdf/README.md +++ b/macros/latex/contrib/tagpdf/README.md @@ -1,6 +1,6 @@ #tagpdf β€” A package to create tagged pdf -Packageversion: 0.98r -Packagedate: 2023/12/18 +Packageversion: 0.98s +Packagedate: 2024/01/19 Author: Ulrike Fischer, LaTeX Project Team ## License diff --git a/macros/latex/contrib/tagpdf/ex-AF-file.pdf b/macros/latex/contrib/tagpdf/ex-AF-file.pdf index 0467680bb7..979b494e16 100644 --- a/macros/latex/contrib/tagpdf/ex-AF-file.pdf +++ b/macros/latex/contrib/tagpdf/ex-AF-file.pdf @@ -1,11 +1,11 @@ %PDF-2.0 %ΜΥΑΤΕΨΠΔΖ 23 0 obj -<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<> /Length 151 >> +<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<> /Length 151 >> stream %% LaTeX2e file `example-input-file.tex' %% generated by the `filecontents' environment -%% from source `ex-AF-file' on 2023/12/18. +%% from source `ex-AF-file' on 2024/01/19. %% Additional info! @@ -15,7 +15,7 @@ endobj << /Type /Filespec /AFRelationship /Unspecified /F /UF /EF<> >> endobj 26 0 obj -<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<> /Length 19 >> +<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<> /Length 19 >> stream BΓ€r with teh shirt endstream @@ -24,7 +24,7 @@ endobj << /Type /Filespec /AFRelationship /Supplement /F /UF /EF<> >> endobj 29 0 obj -<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<> /Length 4 >> +<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<> /Length 4 >> stream Duck endstream @@ -242,17 +242,17 @@ stream - 2023-12-18T16:53:27+01:00 + 2024-01-19T19:56:37+01:00 application/pdf ex-AF-file.tex LaTeX - 2023-12-18T16:53:27+01:00 - 2023-12-18T16:53:27+01:00 - 2023-12-18T16:53:27+01:00 + 2024-01-19T19:56:37+01:00 + 2024-01-19T19:56:37+01:00 + 2024-01-19T19:56:37+01:00 uuid:38d5a844-2217-4081-87cc-b2129dc357a6 - uuid:0e8072c7-0780-4492-8b11-fb55665e5017 + uuid:5cb7d4e3-b534-443a-870e-a511237fa2cf three 1 @@ -350,7 +350,7 @@ endobj << /Type /Namespace /NS (https://www.latex-project.org/ns/inline/2022) /RoleMapNS 19 0 R >> endobj 20 0 obj -<< /Type /Namespace /NS (data:,2E18371-2178-CD86-EAAA-9D751F70709C) >> +<< /Type /Namespace /NS (data:,BBA0C22B-E40B-3CA4-A17D-CA788152A7FF) >> endobj 7 0 obj [ 8 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R ] @@ -452,7 +452,7 @@ endobj << /Type /Catalog /Pages 37 0 R /MarkInfo 38 0 R/Lang (de-DE)/Metadata 32 0 R/StructTreeRoot 5 0 R >> endobj 47 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165327+01'00')/ModDate (D:20231218165327+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195637+01'00')/ModDate (D:20240119195637+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 48 @@ -461,9 +461,9 @@ xref 0000000003 00000 f 0000000004 00000 f 0000000009 00000 f -0000016267 00000 n +0000016268 00000 n 0000013795 00000 n -0000015690 00000 n +0000015691 00000 n 0000014006 00000 n 0000000011 00000 f 0000014074 00000 n @@ -478,34 +478,34 @@ xref 0000015292 00000 n 0000015602 00000 n 0000000000 00000 f -0000015758 00000 n +0000015759 00000 n 0000000020 00000 n 0000000382 00000 n -0000015871 00000 n +0000015872 00000 n 0000000673 00000 n 0000000828 00000 n -0000016003 00000 n +0000016004 00000 n 0000001062 00000 n 0000001202 00000 n -0000016135 00000 n +0000016136 00000 n 0000001436 00000 n 0000013649 00000 n 0000013514 00000 n 0000012908 00000 n -0000020005 00000 n -0000020359 00000 n +0000020006 00000 n +0000020360 00000 n 0000013759 00000 n 0000013852 00000 n 0000013969 00000 n -0000016372 00000 n -0000018821 00000 n -0000016558 00000 n -0000019042 00000 n -0000020159 00000 n -0000020421 00000 n -0000020539 00000 n +0000016373 00000 n +0000018822 00000 n +0000016559 00000 n +0000019043 00000 n +0000020160 00000 n +0000020422 00000 n +0000020540 00000 n trailer -<< /Size 48 /Root 46 0 R /Info 47 0 R /ID [ ] >> +<< /Size 48 /Root 46 0 R /Info 47 0 R /ID [ ] >> startxref -20762 +20763 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf index 19b62f6c22..e80d2fbc03 100644 Binary files a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf and b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf differ diff --git a/macros/latex/contrib/tagpdf/ex-attribute.pdf b/macros/latex/contrib/tagpdf/ex-attribute.pdf index 3fae0d8e3c..5eaa00749b 100644 --- a/macros/latex/contrib/tagpdf/ex-attribute.pdf +++ b/macros/latex/contrib/tagpdf/ex-attribute.pdf @@ -216,17 +216,17 @@ stream - 2023-12-18T16:54:32+01:00 + 2024-01-19T19:57:37+01:00 application/pdf ex-attribute.tex LaTeX - 2023-12-18T16:54:32+01:00 - 2023-12-18T16:54:32+01:00 - 2023-12-18T16:54:32+01:00 + 2024-01-19T19:57:37+01:00 + 2024-01-19T19:57:37+01:00 + 2024-01-19T19:57:37+01:00 uuid:7a9cf910-1c19-429a-8f24-339c62d8a57f - uuid:ac67207c-46f2-43f7-8717-d9fb86bb4927 + uuid:f29497e4-c54a-486e-86fd-a1f59a181a57 three 1 @@ -449,7 +449,7 @@ endobj << /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (de_DE)/Metadata 21 0 R/StructTreeRoot 5 0 R >> endobj 38 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20231218165432+01'00')/ModDate (D:20231218165432+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20240119195737+01'00')/ModDate (D:20240119195737+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 39 @@ -493,7 +493,7 @@ xref 0000017720 00000 n 0000017838 00000 n trailer -<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <87A67E5AF52178AFD399D665CB3CE11A> <87A67E5AF52178AFD399D665CB3CE11A> ] >> +<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <175B3F8B0165F50DA2EA61FEB2DEECC4> <175B3F8B0165F50DA2EA61FEB2DEECC4> ] >> startxref 18075 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf index a1ee76c724..b293fc5d3f 100644 --- a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf +++ b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf @@ -239,17 +239,17 @@ stream - 2023-12-18T16:55:04+01:00 + 2024-01-19T19:58:08+01:00 application/pdf ex-formula-problem.tex LaTeX - 2023-12-18T16:55:04+01:00 - 2023-12-18T16:55:04+01:00 - 2023-12-18T16:55:04+01:00 + 2024-01-19T19:58:08+01:00 + 2024-01-19T19:58:08+01:00 + 2024-01-19T19:58:08+01:00 uuid:8eb2ce1d-b2ec-440a-8bc2-73733eb3eeb0 - uuid:a6776950-c564-4a23-89bd-1070861bab80 + uuid:9aa99a5f-42c4-4b8e-806c-136f2e587e9a three 2 @@ -425,7 +425,7 @@ endobj << /Type /Catalog /Pages 16 0 R /MarkInfo 23 0 R/Lang (de-DE)/Metadata 19 0 R/StructTreeRoot 5 0 R >> endobj 33 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165504+01'00')/ModDate (D:20231218165504+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195808+01'00')/ModDate (D:20240119195808+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 34 @@ -464,7 +464,7 @@ xref 0000018886 00000 n 0000019004 00000 n trailer -<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <7DF556227FCAB9E10CB341987B6AE040> <7DF556227FCAB9E10CB341987B6AE040> ] >> +<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <488A89BFEB9F5F572710D34833184E45> <488A89BFEB9F5F572710D34833184E45> ] >> startxref 19227 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-list.pdf b/macros/latex/contrib/tagpdf/ex-list.pdf index 43dfe42bf8..c42445a6a2 100644 --- a/macros/latex/contrib/tagpdf/ex-list.pdf +++ b/macros/latex/contrib/tagpdf/ex-list.pdf @@ -210,17 +210,17 @@ stream - 2023-12-18T16:55:36+01:00 + 2024-01-19T19:58:39+01:00 application/pdf ex-list.tex LaTeX - 2023-12-18T16:55:36+01:00 - 2023-12-18T16:55:36+01:00 - 2023-12-18T16:55:36+01:00 + 2024-01-19T19:58:39+01:00 + 2024-01-19T19:58:39+01:00 + 2024-01-19T19:58:39+01:00 uuid:4c749825-1de7-414c-879f-29e4d0bef66e - uuid:48712e9e-58ec-4ad8-87e8-3a42043a5fe0 + uuid:063cbb0f-d41e-44a3-8a47-db62ccf9c581 three 1 @@ -653,7 +653,7 @@ endobj << /Type /Catalog /Pages 54 0 R /MarkInfo 55 0 R/Lang (en-US)/Metadata 48 0 R/StructTreeRoot 5 0 R >> endobj 72 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165536+01'00')/ModDate (D:20231218165536+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195839+01'00')/ModDate (D:20240119195839+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 73 @@ -731,7 +731,7 @@ xref 0000029592 00000 n 0000029710 00000 n trailer -<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ <5E4774C3791D95301ACD19EAD1CFC0CF> <5E4774C3791D95301ACD19EAD1CFC0CF> ] >> +<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ ] >> startxref 29933 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf index 978f983adf..123ba50946 100644 --- a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf +++ b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf @@ -243,17 +243,17 @@ stream - 2023-12-18T16:56:05+01:00 + 2024-01-19T19:59:07+01:00 application/pdf ex-mc-manual-para-split-obsolete.tex LaTeX - 2023-12-18T16:56:05+01:00 - 2023-12-18T16:56:05+01:00 - 2023-12-18T16:56:05+01:00 + 2024-01-19T19:59:07+01:00 + 2024-01-19T19:59:07+01:00 + 2024-01-19T19:59:07+01:00 uuid:c33d64b4-96ec-4e48-8f27-0b3edc831547 - uuid:1595e56f-70f8-4474-867a-1ae2b3cd7f64 + uuid:9847df95-eea1-49b3-8a9e-c1ab77ce723c three 2 @@ -413,7 +413,7 @@ endobj << /Type /Catalog /Pages 14 0 R /Lang (en-US)/Metadata 15 0 R >> endobj 25 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165605+01'00')/ModDate (D:20231218165605+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195907+01'00')/ModDate (D:20240119195907+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 26 @@ -444,7 +444,7 @@ xref 0000023897 00000 n 0000023978 00000 n trailer -<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ ] >> +<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ <299946CEB936BD1617FEBF129FCDEB78> <299946CEB936BD1617FEBF129FCDEB78> ] >> startxref 24201 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf index 19a7add1f5..2b430d802e 100644 --- a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf +++ b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf @@ -210,17 +210,17 @@ stream - 2023-12-18T16:56:31+01:00 + 2024-01-19T19:59:33+01:00 application/pdf ex-softhyphen.tex LaTeX - 2023-12-18T16:56:31+01:00 - 2023-12-18T16:56:31+01:00 - 2023-12-18T16:56:31+01:00 + 2024-01-19T19:59:33+01:00 + 2024-01-19T19:59:33+01:00 + 2024-01-19T19:59:33+01:00 uuid:aa82e685-4098-469d-861c-3c45dfc700c7 - uuid:ca29539e-9ba0-41f7-86f8-6cc5a9e4611e + uuid:8a7b353e-b6b5-40da-83ad-77aea4170264 three 1 @@ -393,7 +393,7 @@ endobj << /Type /Catalog /Pages 19 0 R /MarkInfo 20 0 R/Lang (en-US)/Metadata 14 0 R/StructTreeRoot 5 0 R >> endobj 30 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165631+01'00')/ModDate (D:20231218165631+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195933+01'00')/ModDate (D:20240119195933+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 31 @@ -429,7 +429,7 @@ xref 0000018116 00000 n 0000018234 00000 n trailer -<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ ] >> +<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ <05B8611EC20F37F713A0D2A6789467CE> <05B8611EC20F37F713A0D2A6789467CE> ] >> startxref 18457 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf index a0eb729bb6..929c9a6aeb 100644 --- a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf +++ b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf @@ -210,17 +210,17 @@ stream - 2023-12-18T16:56:58+01:00 + 2024-01-19T19:59:58+01:00 application/pdf ex-spaceglyph-listings.tex LaTeX - 2023-12-18T16:56:58+01:00 - 2023-12-18T16:56:58+01:00 - 2023-12-18T16:56:58+01:00 + 2024-01-19T19:59:58+01:00 + 2024-01-19T19:59:58+01:00 + 2024-01-19T19:59:58+01:00 uuid:acdc2435-bf29-4e54-8d09-1c9b6dc32038 - uuid:715fe598-2cf7-4804-8ee9-3614435f190c + uuid:bc642c93-8887-45fe-8177-ac4f6cf315a8 three 1 @@ -354,7 +354,7 @@ endobj << /Type /Catalog /Pages 15 0 R /MarkInfo 16 0 R/Lang (en-US)/Metadata 10 0 R/StructTreeRoot 5 0 R >> endobj 26 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165658+01'00')/ModDate (D:20231218165658+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119195958+01'00')/ModDate (D:20240119195958+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 27 @@ -386,7 +386,7 @@ xref 0000015484 00000 n 0000015602 00000 n trailer -<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <4B690D51D73DA114967668E465C7FF2E> <4B690D51D73DA114967668E465C7FF2E> ] >> +<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <92ADB4969503303AD517B208CBD05D4D> <92ADB4969503303AD517B208CBD05D4D> ] >> startxref 15825 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf index 9f8c7a0b6f..713aef9a9d 100644 --- a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf +++ b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf @@ -210,17 +210,17 @@ stream - 2023-12-18T16:57:26+01:00 + 2024-01-19T20:00:24+01:00 application/pdf ex-structure-obsolete.tex LaTeX - 2023-12-18T16:57:26+01:00 - 2023-12-18T16:57:26+01:00 - 2023-12-18T16:57:26+01:00 + 2024-01-19T20:00:24+01:00 + 2024-01-19T20:00:24+01:00 + 2024-01-19T20:00:24+01:00 uuid:bf5e4a2b-cfa9-4fc5-878c-8f9d2ee95445 - uuid:62157a53-a4aa-4084-8ca4-634237e85781 + uuid:391cce5f-6762-4dd5-8345-24759df53df5 three 1 @@ -526,7 +526,7 @@ endobj << /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (en-US)/Metadata 20 0 R/StructTreeRoot 5 0 R >> endobj 43 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165726+01'00')/ModDate (D:20231218165726+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119200024+01'00')/ModDate (D:20240119200024+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 44 @@ -575,7 +575,7 @@ xref 0000023426 00000 n 0000023544 00000 n trailer -<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <80C0A77C79EE32C1370ED68B014C304B> <80C0A77C79EE32C1370ED68B014C304B> ] >> +<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <9B1032D5838A13E78C5BD861432B1F63> <9B1032D5838A13E78C5BD861432B1F63> ] >> startxref 23767 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf index eff5cf7637..bc717f0fa6 100644 --- a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf +++ b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf @@ -210,17 +210,17 @@ stream - 2023-12-18T16:57:56+01:00 + 2024-01-19T20:00:52+01:00 application/pdf ex-tagpdf-template.tex LaTeX - 2023-12-18T16:57:56+01:00 - 2023-12-18T16:57:56+01:00 - 2023-12-18T16:57:56+01:00 + 2024-01-19T20:00:52+01:00 + 2024-01-19T20:00:52+01:00 + 2024-01-19T20:00:52+01:00 uuid:f320abfc-f6ab-4d12-8719-d176f4d947cf - uuid:045226fb-45fe-4620-820d-0c52be3f32d6 + uuid:822d8f21-3463-4bbd-8556-f3a87ef8651a three 1 @@ -309,7 +309,7 @@ endobj << /Type /Namespace /NS (https://www.latex-project.org/ns/inline/2022) /RoleMapNS 19 0 R >> endobj 20 0 obj -<< /Type /Namespace /NS (data:,7C21117D-8985-8D15-E095-29CE1B6DCBC2) >> +<< /Type /Namespace /NS (data:,2BB44E58-9D2A-B688-A395-4CB6A38386E) >> endobj 7 0 obj [ 8 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R ] @@ -401,7 +401,7 @@ endobj << /Type /Catalog /Pages 32 0 R /MarkInfo 33 0 R/Lang (en-US)/Metadata 27 0 R/StructTreeRoot 5 0 R >> endobj 43 0 obj -<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20231218165756+01'00')/ModDate (D:20231218165756+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> +<< /Producer (luahbtex-1.17.0)/Creator (LaTeX)/CreationDate (D:20240119200052+01'00')/ModDate (D:20240119200052+01'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)) >> endobj xref 0 44 @@ -410,9 +410,9 @@ xref 0000000003 00000 f 0000000004 00000 f 0000000009 00000 f -0000014545 00000 n +0000014544 00000 n 0000012015 00000 n -0000013973 00000 n +0000013972 00000 n 0000012288 00000 n 0000000011 00000 f 0000012356 00000 n @@ -427,30 +427,30 @@ xref 0000013574 00000 n 0000013884 00000 n 0000000000 00000 f -0000014041 00000 n -0000014138 00000 n -0000014225 00000 n -0000014312 00000 n -0000014411 00000 n +0000014040 00000 n +0000014137 00000 n +0000014224 00000 n +0000014311 00000 n +0000014410 00000 n 0000000020 00000 n 0000011869 00000 n 0000011734 00000 n 0000011500 00000 n -0000017151 00000 n -0000017505 00000 n +0000017150 00000 n +0000017504 00000 n 0000011979 00000 n 0000012056 00000 n 0000012188 00000 n 0000012225 00000 n -0000014667 00000 n -0000016108 00000 n -0000014754 00000 n -0000016329 00000 n -0000017305 00000 n -0000017567 00000 n -0000017685 00000 n +0000014666 00000 n +0000016107 00000 n +0000014753 00000 n +0000016328 00000 n +0000017304 00000 n +0000017566 00000 n +0000017684 00000 n trailer -<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ ] >> +<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <35EA0A3564780016E32C886EF0615181> <35EA0A3564780016E32C886EF0615181> ] >> startxref -17908 +17907 %%EOF diff --git a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx index a257c70058..8a6554e31b 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-backend.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -47,13 +47,13 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*luatex> -\ProvidesExplFile {tagpdf-luatex.def} {2023-12-18} {0.98r} +\ProvidesExplFile {tagpdf-luatex.def} {2024-01-19} {0.98s} {tagpdf~driver~for~luatex} % \end{macrocode} % \section{Loading the lua} @@ -158,8 +158,8 @@ local ProvidesLuaModule = { name = "tagpdf", - version = "0.98r", --TAGVERSION - date = "2023-12-18", --TAGDATE + version = "0.98s", --TAGVERSION + date = "2024-01-19", --TAGDATE description = "tagpdf lua code", license = "The LATEX Project Public License 1.3c" } @@ -754,6 +754,7 @@ local function @@_mark_spaces (head) local id = n.id if id == GLYPH then local glyph = n + default_currfontid = glyph.font if glyph.next and (glyph.next.id == GLUE) and not inside_math and (glyph.next.width >0) then @@ -790,8 +791,9 @@ local function @@_mark_spaces (head) if glyph.next and (glyph.next.id == GLUE) and not inside_math and (glyph.next.width >0) and n.subtype==0 then - nodesetattribute(glyph.next,iwspaceattributeid,1) - -- nodesetattribute(glyph.next,iwfontattributeid,glyph.font) + nodesetattribute(glyph.next,iwspaceattributeid,1) + -- changed 2024-01-18, issue #72 + nodesetattribute(glyph.next,iwfontattributeid,default_currfontid) -- for debugging if ltx.@@.trace.showspaces then @@_show_spacemark (head,glyph) @@ -838,6 +840,7 @@ ltx.@@.func.markspaceoff=@@_deactivate_mark_space % \begin{macrocode} local default_space_char = nodenew(GLYPH) local default_fontid = fontid("TU/lmr/m/n/10") +local default_currfontid = fontid("TU/lmr/m/n/10") default_space_char.char = 32 default_space_char.font = default_fontid % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx index 80d865405d..7053050c3f 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-checks.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \section{Commands} @@ -284,16 +284,30 @@ % mc-current} % Various messages related to mc-chunks. TODO document their meaning. % \end{function} -% \begin{function}{struct-no-objnum,struct-faulty-nesting, +% \begin{function}{struct-unknown,struct-no-objnum,struct-orphan,struct-faulty-nesting, % struct-missing-tag,struct-used-twice,struct-label-unknown,struct-show-closing} -% Various messages related to structure. TODO document their meaning. +% Various messages related to structure. Check the definition in the code for their +% meaning and the arguments they take. % \end{function} % +% \begin{function}{tree-struct-still-open} +% Message issued at the end of the compilation +% if there are (beside Root) other open structures on the stack. +% \end{function} +% + +% \begin{function}{show-struct,show-kids} +% These two messages are used in debug mode +% to show the current structures in the log and terminal. +% \end{function} +% + % \begin{function}{attr-unknown} % Message if an attribute i sunknown. % \end{function} % -% \begin{function}{role-missing,role-unknown,role-unknown-tag,role-tag,new-tag} +% \begin{function}{role-missing,role-unknown,role-unknown-tag,role-tag,new-tag, +% role-parent-child,role-remapping} % Messages related to role mapping. % \end{function} % @@ -313,7 +327,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-checks-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-checks-code} {2024-01-19} {0.98s} {part of tagpdf - code related to checks, conditionals, debugging and messages} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-code.pdf b/macros/latex/contrib/tagpdf/tagpdf-code.pdf index f222571021..0971abe817 100644 Binary files a/macros/latex/contrib/tagpdf/tagpdf-code.pdf and b/macros/latex/contrib/tagpdf/tagpdf-code.pdf differ diff --git a/macros/latex/contrib/tagpdf/tagpdf-data.dtx b/macros/latex/contrib/tagpdf/tagpdf-data.dtx index 350b5d645f..dd084f03eb 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-data.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-data.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-data.dtx % -% Copyright (C) 2022-2023 Ulrike Fischer +% Copyright (C) 2022-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % This files contains a various data files which are read in @@ -60,7 +60,7 @@ % It lists the new tag, the rolemap and the namespace of the rolemap. % \begin{macrocode} %<*ns-latex> -%% \ProvidesExplFile {tagpdf-ns-latex.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-latex.def} {2024-01-19} {0.98s} %% {latex} {https://www.latex-project.org/ns/dflt/2022}{} title, Title, pdf2, part, Title, pdf2, @@ -92,7 +92,7 @@ text, P, pdf2, % It is bound to change % \begin{macrocode} %<*ns-latex-book> -%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2024-01-19} {0.98s} %% {latex-book} {https://www.latex-project.org/ns/book/2022}{} chapter, H1,pdf2, section, H2,pdf2, @@ -108,7 +108,7 @@ subparagraph, H6,pdf2, % loaded. % \begin{macrocode} %<*ns-latex-inline> -%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2024-01-19} {0.98s} %% {latex-inline} {https://www.latex-project.org/ns/inline/2022}{} chapter, Span, pdf2, section, Span, pdf2, @@ -122,7 +122,7 @@ P, Span, pdf2, % \section{The pdf namespace data} % \begin{macrocode} %<*ns-pdf> -%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2024-01-19} {0.98s} %% {pdf} {http://iso.org/pdf/ssn}{} StructTreeRoot,StructTreeRoot,pdf,D, Document,Document,pdf,D, @@ -190,8 +190,9 @@ Strong,Span,pdf,I, % \section{The pdf 2.0 namespace data} % \begin{macrocode} %<*ns-pdf2> -%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2024-01-19} {0.98s} %% {pdf2} {http://iso.org/pdf2/ssn}{} +StructTreeRoot,StructTreeRoot,pdf2,D, Document,Document,pdf2,D, Part,Part,pdf2,G, Sect,Sect,pdf2,G, @@ -246,7 +247,7 @@ Strong,Strong,pdf2,I, % \section{The mathml namespace data} % \begin{macrocode} %<*ns-mathml> -%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2024-01-19} {0.98s} % {mathml}{http://www.w3.org/1998/Math/MathML}{} abs,abs,mathml, and,and,mathml, @@ -481,7 +482,7 @@ xor,xor,mathml, % This will perhaps change in future. % \begin{macrocode} %<*parent-child> -%% \ProvidesExplFile {tagpdf-parent-child.csv} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-parent-child.csv} {2024-01-19} {0.98s} ,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC Document,both,document level,1,0..n,βˆ…,‑,‑,βˆ…,0..n,‑,βˆ…,βˆ…,βˆ…,0..n,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ… Art,1.7,grouping,βˆ…,0..n,βˆ…,‑,‑,0..n,0..n,‑,βˆ…,βˆ…,βˆ…,0..n,βˆ…,0..n,βˆ…,βˆ…,βˆ…,0..1,0..1,βˆ…,βˆ…,βˆ…,0..n,0..n,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,0..n,βˆ…,βˆ…,0..n,0..n,βˆ…,βˆ…,βˆ…,0..n,0..n,βˆ…,βˆ… @@ -536,7 +537,7 @@ MC,both,---,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,0..n,‑,βˆ…,βˆ…,βˆ…,0..n,0..n,0..n,0..n,0.. % This will perhaps change in future. % \begin{macrocode} %<*parent-child-2> -%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2023-12-18} {0.98r} +%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2024-01-19} {0.98s} ,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC Document,both,document level,1,0..n,0..n,βˆ…,‑,‑,βˆ…,0..n,0..n,‑,βˆ…,βˆ…,βˆ…,0..n,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,0..n,βˆ… DocumentFragment,2.0,document level,βˆ…,0..n,0..n,0..n,‑,‑,0..n,0..n,0..n,‑,βˆ…,βˆ…,βˆ…,0..n,βˆ…,βˆ…,βˆ…,βˆ…*,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…*,βˆ…,βˆ…,βˆ…,βˆ…*,βˆ…*,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…*,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…,βˆ…*,βˆ…,βˆ…,βˆ…,βˆ…,0..n,βˆ… diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx index 510cd0efe5..c27e33d6e7 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc-generic.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \end{documentation} @@ -55,11 +55,11 @@ % \begin{macrocode} %<@@=tag> %<*generic> -\ProvidesExplPackage {tagpdf-mc-code-generic} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-mc-code-generic} {2024-01-19} {0.98s} {part of tagpdf - code related to marking chunks - generic mode} % %<*debug> -\ProvidesExplPackage {tagpdf-debug-generic} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-debug-generic} {2024-01-19} {0.98s} {part of tagpdf - debugging code related to marking chunks - generic mode} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx index c387249c4c..c10aca5b93 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc-luacode.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{implementation} % The code is splitted into three parts: code shared by all engines, @@ -86,11 +86,11 @@ % \begin{macrocode} %<@@=tag> %<*luamode> -\ProvidesExplPackage {tagpdf-mc-code-lua} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-mc-code-lua} {2024-01-19} {0.98s} {tagpdf - mc code only for the luamode } % %<*debug> -\ProvidesExplPackage {tagpdf-debug-lua} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-debug-lua} {2024-01-19} {0.98s} {part of tagpdf - debugging code related to marking chunks - lua mode} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx index 7732ee2eea..f08a0a8f4c 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc-shared.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -181,7 +181,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-mc-code-shared} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-mc-code-shared} {2024-01-19} {0.98s} {part of tagpdf - code related to marking chunks - code shared by generic and luamode } % diff --git a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx index 38d6840b8d..c700553f33 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-roles.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \begin{function} @@ -98,7 +98,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-roles-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-roles-code} {2024-01-19} {0.98s} {part of tagpdf - code related to roles and structure names} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-space.dtx b/macros/latex/contrib/tagpdf/tagpdf-space.dtx index 8421ceba69..4119753bfd 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-space.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-space.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-space.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \begin{function}{interwordspace (setup-key)} @@ -64,7 +64,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-space-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-space-code} {2024-01-19} {0.98s} {part of tagpdf - code related to real space chars} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx index 4808cccece..73224158a7 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-struct.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -63,9 +63,10 @@ % it will check if the \Arg{tag} (after expansion) % is identical to the current structure on the stack. The tag is not role mapped! % \end{function} -% \begin{function}{\tag_struct_use:n} +% \begin{function}{\tag_struct_use:n,\tag_struct_use_num:n} % \begin{syntax} -% \cs{tag_struct_use:n}\Arg{label} +% \cs{tag_struct_use:n}\Arg{label}\\ +% \cs{tag_struct_use_num:n}\Arg{structure number} % \end{syntax} % These commands insert a structure previously stashed away as kid % into the currently active structure. @@ -105,6 +106,21 @@ % This gives back the next free /StructParent number (assuming that it is % together with \cs{tag_struct_insert_annot:nn} which will increase the number. % \end{function} +% +% \begin{function}{\tag_struct_gput:nnn} +% \begin{syntax} +% \cs{tag_struct_gput:nnn}\Arg{structure number}\Arg{keyword}\Arg{value} +% \end{syntax} +% This is a command that allows to update the data of a structure. +% This often can't done simply by replacing the value, as we have to +% preserve and extend existing content. We use therefore dedicated functions +% adjusted to the key in question. +% The first argument is the number of the structure, +% the second a keyword referring to a function, +% the third the value. Currently the only keyword is \texttt{ref} which updates +% the Ref key (an array) +% \end{function} +% % \section{Public keys} % \subsection{Keys for the structure commands} % \begin{function}{tag (struct-key)} @@ -269,7 +285,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-struct-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-struct-code} {2024-01-19} {0.98s} {part of tagpdf - code related to storing structure} % % \end{macrocode} @@ -296,6 +312,12 @@ \@@_seq_new:N \g_@@_struct_objR_seq % \end{macrocode} % \end{variable} +% \begin{variable}{\c_@@_struct_null_tl} +% In lua mode we have to test if the kids a null +% \begin{macrocode} +\tl_const:Nn\c_@@_struct_null_tl {null} +% \end{macrocode} +% \end{variable} % \begin{variable}{\g_@@_struct_cont_mc_prop} % in generic mode it can happen after @@ -817,20 +839,40 @@ { % in this case we need a special command in % luamode to get the array right. See issue #13 - \bool_if:NT\g_@@_mode_lua_bool + \bool_if:NTF\g_@@_mode_lua_bool { \@@_struct_exchange_kid_command:c {g_@@_struct_kids_#1_seq} +% \end{macrocode} +% check if we get null +% \begin{macrocode} + \tl_set:Ne\l_@@_tmpa_tl + {\use:e{\seq_item:cn {g__tag_struct_kids_#1_seq} {1}}} + \tl_if_eq:NNF\l__tag_tmpa_tl \c_@@_struct_null_tl + { + \@@_struct_prop_gput:nne + {#1} + {K} + { + \seq_item:cn + { + g_@@_struct_kids_#1_seq + } + {1} + } + } } - \@@_struct_prop_gput:nne - {#1} - {K} { - \seq_item:cn + \@@_struct_prop_gput:nne + {#1} + {K} { - g_@@_struct_kids_#1_seq + \seq_item:cn + { + g_@@_struct_kids_#1_seq + } + {1} } - {1} } } % } @@ -1007,7 +1049,7 @@ \pdf_object_ref:e { @@/struct/\l_@@_struct_stack_parent_tmpa_tl } } % increase the int: - \stepcounter{ g_@@_parenttree_obj_int } + \int_gincr:N \c@g_@@_parenttree_obj_int } } % \end{macrocode} @@ -1863,7 +1905,7 @@ % \section{Attributes and attribute classes} % \begin{macrocode} %<*header> -\ProvidesExplPackage {tagpdf-attr-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-attr-code} {2024-01-19} {0.98s} {part of tagpdf - code related to attributes and attribute classes} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx index df1f50fdd4..fd0a8bfc2f 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-tree.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -47,13 +47,13 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-tree-code} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-tree-code} {2024-01-19} {0.98s} {part of tagpdf - code related to writing trees and dictionaries to the pdf} % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-user.dtx b/macros/latex/contrib/tagpdf/tagpdf-user.dtx index 5f1a72a3e8..682708d4f9 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-user.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-user.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-user.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.98r, released 2023-12-18} +% \date{Version 0.98s, released 2024-01-19} % \maketitle % \begin{documentation} % \section{Setup commands} @@ -120,7 +120,7 @@ % \cs{ShowTagging} \Arg{key-val} % \end{syntax} % This is a generic function to output various debugging helps. It not -% necessarly stops the compilation. The keys and their function are described below. +% necessarily stops the compilation. The keys and their function are described below. % \end{function} % % \begin{function}{mc-data (show-key)} @@ -158,6 +158,15 @@ % If no value is used, then the default is |show|. % \end{function} % +% \begin{function}{debug/structures (show-key)} +% \begin{syntax} +% |debug/structures| = \meta{structure number} +% \end{syntax} +% This key is available only if the tagpdf-debug package is loaded +% and shows all structures starting with the one with the number +% given by the key. +% \end{function} + % \section{Extension commands} % The following commands and code parts are not core commands of tagpdf. % They either provide work-arounds for missing functionality elsewhere, @@ -243,6 +252,50 @@ % { Contents } % { (ref) } % \end{verbatim} +% +% \section{Socket support} +% +% \begin{function}{\tag_socket_use:n,\tag_socket_use:nn,\UseTaggingSocket} +% \begin{syntax} +% \cs{tag_socket_use:n} \Arg{socket name}\\ +% \cs{tag_socket_use:nn} \Arg{socket name} \Arg{socket argument}\\ +% \cs{UseTaggingSocket} \Arg{socket name} \\ +% \cs{UseTaggingSocket} \Arg{socket name} \Arg{socket argument}\\ +% \end{syntax} +% \end{function} + +% The next \LaTeX{} will use special sockets for the tagging. +% +% These sockets will use names starting +% with \texttt{tagsupport/}. Usually, these sockets have exactly two +% plugs defined: \texttt{noop} (when no tagging is requested or +% tagging is not wanted for some reason) and +% a second plug that enables the tagging. There +% may be more, e.g., tagging with special debugging, etc., but right +% now it is usually just on or off. +% +% Given that we sometimes have to suspend tagging, it would be fairly +% inefficient to put different plugs into these sockets whenever that +% happens. We therefore offer \cs{UseTaggingSocket} which is like +% \cs{UseSocket} except that the socket name is specified without +% \texttt{tagsupport/}, i.e., +% \begin{quote} +% \verb=\UseTaggingSocket{foo}= $\to$ +% \verb=\UseSocket{tagsupport/foo}= +% \end{quote} +% Beside being slightly shorter, the big advantage is that this way +% we can change \cs{UseTaggingSocket} to do nothing by switching a boolean +% instead of changing the plugs of the tagging support sockets back and forth. +% +% It is possible to use the tagging support sockets with +% \cs{UseSocket} directly, but in this case the socket remains active +% if e.g. \cs{SuspendTagging} is in force. There may be reasons for doing +% that but in general we expect to always use \cs{UseTaggingSocket}. +% +% The L3 programming layer versions \cs{tag_socket_use:n} and +% \cs{tag_socket_use:nn} are slightly more efficient than +% \cs{UseTaggingSocket} because they do not have to determine how +% many arguments the socket takes when disabling it. % \end{documentation} % % \begin{implementation} @@ -250,7 +303,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-user} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-user} {2024-01-19} {0.98s} {tagpdf - user commands} % % \end{macrocode} @@ -347,39 +400,6 @@ % \end{macro} % % \section{Socket support} -% The next \LaTeX{} will use special sockets for the tagging. -% -% These sockets will use names starting -% with \texttt{tagsupport/}. Usually, these sockets have exactly two -% plugs defined: \texttt{noop} (when no tagging is requested or -% tagging is not wanted for some reason) and -% a second plug that enables the tagging. There -% may be more, e.g., tagging with special debugging, etc., but right -% now it is usually just on or off. -% -% Given that we sometimes have to suspend tagging, it would be fairly -% inefficient to put different plugs into these sockets whenever that -% happens. We therefore offer \cs{UseTaggingSocket} which is like -% \cs{UseSocket} except that the socket name is specified without -% \texttt{tagsupport/}, i.e., -% \begin{quote} -% \verb=\UseTaggingSocket{foo}= $\to$ -% \verb=\UseSocket{tagsupport/foo}= -% \end{quote} -% Beside being slightly shorter, the big advantage is that this way -% we can change \cs{UseTaggingSocket} to do nothing by switching a boolean -% instead of changing the plugs of the tagging support sockets back and forth. -% -% It is possible to use the tagging support sockets with -% \cs{UseSocket} directly, but in this case the socket remains active -% if e.g. \cs{SuspendTagging} is in force. There may be reasons for doing -% that but in general we expect to always use \cs{UseTaggingSocket}. -% -% The L3 programming layer versions \cs{tag_socket_use:n} and -% \cs{tag_socket_use:nn} are slightly more efficient than -% \cs{UseTaggingSocket} because they do not have to determine how -% many arguments the socket takes when disabling it. -% % Until we can be sure that the kernel defines the commands we provide them before % redefining them: % \begin{macrocode} @@ -718,7 +738,10 @@ % \g_@@_para_main_end_int, % \l_@@_para_tag_default_tl, % \l_@@_para_tag_tl, -% \l_@@_para_main_tag_tl} +% \l_@@_para_main_tag_tl, +% \l_@@_para_attr_class_tl, +% \l_@@_para_main_attr_class_tl, +% } % At first some variables. % \begin{macrocode} % @@ -736,6 +759,12 @@ \tl_new:N \l_@@_para_main_tag_tl \tl_set:Nn \l_@@_para_main_tag_tl {text-unit} % \end{macrocode} +% this is perhaps already defined by the block code +% \begin{macrocode} +\tl_if_exist:NF \l_@@_para_attr_class_tl + {\tl_new:N \l_@@_para_attr_class_tl } +\tl_new:N \l_@@_para_main_attr_class_tl +% \end{macrocode} % \end{macro} % \begin{macro} @@ -827,6 +856,10 @@ % \begin{macrocode} \AddToHook{package/latex-lab-testphase-block/after} { + \tl_if_exist:NT \l_tag_para_attr_class_tl + { + \tl_set:Nn \l_@@_para_attr_class_tl { \l_tag_para_attr_class_tl } + } \cs_set_protected:Npn \__block_start_para_structure:n #1 { \__block_debug_typeout:n { @endpe = \legacy_if:nTF { @endpe }{true}{false} @@ -836,7 +869,11 @@ \bool_if:NF \l__tag_para_flattened_bool { \@@_gincr_para_main_begin_int: - \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl} + \tag_struct_begin:n + { + tag=\l_@@_para_main_tag_tl, + attribute-class=\l_@@_para_main_attr_class_tl, + } } } \@@_gincr_para_begin_int: @@ -844,7 +881,7 @@ \tag_struct_begin:n { tag=\l__tag_para_tag_tl - ,attribute-class=\l_tag_para_attr_class_tl + ,attribute-class=\l_@@_para_attr_class_tl } \__tag_check_para_begin_show:nn {green}{#1} \tag_mc_begin:n {} diff --git a/macros/latex/contrib/tagpdf/tagpdf.dtx b/macros/latex/contrib/tagpdf/tagpdf.dtx index 37de4d9927..4eb87d0faf 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf.dtx % -% Copyright (C) 2019-2023 Ulrike Fischer +% Copyright (C) 2019-2024 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -84,7 +84,7 @@ % \begin{macrocode} %<@@=tag> %<*package> -\ProvidesExplPackage {tagpdf} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf} {2024-01-19} {0.98s} { A package to experiment with pdf tagging } \bool_if:nF @@ -110,7 +110,7 @@ % \end{macrocode} %<*debug> % \begin{macrocode} -\ProvidesExplPackage {tagpdf-debug} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-debug} {2024-01-19} {0.98s} { debug code for tagpdf } \@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput} % \end{macrocode} @@ -133,7 +133,7 @@ % we define a base package with dummy functions % \begin{macrocode} %<*base> -\ProvidesExplPackage {tagpdf-base} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdf-base} {2024-01-19} {0.98s} {part of tagpdf - provide base, no-op versions of the user commands } % % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf.ins b/macros/latex/contrib/tagpdf/tagpdf.ins index f0b7ac2284..bc48d45842 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.ins +++ b/macros/latex/contrib/tagpdf/tagpdf.ins @@ -2,7 +2,7 @@ File: tagpdf.ins -Copyright (C) 2019-2023 Ulrike Fischer +Copyright (C) 2019-2024 Ulrike Fischer It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ for those people who are interested. \let\MetaPrefix\relax \preamble -Copyright (C) 2019-2023 Ulrike Fischer +Copyright (C) 2019-2024 Ulrike Fischer It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/tagpdf/tagpdf.pdf b/macros/latex/contrib/tagpdf/tagpdf.pdf index 9d6e7130e9..e8bd9118bb 100644 Binary files a/macros/latex/contrib/tagpdf/tagpdf.pdf and b/macros/latex/contrib/tagpdf/tagpdf.pdf differ diff --git a/macros/latex/contrib/tagpdf/tagpdf.tex b/macros/latex/contrib/tagpdf/tagpdf.tex index d39cd227fc..740d82b290 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.tex +++ b/macros/latex/contrib/tagpdf/tagpdf.tex @@ -16,8 +16,8 @@ } \DebugBlocksOff \makeatletter -\def\UlrikeFischer@package@version{0.98r} -\def\UlrikeFischer@package@date{2023-12-18} +\def\UlrikeFischer@package@version{0.98s} +\def\UlrikeFischer@package@date{2024-01-19} \makeatother \documentclass[bibliography=totoc,a4paper]{article} @@ -1057,7 +1057,7 @@ The key-val list understands the following keys: \begin{docCommands} { {doc name=tagmcend}, - {doc name=tag_mc:end} + {doc name=tag_mc_end:} } \end{docCommands} @@ -2130,21 +2130,32 @@ of the PDF types can be looked up in the \PDF{}-references \parencite{pdfspec-iso32000-1,pdfspec-iso32000-2_2020}): \begin{enumerate} -\item The \emph{standard structure namespace for PDF 1.7}, also called - the \emph{default standard structure namespace}. The public name of - the namespace is |tag/NS/pdf|. This can be used to reference the - namespace e.g. in attributes. These are the structure names from PDF - 1.7: \ExplSyntaxOn \clist_clear:N\l_tmpa_clist \prop_map_inline:cn { - g__tag_role_NS_pdf_prop } { \clist_put_right:Nn \l_tmpa_clist {#1} - } \clist_use:Nn \l_tmpa_clist {,\c_space_tl } \ExplSyntaxOff +\item The \emph{standard structure namespace for PDF 1.7}, also called + the \emph{default standard structure namespace}. The public name of + the namespace is |tag/NS/pdf|. This can be used to reference the + namespace e.g. in attributes. These are the structure names from PDF + 1.7 (\texttt{StructTreeRoot} is a bit special, it is not really a structure + name but nevertheless listed here): + \ExplSyntaxOn %% + \clist_clear:N\l_tmpa_clist + \prop_map_inline:cn + {g__tag_role_NS_pdf_prop} + { + \str_if_eq:eeT + {#1} + {\use_i:nn #2} + { \clist_put_right:Nn \l_tmpa_clist {#1} } + } + \clist_use:Nn \l_tmpa_clist {,\c_space_tl }. %% + \ExplSyntaxOff \item The \emph{standard structure namespace for PDF 2.0}. The public name of the namespace is |tag/NS/pdf2|. This can be used to reference the namespace e.g. in attributes. These are more or less same types as in PDF. The following types have been removed from - this set:\\ + this set\footnote{They still can be used in a PDF 2.0 document!}:\\ % -\ExplSyntaxOn +\ExplSyntaxOn % \clist_clear:N\l_tmpa_clist \prop_map_inline:cn { g__tag_role_NS_pdf_prop } { @@ -2153,20 +2164,19 @@ of the PDF types can be looked up in the \PDF{}-references {#1} { \clist_put_right:Nn \l_tmpa_clist {#1} } } -\clist_use:Nn \l_tmpa_clist {,\c_space_tl }\\ -\ExplSyntaxOff +\clist_use:Nn \l_tmpa_clist {,\c_space_tl },\\ +\ExplSyntaxOff % and the following are new:\\ -\ExplSyntaxOn -\clist_clear:N\l_tmpa_clist -\prop_map_inline:cn { g__tag_role_NS_pdf2_prop } - { - \prop_if_in:cnF - { g__tag_role_NS_pdf_prop } - {#1} - { \clist_put_right:Nn \l_tmpa_clist {#1} } - } -\clist_use:Nn \l_tmpa_clist {,\c_space_tl } -\ExplSyntaxOff +\ExplSyntaxOn % + \clist_clear:N\l_tmpa_clist % + \prop_map_inline:cn { g__tag_role_NS_pdf_prop } + { + \str_if_eq:eeF {#1} + {\use_i:nn #2} + { \clist_put_right:Nn \l_tmpa_clist {#1} } + } + \clist_use:Nn \l_tmpa_clist {,\c_space_tl }. +\ExplSyntaxOff % \item MathML 3.0 as an \emph{other namespaces}. The public name of the namespace is |tag/NS/mathml|. This can be used to reference the diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty index 91df3a4761..d6f5e6eb59 100644 --- a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty +++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty @@ -1,5 +1,5 @@ %\RequirePackage[enable-debug]{expl3}[2018/06/14] -\ProvidesExplPackage {tagpdfdocu-patches} {2023-12-18} {0.98r} +\ProvidesExplPackage {tagpdfdocu-patches} {2024-01-19} {0.98s} {patches/commands for the tagpdf documentation} \RequirePackage{etoolbox,xpatch} -- cgit v1.2.3