Skip to content

Commit

Permalink
Move beamer support code into a dedicated file.
Browse files Browse the repository at this point in the history
Also implement `\mmz@makeatletter˙ -- `\mmz@restoreatcatcode`, a utility
mechanism for loading the support `.code.tex` files.
  • Loading branch information
sasozivanovic committed May 25, 2024
1 parent 18d952a commit 188261b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 43 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ t-collargs.tex
t-memoizable.tex
t-memoize.tex
t-nomemoize.tex
memoize-biblatex.code.tex
memoize-*.code.tex
/temp
/test-*
test.*
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ FORMAT = generic
COMMON = memoize nomemoize memoizable
PLAIN = memoize-extract-one.tex
GENERIC = memoizable.code.tex
LATEX = memoize-biblatex.code.tex
LATEX = memoize-biblatex.code.tex memoize-beamer.code.tex
SOURCE = memoize.edtx memoize.ins

SCRIPTS := memoize-extract memoize-clean
Expand Down
101 changes: 60 additions & 41 deletions memoize.edtx
Original file line number Diff line number Diff line change
Expand Up @@ -3397,12 +3397,19 @@
\mmzset{auto=\DiscardShipoutBox{
outer handler=\global\advance\mmzExtraPages1\relax\AdviceOriginal}}
%</latex>
% An auxiliary macro for loading the support code |memoize-*.code.tex| from
% hook |begindocument/before|, where |@| already has catcode `other'. The
% |\input| statement should be enclosed in |\mmz@makeatletter| and
% |\mmz@restoreatcatcode|.
\def\mmz@makeatletter{%
\edef\mmz@restoreatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
\catcode`\@=11
}
%
% Utility macro for clarity below. |#1| is the name of the package which should
% be loaded (used with \hologo{LaTeX}) and |#2| is the name of the command
% which should be defined (used with \hologo{plainTeX} and \hologo{ConTeXt})
% for |#3| to be executed at the beginning of the document. We make sure that
% we can use |#1| etc.\ inside |#3|.
% for |#3| to be executed at the beginning of the document.
\def\mmz@if@package@loaded#1#2#3{%
\mmzset{%
begindocument/before/.append code={%
Expand All @@ -3421,6 +3428,8 @@
%<plain>\pgfpicture
%<context>\startpgfpicture
}{%
% We have very little code here, so we don't bother introducing
% |memoize-pgf.code.tex|.
\def\mmzPgfAtBeginMemoization{%
\edef\mmz@pgfpictureid{%
\the\pgf@picture@serial@count
Expand Down Expand Up @@ -3492,34 +3501,53 @@
% The Beamer code is explained in \MS\ref{sec:per-overlay}.
%
%<*latex>
\AddToHook{begindocument/before}{\@ifclassloaded{beamer}{%
% \begin{listingregion}{per-overlay.tex}
\mmzset{per overlay/.style={
/mmz/context={%
overlay=\csname beamer@overlaynumber\endcsname,
pauses=\ifmemoizing
\mmzBeamerPauses
\else
\expandafter\the\csname c@beamerpauses\endcsname
\fi
},
/mmz/at begin memoization={%
\xdef\mmzBeamerPauses{\the\c@beamerpauses}%
\xtoksapp\mmzCMemo{%
\noexpand\mmzSetBeamerOverlays{\mmzBeamerPauses}{\beamer@overlaynumber}}%
\gtoksapp\mmzCCMemo{%
\only<all:\mmzBeamerOverlays>{}}%
},
/mmz/at end memoization={%
\xtoksapp\mmzCCMemo{%
\noexpand\setcounter{beamerpauses}{\the\c@beamerpauses}}%
},
/mmz/per overlay/.code={},
},
\AddToHook{begindocument/before}{%
\@ifclassloaded{beamer}{%
\mmz@makeatletter
\input{memoize-beamer.code.tex}%
\mmz@restoreatcatcode
}{}%
\@ifpackageloaded{beamerarticle}{%
\mmz@makeatletter
\input{memoize-beamer.code.tex}%
\mmz@restoreatcatcode
}{}%
}
%</latex>
%</mmz>
%<*beamer>
\mmzset{
per overlay/.code={},
beamer mode to prefix/.style={
prefix=\mmz@prefix@dir\mmz@prefix@name\beamer@currentmode_mode.
},
}
}%
\@ifclassloaded{beamer}{%
% \begin{listingregion}{per-overlay.tex}
\mmzset{
per overlay/.style={
/mmz/context={%
overlay=\csname beamer@overlaynumber\endcsname,
pauses=\ifmemoizing
\mmzBeamerPauses
\else
\expandafter\the\csname c@beamerpauses\endcsname
\fi
},
/mmz/at begin memoization={%
\xdef\mmzBeamerPauses{\the\c@beamerpauses}%
\xtoksapp\mmzCMemo{%
\noexpand\mmzSetBeamerOverlays{\mmzBeamerPauses}{\beamer@overlaynumber}}%
\gtoksapp\mmzCCMemo{%
\only<all:\mmzBeamerOverlays>{}}%
},
/mmz/at end memoization={%
\xtoksapp\mmzCCMemo{%
\noexpand\setcounter{beamerpauses}{\the\c@beamerpauses}}%
},
/mmz/per overlay/.code={},
},
}
\def\mmzSetBeamerOverlays#1#2{%
\ifnum\c@beamerpauses=#1\relax
\gdef\mmzBeamerOverlays{#2}%
Expand All @@ -3533,17 +3561,9 @@
\fi
}%
% \end{listingregion}
}{}}
\AddToHook{begindocument/before}{\@ifpackageloaded{beamerarticle}{%
\mmzset{
per overlay/.code={},
beamer mode to prefix/.style={
prefix=\mmz@prefix@dir\mmz@prefix@name\beamer@currentmode_mode.
},
}
}{}%
}
%</latex>
}%
%</beamer>
%<*mmz>
%
% \subsection{Biblatex}
% \label{sec:biblatex}
Expand All @@ -3553,16 +3573,16 @@
\mmzset{
biblatex/.code={%
\mmz@if@package@loaded{biblatex}{}{%
\mmz@makeatletter
\input memoize-biblatex.code.tex
\mmz@restoreatcatcode
\mmzset{#1}%
}%
},
}
%</latex>
%</mmz>
%<*biblatex>
\edef\memoizeresetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
\catcode`\@=11
\mmzset{%
% Advise macro |\entry| occurring in |.bbl| files to collect the entry,
% verbatim. |args|: |m| = citation key, |&&{...}u| = the entry, verbatim,
Expand Down Expand Up @@ -3821,7 +3841,6 @@
auto=\citelist{cite, args=l*mlm},
auto=\citefield{cite, args=l*mlm},
}
\memoizeresetatcatcode
%</biblatex>
%<*mmz>
%
Expand Down
1 change: 1 addition & 0 deletions memoize.ins
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,6 @@
\file{memoizable.code.tex}{\from{memoize.dtx}{mmzable,generic}}%
\file{memoize-extract-one.tex}{\from{memoize.dtx}{extract-one}}%
\file{memoize-biblatex.code.tex}{\from{memoize.dtx}{biblatex}}%
\file{memoize-beamer.code.tex}{\from{memoize.dtx}{beamer}}%
}
\endbatchfile

0 comments on commit 188261b

Please sign in to comment.