% \iffalse meta-comment % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Copyright (C) Martin Schröder, 1994–2001 % Marei Peischl (peiTeX) , 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 . % % 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 %\NeedsTeXFormat{LaTeX2e}[1995/12/01] %\ProvidesPackage{everysel} % [2021/01/20 v2.1 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} % % \fi % \CheckSum{189} %% \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.} % \iffalse %<*package> % \fi % \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}} % \end{macrocode} % \changes{v2.1}{2021-01-20}{Add \textbackslash{}@EverySelectfont@Legacy + conditional warning} % Some packages are using the intial hook of everysel internally (see also \url{https://github.com/latex3/latex2e/issues/474}). % So Version 2.1 provides these macros to ensure compatibility. % In case someone is changing the inital hook everysel will now show a warning to inform package authors to switch to lthooks instead. % A future release is planned to always trigger this warning. % \begin{macrocode} \newcommand*\@EverySelectfont@Legacy{\let\@EverySelectfont@Init\undefined} \newcommand*{\@EverySelectfont@Init}{\@EverySelectfont@Legacy} \AddToHook{begindocument}{% \expandafter\ifx\@EverySelectfont@Init\@EverySelectfont@Legacy\else \PackageWarningNoLine{everysel}{% Everysel is no longer required.,\MessageBreak The LaTeX kernel is now providing the same functionality itself.,\MessageBreak See the package documentation or lthooks-doc for further information. }% \fi \@EverySelectfont@Init } % \end{macrocode} % \iffalse % % \fi % ^^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}. % \iffalse %<*fallback> % \fi % \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} \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 ----------------------------- % \iffalse % % \fi % % % ^^A ----------------------------- % % \Finale % ^^A