diff options
author | Karl Berry <karl@freefriends.org> | 2021-01-19 22:59:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-01-19 22:59:50 +0000 |
commit | 80460fda8d228c402f6884f414d657289525b321 (patch) | |
tree | a274c50b6bf721bed5d82d6d1d4967e968d6a3bd /Master/texmf-dist/source/latex/everysel/everysel.dtx | |
parent | aed39258e5ad434172043bc056b61e14af6cb031 (diff) |
everysel (19jan21)
git-svn-id: svn://tug.org/texlive/trunk@57472 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/everysel/everysel.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/everysel/everysel.dtx | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/everysel/everysel.dtx b/Master/texmf-dist/source/latex/everysel/everysel.dtx new file mode 100644 index 00000000000..9a4c702f83b --- /dev/null +++ b/Master/texmf-dist/source/latex/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 |