summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/everysel/everysel.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/everysel/everysel.dtx')
-rw-r--r--macros/latex/contrib/everysel/everysel.dtx441
1 files changed, 441 insertions, 0 deletions
diff --git a/macros/latex/contrib/everysel/everysel.dtx b/macros/latex/contrib/everysel/everysel.dtx
new file mode 100644
index 0000000000..9a4c702f83
--- /dev/null
+++ b/macros/latex/contrib/everysel/everysel.dtx
@@ -0,0 +1,441 @@
+% \iffalse meta-comment
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Copyright (C) Martin Schröder, 1994–2001
+% Marei Peischl (peiTeX) <marei@peitex.de>, 2021
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is
+% Marei Peischl <marei@peitex.de>.
+%
+% This work consists of the files
+% README.md
+% everysel.dtx
+% everysel.ins
+% and the derived files
+% everysel.sty
+% everysel-2011/10/28.sty
+% everysel.pdf
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \fi
+% \iffalse
+%<package|fallback>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<package>\ProvidesPackage{everysel}
+%<package> [2021/01/18 v2.0 EverySelectfont Package (MS)]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{url}
+\usepackage[toc]{multitoc}
+\usepackage{lmodern,microtype}
+\usepackage{geometry}
+\usepackage{everysel}
+\GetFileInfo{everysel.sty}
+\RecordChanges % Gather update information
+\EnableCrossrefs
+%%\DisableCrossrefs% Say \DisableCrossrefs if index is ready
+\CodelineIndex % Index code by line number
+%\OnlyDescription % comment out for implementation details
+%%\OldMakeIndex % use if your MakeIndex is pre-v2.9
+\setcounter{IndexColumns}{1}
+% onecolumn glossary
+%% \makeatletter
+%% \renewenvironment{theglossary}{%
+%% \glossary@prologue
+%% \setlength\emergencystretch{5em}
+%% \GlossaryParms \let\item\@idxitem \ignorespaces}{}
+%% \makeatother
+\setlength{\IndexMin}{40ex}
+\setlength{\columnseprule}{.4pt}
+\addtolength{\oddsidemargin}{2cm}
+\addtolength{\textwidth}{-2cm}
+\raggedright % otherwise we get over/underfull hboxes
+\begin{document}
+ \DocInput{everysel.dtx}
+ \PrintChanges
+ % Make sure that the index is not printed twice
+ % (ltxdoc.cfg might have a second \PrintIndex command)
+ \let\PrintChanges\relax
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{172}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \changes{v1.00}{1996-05-24}{New}
+% \changes{v1.02}{1998-04-11}{Minor documentation enhancements}
+% \changes{v1.02}{1998-08-09}{Minor documentation enhancements}
+% \changes{v1.03}{1999/06/08}{Moved to LPPL}
+% \changes{v1.1}{2009/05/30}{New address, LPPL 1.3}
+%
+%
+% ^^A -----------------------------
+%
+% \pagestyle{headings}
+%
+% \newcommand*{\file}[1]{\texttt{#1}}
+% \newcommand*{\package}[1]{\textsf{#1}}
+% \hyphenation{every-select-font}
+%
+%
+% ^^A -----------------------------
+%
+% \changes{v1.01}{1997-03-09}{Fixed use of \cs{newline} in title.}
+% \title{\unskip
+% The obsolete \package{EverySel} package^^A
+% \thanks{^^A
+% The version umber of this file is \fileversion.\protect\newline
+% The name \textsf{EverySel} is a tribute to the $8+3$ file-naming
+% convention of certain ``operating systems'' and their ``file systems'';
+% strictly speaking it should be \textsf{EverySelectfont}.}^^A
+% }
+% \author{Martin Schröder\thanks{maintained by Marei Peischl}}
+% \maketitle
+%
+%
+% ^^A -----------------------------
+% \changes{v2.0}{2021/01/17}{Information on new kernel methods}
+% \renewcommand*{\abstractname}{Why you should no longer use this package:}
+% \begin{abstract}
+% This packages provides hooks into the NFSS-command
+% \cs{selectfont} called \cs{EverySelectfont} and
+% \cs{AtNextSelectfont} analogous to \cs{AtBeginDocument}.
+% In January 2021 the hook management \LaTeX{} provides since autumn 2020 the kernel directly contains these hooks. Information on their usage can be found in the the corresponding documentation for
+% \package{lthooks}\cite{lthooks-doc} and look for Hooks provided in NFSS command.
+% We only provide this package to allow backwards compatibility.
+% For current versions of \LaTeX{} it's only mapping the hooks to the original \package{everysel} macros.
+% In case you use an older \LaTeX{} format, \package{everysel} will automatically fallback to its' old implementation by loading \package{everysel-2011/10/28.sty}.
+% \end{abstract}
+%
+% \pagestyle{headings}
+%
+%
+% ^^A -----------------------------
+%
+% \tableofcontents
+%
+%
+% ^^A -----------------------------
+%
+% \section{Introduction}
+% ^^A
+% This package provides the hooks \cs{EverySelectfont} and
+% \cs{AtNextSelectfont} whose arguments are executed just after
+% \LaTeX{} has loaded a new font using \cs{selectfont} (which means
+% that it will be executed after \emph{every} font loaded via NFSS).
+%
+% An example application would be a package for setting ragged text
+% which needs to distiguinsh between monospaced and proportional
+% fonts.
+% Such a package exists: \package{ragged2e}\cite{package:ragged2e}.
+%
+%
+% ^^A -----------------------------
+%
+% \section{Usage}
+% ^^A
+% \DescribeMacro{\EverySelectfont}
+% \cs{EverySelectfont}\marg{code} declares
+% \mbox{$\langle$\emph{code}$\rangle$} that is saved internally
+% and executed just after \emph{each} \cs{selectfont}.
+%
+% \emph{Warning:} The \mbox{$\langle$\emph{code}$\rangle$} is saved
+% globally; there is currently no way to remove it.
+%
+% \DescribeMacro{\AtNextSelectfont}
+% \cs{AtNextSelectfont}\marg{code} declares
+% \mbox{$\langle$\emph{code}$\rangle$} that is saved internally
+% and executed just after \emph{and only the next} \cs{selectfont}.
+%
+% Repeated use of the commands is permitted: the code in their
+% argument is stored (and executed) in the order of their
+% declarations.
+%
+% The argument of \cs{AtNextSelectfont} is executed \emph{after}
+% the argument of \cs{EverySelectfont}.
+%
+%
+% ^^A -----------------------------
+%
+% \section{Options}
+% ^^A
+% The package has no options.
+%
+%
+% ^^A -----------------------------
+%
+% \section{Required packages}
+% ^^A
+% The package requires no further packages.
+%
+%
+% ^^A -----------------------------
+%
+% \StopEventually{^^A
+%
+%
+% ^^A -----------------------------
+%
+% \section{Acknowledgements}
+% ^^A
+% David Carlisle provided the solution for my problems with \cs{CheckCommand}.
+%
+% Thanks to the \LaTeX-Project-Team for creating solutions which made this an obsolete package. Special thanks to Ulrike Fischer to keep the maintainer up to date.
+%
+%
+% ^^A -----------------------------
+%
+% \begin{thebibliography}{1}
+% \raggedright
+% \bibitem{lthooks-doc}
+% Frank Mittelbach.
+% \newblock The \package{ltshipout} package.
+% \newblock \url{http://mirrors.ctan.org/macros/latex/base/lthooks-doc.pdf}
+% \bibitem{package:tracefnt}
+% Frank Mittelbach and Rainer Sch\"opf.
+% \newblock The \package{tracefnt} package for use with the new
+% font selection scheme.
+% \newblock \url{http://mirrors.ctan.org/macros/latex/base/ltfsstrc.dtx}.
+% \newblock \LaTeXe{} package.
+% \bibitem{package:ragged2e}
+% Martin Schr\"oder.
+% \newblock The \package{ragged2e} package.
+% \newblock \url{http://mirrors.ctan.org/macros/latex/contrib/supported/ms/ragged2e.dtx}.
+% \newblock \LaTeXe{} package.
+% \end{thebibliography}
+%
+% }
+%
+%
+% ^^A -----------------------------
+%
+% \section{The implementation}
+% ^^A
+% \changes{v2.0}{2021/01/17}{Emulate everysel if the kernel is new enough.}
+% \begin{macrocode}
+%<*package>
+% \raggedright
+% \begin{macrocode}
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2021/01/05}{}{\input{everysel-2011-10-28.sty}}
+\IfFormatAtLeastTF{2021/01/05}{}{\endinput}
+\newcommand*{\EverySelectfont}[1]{\AddToHook{selectfont}{#1}}
+\newcommand*{\AtNextSelectfont}[1]{\AddToHookNext{selectfont}{#1}}
+%</package>
+% \end{macrocode}
+% ^^A -----------------------------
+% \subsection{The original implementation by Martin Schröder}
+% To provide compatibility for older \LaTeX{} formats we wrap the
+% original implementation of \package{everysel} version 1.2 into
+% the fallback package \package{everyshi-2011-01-10}.
+% \subsubsection{Allocations}
+% ^^A
+% First we allocate the hooks
+% \begin{macro}{\@EverySelectfont@EveryHook}
+% The code to be executed just after the normal \cs{selectfont}.
+% \begin{macrocode}
+%<*fallback>
+\newcommand{\@EverySelectfont@EveryHook}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@EverySelectfont@AtNextHook}
+% The code to be executed just after the normal \cs{selectfont}
+% and \cs{@EverySelectfont@EveryHook}.
+% \begin{macrocode}
+\newcommand{\@EverySelectfont@AtNextHook}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% ^^A -----------------------------
+%
+% \subsubsection{The user-visible commands}
+% ^^A
+% \begin{macro}{\EverySelectfont}
+% \begin{macro}{\AtNextSelectfont}
+% These commands are modeled after \cs{AtBeginDocument}.
+% \begin{macrocode}
+\newcommand*{\EverySelectfont}[1]
+ {\g@addto@macro\@EverySelectfont@EveryHook{#1}}
+\newcommand*{\AtNextSelectfont}[1]
+ {\g@addto@macro\@EverySelectfont@AtNextHook{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% ^^A -----------------------------
+%
+% \subsubsection{Inserting the hooks}
+% ^^A
+% The hooks are placed \emph{inside} \cs{selectfont}.
+% Unfortunately for us there are \emph{two} versions of
+% \cs{selectfont} in normal \LaTeX: One is defined in the kernel and
+% the other by the package \package{tracefnt}\cite{package:tracefnt}.
+% The \package{CJK} also redefines \cs{selectfont}.
+%
+% So we have to check for three versions.
+% \begin{macro}{\@EverySelectfont@Init}
+% We do this in the macro \cs{@EverySelectfont@Init}, which is
+% executed just after \cs{begin\{document\}} (with the aid of
+% \cs{AtBeginDocument}), when we know for sure which version of
+% \cs{selectfont} we have to overload.
+% \begin{macrocode}
+\newcommand*{\@EverySelectfont@Init}{%
+ \message{ABD: EverySelectfont initializing macros}%
+% \end{macrocode}
+% We have to distinguish three cases: \package{tracefnt},
+% \package{CJK} and everything else.
+% \begin{macrocode}
+ \@ifpackageloaded{tracefnt}{%
+% \end{macrocode}
+% And we have a problem: \cs{selectfont} is defined using
+% \cs{DeclareRobustCommand}, which really defines
+% \cs{selectfont\textvisiblespace}.
+% So instead of simply using \cs{CheckCommand} we also have to use
+% \cs{expandafter} and \cs{csname}\ldots\cs{endcsname}.
+% \begin{macrocode}
+ \expandafter\CheckCommand\csname selectfont \endcsname{%
+ \ifx\f@linespread\baselinestretch \else
+ \set@fontsize\baselinestretch\f@size\f@baselineskip \fi
+ \xdef\font@name{%
+ \csname\curr@fontshape/\f@size\endcsname}%
+ \pickup@font
+ \font@name
+ \ifnum \tracingfonts>\tw@
+ \@font@info{Switching to \font@name}\fi
+ \size@update
+ \enc@update
+ }%
+ }{%
+% \end{macrocode}
+% The case with \package{CJK}
+% \changes{v1.2}{2011-10-27}{Check for \package{CJK}.}
+% \begin{macrocode}
+ \@ifpackageloaded{CJK}{%
+ \expandafter\CheckCommand\csname selectfont \endcsname{%
+ \ifx\f@linespread\baselinestretch \else
+ \set@fontsize\baselinestretch\f@size\f@baselineskip \fi
+ \xdef\font@name{%
+ \csname\curr@fontshape/\f@size\endcsname}%
+ \pickup@font
+ \font@name
+ \expandafter\ifx\csname CJK@\curr@fontshape\endcsname \relax
+ \else
+ \CJK@bold@false
+ \csname CJK@\curr@fontshape\endcsname
+ \fi
+ \size@update
+ \enc@update}%
+ }{%
+% \end{macrocode}
+% Now the default (no \package{tracefnt} and no \package{CJK}).
+% \begin{macrocode}
+ \expandafter\CheckCommand\csname selectfont \endcsname{%
+ \ifx\f@linespread\baselinestretch \else
+ \set@fontsize\baselinestretch\f@size\f@baselineskip \fi
+ \xdef\font@name{%
+ \csname\curr@fontshape/\f@size\endcsname}%
+ \pickup@font
+ \font@name
+ \size@update
+ \enc@update
+ }%
+ }%
+ }%
+% \end{macrocode}
+% After the checks we can be sure we have the correct version of
+% \cs{selectfont}, so we redefine it with our hooks.
+% \begin{macrocode}
+ \DeclareRobustCommand{\selectfont}%
+ {%
+ \ifx\f@linespread\baselinestretch \else
+ \set@fontsize\baselinestretch\f@size\f@baselineskip \fi
+ \xdef\font@name{%
+ \csname\curr@fontshape/\f@size\endcsname}%
+ \pickup@font
+ \font@name
+ \@EverySelectfont@EveryHook
+ \@EverySelectfont@AtNextHook
+% \end{macrocode}
+% We have to reset \cs{@EverySelectfont@AtNextHook} after each use.
+% \begin{macrocode}
+ \gdef\@EverySelectfont@AtNextHook{}%
+ \size@update
+ \enc@update
+ }%
+% \end{macrocode}
+% The additions of \package{tracefnt} to \cs{selectfont} can be
+% implemented using \cs{EverySelectfont}.
+% \begin{macrocode}
+ \@ifpackageloaded{tracefnt}{%
+ \EverySelectfont{%
+ \ifnum \tracingfonts>\tw@
+ \@font@info{Switching to \font@name}\fi}%
+ }{}%
+% \end{macrocode}
+% The additions of \package{CJK} to \cs{selectfont} can be
+% implemented using \cs{EverySelectfont}.
+% \changes{v1.2}{2011-10-27}{Check for \package{CJK}.}
+% \begin{macrocode}
+ \@ifpackageloaded{CJK}{%
+ \EverySelectfont{%
+ \expandafter\ifx\csname CJK@\curr@fontshape\endcsname \relax
+ \else
+ \CJK@bold@false
+ \csname CJK@\curr@fontshape\endcsname
+ \fi}%
+ }{}%
+% \end{macrocode}
+% Since \cs{@EverySelectfont@Init} should only be used once it is
+% self-destructing.
+% \begin{macrocode}
+ \let\@EverySelectfont@Init\undefined
+ }
+% \end{macrocode}
+% Finally we insert \cs{EverySelectfont@Init} into \cs{begin\{document\}}.
+% \begin{macrocode}
+\AtBeginDocument{\@EverySelectfont@Init}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% ^^A -----------------------------
+%
+% \begin{macrocode}
+%</fallback>
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \Finale
+% ^^A