Last active
July 21, 2016 13:00
-
-
Save zr-tex8r/67c5b77f4729772d92da3dfb473e5e14 to your computer and use it in GitHub Desktop.
LaTeX: Much ado about the old font commands
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% bxoldfontcmd.sty | |
%% package declaration | |
\NeedsTeXFormat{LaTeX2e} | |
\ProvidesPackage{bxoldfontcmd} | |
\def\bxof@pkgname{bxoldfontcmd} | |
%% code guards | |
\@onlypreamble\bxof@restore@codes | |
\edef\bxof@restore@codes{% | |
\catcode33=\the\catcode33% | |
\catcode39=\the\catcode39% | |
\catcode45=\the\catcode45% | |
\catcode46=\the\catcode46% | |
\catcode47=\the\catcode47% | |
\catcode58=\the\catcode58% | |
\catcode59=\the\catcode59% | |
\catcode60=\the\catcode60% | |
\catcode62=\the\catcode62% | |
\catcode94=\the\catcode94% | |
\endlinechar=\the\endlinechar% | |
\relax} | |
\catcode33=12 % <!> | |
\catcode39=12 % <'> | |
\catcode45=12 % <-> | |
\catcode46=12 % <.> | |
\catcode47=12 % </> | |
\catcode58=12 % <:> | |
\catcode59=12 % <;> | |
\catcode60=12 % <<> | |
\catcode62=12 % <>> | |
\catcode94=7 % <^> | |
\endlinechar=13 % | |
\AtEndOfPackage{\bxof@restore@codes} | |
\providecommand\bxDebug[1]{} | |
%--------------------------------------- helpers | |
%% packages | |
\RequirePackage{keyval} | |
%% unique tokens | |
\def\bxof@end{\bxof@end@} | |
%% switches | |
\newif\ifbxof@ok | |
%% \bxof@set@number\CS{<number>} | |
\def\bxof@set@number#1#2{% | |
#1=#2\relax} | |
%--------------------------------------- options | |
%% \ifbxof@aho | |
\newif\ifbxof@aho | |
%% \ifbxof@total | |
\newif\ifbxof@total | |
%% \ifbxof@stats | |
\newif\ifbxof@stats | |
%% \bxof@mode | |
\chardef\bxof@mode@banned=0 | |
\chardef\bxof@mode@deprecated=1 | |
\chardef\bxof@mode@allowed=2 | |
\chardef\bxof@mode@praised=3 | |
\let\bxof@mode\bxof@mode@deprecated | |
%% \bxof@freq | |
\newcount\bxof@freq \bxof@freq=1000000 | |
%% 'noaho'/'aho' | |
\DeclareOption{noaho}{% | |
\bxof@ahofalse} | |
\DeclareOption{aho}{% | |
\bxof@ahotrue} | |
%% 'nostats'/'stats' | |
\DeclareOption{nostats}{% | |
\bxof@statstfalse} | |
\DeclareOption{stats}{% | |
\bxof@statstrue} | |
%% 'deprecated' etc. | |
\DeclareOption{banned}{% | |
\let\bxof@mode\bxof@mode@banned} | |
\DeclareOption{deprecated}{% | |
\let\bxof@mode\bxof@mode@deprecated} | |
\DeclareOption{praised}{% | |
\let\bxof@mode\bxof@mode@praised} | |
\DeclareOption{allowed}{% | |
\let\bxof@mode\bxof@mode@allowed} | |
%% keyval options | |
\DeclareOption*{% | |
\edef\bxof@tmpa{\noexpand\setkeys{bxof}{\CurrentOption}% | |
}\bxof@tmpa} | |
\define@key{bxof}{freq}{% | |
\bxof@set@number\bxof@freq{#1}} | |
%% process | |
\ProcessOptions\relax | |
%% postprocess | |
\ifnum\bxof@freq<\@ne | |
\PackageError\bxof@pkgname | |
{The 'freq' value must be positive\MessageBreak | |
(value=\the\bxof@freq)} | |
{That value is changed to 1.\MessageBreak\@ehc} | |
\bxof@freq=1 | |
\fi | |
\ifnum\bxof@mode=\bxof@mode@banned | |
\bxof@freq=1 | |
\fi | |
%--------------------------------------- | |
%% variables | |
\let\bxof@name\relax | |
\let\bxof@cseq\relax | |
%\bxof@g@C/<name> | |
\def\bxof@g@total{0} | |
%% \bxof@g@name@list | |
\let\bxof@g@name@list\@empty | |
%% \bxof@get@name\CS | |
\def\bxof@get@name#1{% | |
\begingroup\escapechar\m@ne | |
\xdef\bxof@g@tmpa{\def\noexpand\bxof@name{\string#1}}% | |
\endgroup \bxof@g@tmpa | |
\edef\bxof@cseq{\@backslashchar\bxof@name}} | |
%% \bxof@cmd@declared\FCS | |
\@onlypreamble\bxof@cmd@declared | |
\def\bxof@cmd@declared#1{% | |
\begingroup | |
\bxof@get@name#1% | |
\bxDebug{DECLARED: \bxof@name}% | |
\expandafter\bxof@cmd@declared@a\csname bxof@g@C/\bxof@name\endcsname | |
\endgroup} | |
\@onlypreamble\bxof@cmd@declared@a | |
\def\bxof@cmd@declared@a#1{% | |
\ifx#1\relax | |
\let\do\relax | |
\xdef\bxof@g@name@list{\bxof@g@name@list\noexpand\do{\bxof@name}}% | |
\gdef#1{0}% | |
\fi} | |
%% \bxof@cmd@used\FCS | |
\def\bxof@cmd@used#1{% | |
\begingroup | |
\bxof@get@name#1% | |
\bxof@countup | |
\ifbxof@ok | |
\ifnum\bxof@mode=\bxof@mode@banned | |
\bxof@issue@error | |
\else\ifnum\bxof@mode=\bxof@mode@deprecated | |
\bxof@issue@warning | |
\else\ifnum\bxof@mode=\bxof@mode@praised | |
\bxof@issue@praise | |
\fi\fi\fi | |
\fi | |
\endgroup} | |
%% \bxof@countup | |
\def\bxof@countup{% | |
\expandafter\bxof@countup@a\csname bxof@g@C/\bxof@name\endcsname} | |
\def\bxof@countup@a#1{% | |
% check the phase | |
\bxof@okfalse | |
\@tempcnta=\ifbxof@total\bxof@g@total\else#1\fi\relax | |
\@tempcntb\@tempcnta \divide\@tempcntb\bxof@freq | |
\multiply\@tempcntb-\bxof@freq \advance\@tempcntb\@tempcnta | |
\ifnum\@tempcntb=\z@ \bxof@oktrue \fi | |
% command count | |
\@tempcnta=#1\relax \advance\@tempcnta\@ne | |
\xdef#1{\the\@tempcnta}% | |
% total count | |
\@tempcnta=\bxof@g@total\relax \advance\@tempcnta\@ne | |
\xdef\bxof@g@total{\the\@tempcnta}% | |
\bxDebug{\bxof@name=#1; total=\bxof@g@total}} | |
%% end-document hook | |
\AtEndDocument{% | |
\ifnum\bxof@mode=\bxof@mode@deprecated | |
\bxof@issue@warning@last | |
\fi | |
\ifbxof@stats | |
\bxof@show@stats | |
\fi} | |
%--------------------------------------- aho font | |
%% if that one really exists.... | |
\IfFileExists{bxahofont.sty}{% | |
\RequirePackage{bxahofont}[]% | |
}{} | |
\ifx\textaho\@undefined | |
%% declare the aho font in private | |
\def\bxof@aho@fam{bxof-aho}\let\bxof@tmpa\bxof@aho@fam | |
\DeclareFontFamily{OT1}{\bxof@tmpa}{} | |
\DeclareFontShape{OT1}{\bxof@tmpa}{m}{n}{<->cmfi10}{} | |
\def\do#1#2{% | |
\DeclareFontShape{OT1}{\bxof@tmpa}{#1}{#2}{<->ssub*\bxof@tmpa/m/n}{}} | |
\do{m}{it}\do{m}{sl}\do{m}{sc} | |
\do{bx}{n}\do{bx}{it}\do{bx}{sl}\do{bx}{sc} | |
\DeclareRobustCommand\ahofont{% | |
\not@math@alphabet\ahofont\mathaho | |
\usefont{OT1}{\bxof@aho@fam}{m}{it}} | |
\DeclareTextFontCommand{\textaho}{\ahofont} | |
\DeclareMathAlphabet{\mathaho}{OT1}{\bxof@aho@fam}{m}{it} | |
%% | |
\fi | |
%--------------------------------------- messages | |
%% \bxof@issue@error | |
\def\bxof@issue@error{% | |
\PackageError\bxof@pkgname | |
{The old font comamnd '\bxof@cseq' is banned} | |
{Don't even think of writing the command!\MessageBreak | |
And throw away all the obsolete stuffs that depend on it!}} | |
%% \bxof@issue@warning | |
\def\bxof@issue@warning{% | |
\PackageWarning\bxof@pkgname | |
{Alas, the old font comamnd '\bxof@cseq' is used\MessageBreak | |
on input line \the\inputlineno.\MessageBreak | |
(The later occurrence of similar warnings may\MessageBreak | |
be suppressed.)\@gobbletwo}} | |
%% \bxof@issue@warning@last | |
\def\bxof@issue@warning@last{% | |
\ifnum\bxof@g@total>\z@ | |
\let\bxof@tmpa\@empty | |
\def\do##1{% | |
\expandafter\ifnum\csname bxof@g@C/##1\endcsname>\z@ | |
\edef\bxof@tmpa{\bxof@tmpa\space\@backslashchar##1}\fi}% | |
\bxof@g@name@list | |
\PackageWarningNoLine\bxof@pkgname | |
{Some of the old font comamnds were used:\MessageBreak | |
\space\bxof@tmpa\MessageBreak | |
All those commands are deprecated, because you\MessageBreak | |
have declared so. If that is not what you want,\MessageBreak | |
try \string\usepackage[allowed]{\bxof@pkgname}} | |
\fi} | |
%% \bxof@show@stats | |
\begingroup | |
\catcode10=12 | |
\gdef\bxof@show@stats{% | |
\let\bxof@tmpa\@empty | |
\def\do##1{% | |
\expandafter\ifnum\csname bxof@g@C/##1\endcsname>\z@ | |
\edef\bxof@tmpa{\bxof@tmpa\space\@backslashchar##1: % | |
\csname bxof@g@C/##1\endcsname^^J}% | |
\fi}% | |
\bxof@g@name@list | |
\typeout | |
{Here is how many times old font commands are invoked:^^J% | |
\bxof@tmpa\space Total: \bxof@g@total}% | |
} | |
\endgroup | |
%--------------------------------------- the big praise | |
%% \bxof@praise@message | |
\begingroup | |
\catcode`\^^A=14 \catcode`\#=12 | |
\catcode`\^^\=0 \catcode`\^^[=1 \catcode`\^^]=2 \catcode`\^^X=6 | |
\endlinechar=10 \catcode10=12 \catcode96=7 \let\do\@makeother | |
\dospecials``\gdef``\bxof@praise@message``X1``X2``[``A | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
! ! ! ! ! ! ! ! ! ! E X C E L L E N T ! ! ! ! ! ! ! ! ! ! | |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
____ | |
___HHHH _____ You are using the command ``X1 | |
/ . . \ |NICE!| on input line ``X2. | |
\ --- / |~~~~~ | |
V :#######: Y I'll greatly praise you for your use | |
\/ o \/ of such old font commands. | |
{ o } | |
\_______/ HURRAY!! | |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%``]``A | |
``\endgroup% | |
%% \bxof@issue@praise | |
\begingroup | |
\catcode10=12 | |
\gdef\bxof@issue@praise{% | |
\typeout{^^J% | |
\bxof@praise@message{\bxof@cseq}{\the\inputlineno}}} | |
\endgroup | |
%--------------------------------------- define the comamnds | |
%% \DeclareOldFontCommand redefined | |
\def\DeclareOldFontCommand#1#2#3{% | |
\bxof@cmd@declared#1% | |
\let#1\@undefined | |
\ifbxof@aho | |
\DeclareRobustCommand#1{% | |
\bxof@cmd@used#1% | |
\@fontswitch{\ahofont}{\mathaho}} | |
\else | |
\DeclareRobustCommand#1{% | |
\bxof@cmd@used#1% | |
\@fontswitch{#2}{#3}} | |
\fi} | |
%% redefine the commands | |
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} | |
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} | |
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} | |
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} | |
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} | |
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} | |
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} | |
% pTeX commands | |
\ifx\mcfamily\@undefined\else | |
\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc} | |
\fi | |
\ifx\gtfamily\@undefined\else | |
\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt} | |
\fi | |
%--------------------------------------- all done | |
\endinput | |
%% EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\documentclass[a4paper]{article} | |
\usepackage{bxoldfontcmd}% '\bf' is deprecated | |
%\usepackage[freq=5]{bxoldfontcmd}% more warnings | |
%\usepackage[stats]{bxoldfontcmd}% show statistics | |
%\usepackage[banned]{bxoldfontcmd}% '\bf' is banned | |
%\usepackage[praised]{bxoldfontcmd}% '\bf' is praised! hurray! | |
\begin{document} | |
Once upon a time, there {\it were} some {\bf old} font commands. | |
\end{document} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage
You can laod the package as follows:
The available options are:
banned
/deprecated
/allowed
/praised
: Specifies how the use of old font commands is treated.stats
: Shows the usage statistics of old commands at the end of the process.nostats
: Negation ofstats
.freq=<number>
: Frequency that specifies how often the (error/warning/praise) message is shown on the terminal.aho
: Tells that the old font comamnd should ignore its definition and always change to the 'CM Funny Italic' font.noaho
: Negation ofaho
.