summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ms/everysel.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/ms/everysel.dtx')
-rw-r--r--macros/latex/contrib/ms/everysel.dtx418
1 files changed, 418 insertions, 0 deletions
diff --git a/macros/latex/contrib/ms/everysel.dtx b/macros/latex/contrib/ms/everysel.dtx
new file mode 100644
index 0000000000..7e415dfa40
--- /dev/null
+++ b/macros/latex/contrib/ms/everysel.dtx
@@ -0,0 +1,418 @@
+% \iffalse
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<package>\ProvidesPackage{everysel}
+%<package> [2011/10/28 v1.2 EverySelectfont Package (MS)]
+%
+%<*driver>
+\ProvidesFile{everysel.drv}
+ [2009/05/30 v1.1 Driver for EverySelectfont Package (MS)]
+\documentclass[a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{url}
+\usepackage[toc]{multitoc}
+\usepackage{lmodern,microtype,svn}
+\usepackage{hypdoc}
+\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}{2}
+% 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}
+ \PrintIndex\PrintChanges
+ % Make sure that the index is not printed twice
+ % (ltxdoc.cfg might have a second \PrintIndex command)
+ \let\PrintChanges\relax
+\end{document}
+%</driver>
+%
+% Copyright (C) [1996..2011] by Martin Schr\"oder.
+%
+% This work may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License, either version 1.3 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.3 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 Martin Schröder
+%
+% This work consists of the files everysel.dtx and everysel.ins
+% and the derived files everysel.sty
+%
+% \fi
+%
+% \CheckSum{156}
+%
+%% \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 \~}
+%
+% \SVN $Rev: 1712 $
+% \SVNdate $Date: 2011-10-28 23:10:13 +0200 (Fr, 28. Okt 2011) $
+%
+% \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 \package{EverySel} package^^A
+% \thanks{^^A
+% The version number of this file is \fileversion, subversion
+% revision~\#\SVNRev, last revised \protect\SVNDate.\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\"oder\\[0.5ex]
+% \normalsize Unterstra\ss{}e 31\\
+% \normalsize 47051 Duisburg\\
+% \normalsize Germany\\
+% \normalsize \href{mailto:martin@oneiros.de}{\texttt{martin@oneiros.de}}}
+% \maketitle
+%
+%
+% ^^A -----------------------------
+%
+%
+% \begin{abstract}
+% This packages provides hooks into the NFSS-command
+% \cs{selectfont} called \cs{EverySelectfont} and
+% \cs{AtNextSelectfont} analogous to \cs{AtBeginDocument}.
+% \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}.
+%
+%
+% ^^A -----------------------------
+%
+% \begin{thebibliography}{1}
+% \raggedright
+% \bibitem{package:tracefnt}
+% Frank Mittelbach and Rainer Sch\"opf.
+% \newblock The \package{tracefnt} package for use with the new
+% font selection scheme.
+% \newblock \url{CTAN: tex-archive/macros/latex/base/ltfsstrc.dtx}.
+% \newblock \LaTeXe{} package.
+% \bibitem{package:ragged2e}
+% Martin Schr\"oder.
+% \newblock The \package{ragged2e} package.
+% \newblock \url{CTAN: tex-archive/macros/latex/contrib/supported/ms/ragged2e.dtx}.
+% \newblock \LaTeXe{} package.
+% \end{thebibliography}
+%
+% }
+%
+%
+% ^^A -----------------------------
+%
+% \section{The implementation}
+% ^^A
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{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 -----------------------------
+%
+% \subsection{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 -----------------------------
+%
+% \subsection{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}
+%</package>
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \Finale
+% ^^A vim:tw=70:ts=2