summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/fonttable
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/fonttable
Initial commit
Diffstat (limited to 'macros/latex/contrib/fonttable')
-rwxr-xr-xmacros/latex/contrib/fonttable/README83
-rw-r--r--macros/latex/contrib/fonttable/fonttable.dtx1318
-rwxr-xr-xmacros/latex/contrib/fonttable/fonttable.ins69
-rw-r--r--macros/latex/contrib/fonttable/fonttable.pdfbin0 -> 309980 bytes
4 files changed, 1470 insertions, 0 deletions
diff --git a/macros/latex/contrib/fonttable/README b/macros/latex/contrib/fonttable/README
new file mode 100755
index 0000000000..0d79019aa5
--- /dev/null
+++ b/macros/latex/contrib/fonttable/README
@@ -0,0 +1,83 @@
+------------------------------------------------------------------
+The FONTTABLE package
+
+The fonttable package enables you to print a table of the characters
+in a font (a font table), and/or some example text, and/or individual
+glyphs in a variety of settings.
+
+This, in a package form, is a poor man's version of nfssfont.tex and
+testfont.tex.
+
+------------------------------------------------------------------
+Change History
+
+1.6c (2017/06/06) - Fix bug with fonts with `at' in their name
+1.6b (2011/02/13) - Fix bug with Spanish babel
+1.6 (2009/10/15)
+- New spacing behaviour of the decimal numbers, courtesy Peter Wilson
+
+1.5d (2009/09/22) - Fix the bug for real, this time
+1.5c (2009/09/20) - Bug fix with \nodecimals
+1.5b (2009/09/02) - New maintainer (Will Robertson)
+1.51 (2009/05/14)
+- Eliminated a clash with the babel package.
+- Described how to avoid a clash with the mftinc package.
+
+1.5 (2009/05/12)
+- Added code providing a packaged version of Donald Knuth's
+ testfont.tex, principally as an aid for font designers in
+ testing their font.
+
+1.4 (2009/05/06) - Added a second method for specifying a font.
+1.3c (2009/04/30) - Fixed a major bug relating to redefining \:
+1.2 (2008/05/08) - Minor extensions providing more text examples
+1.1 (2006/10/02) - Minor extensions providing more text examples
+1.0a (2005/12/06) - Fixed bug preventing multiple unnumbered tables
+1.0 (2005/11/27) - First public release
+
+------------------------------------------------------------------
+
+ Author: Peter Wilson (Herries Press)
+ Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+ Copyright 2005--2009 Peter R. Wilson
+ Copyright 2009--2011, 2017 Will Robertson
+
+ 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: <http://www.latex-project.org/lppl.txt>
+
+ This work has the LPPL maintenance status "maintained".
+ The Current Maintainer of this work is Will Robertson.
+
+ This work consists of the files:
+ - README (this file)
+ - fonttable.dtx
+ - fonttable.ins
+ - fonttable.pdf
+ and the derived file
+ - fonttable.sty
+
+------------------------------------------------------------------
+
+The distribution consists of the following files:
+
+- README (this file)
+- fonttable.dtx
+- fonttable.ins
+- fonttable.pdf
+
+To install the package:
+
+- To generate fonttable.sty run:
+ tex fonttable.ins
+- Move fonttable.sty to a location where LaTeX will find it, for example:
+ /usr/local/texlive/texmf-local/tex/latex/fonttable.sty
+
+To manually generate the manual, run:
+
+ pdflatex fonttable.dtx
+ makeindex -s gind.ist fonttable.idx # optional
+ pdflatex fonttable.dtx
+
+------------------------------------------------------------------
diff --git a/macros/latex/contrib/fonttable/fonttable.dtx b/macros/latex/contrib/fonttable/fonttable.dtx
new file mode 100644
index 0000000000..6759aa8781
--- /dev/null
+++ b/macros/latex/contrib/fonttable/fonttable.dtx
@@ -0,0 +1,1318 @@
+% \iffalse meta-comment
+%
+% fonttable.dtx
+%
+% Author: Peter Wilson (Herries Press)
+% Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+% Copyright 2005--2009 Peter R. Wilson
+% 2009--2011 Will Robertson
+%
+% 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: <http://www.latex-project.org/lppl.txt>
+%
+% This work has the LPPL maintenance status "maintained".
+% The Current Maintainer of this work is Will Robertson.
+%
+% This work consists of the files listed in the README file.
+%
+%<pack>\NeedsTeXFormat{LaTeX2e}
+%<pack>\ProvidesPackage{fonttable}
+%<*driver>
+\ProvidesFile{fonttable.dtx}
+%</driver>
+%<*driver|pack>
+ [2017/06/06 v1.6c displays a font]
+%</driver|pack>
+%
+%<*driver>
+\documentclass[twoside]{ltxdoc}
+\usepackage{url}
+\usepackage[draft=false,
+ plainpages=false,
+ pdfpagelabels,
+ bookmarksnumbered,
+ hyperindex=false,
+ colorlinks,linktocpage
+ ]{hyperref}
+\providecommand{\phantomsection}{}
+%%\OnlyDescription %% comment this out for the full glory
+\EnableCrossrefs
+\CodelineIndex
+\setcounter{StandardModuleDepth}{1}
+\makeatletter
+ \@mparswitchfalse
+\makeatother
+\renewcommand{\MakeUppercase}[1]{#1}
+\pagestyle{headings}
+\newenvironment{addtomargins}[1]{%
+ \begin{list}{}{%
+ \topsep 0pt%
+ \addtolength{\leftmargin}{#1}%
+ \addtolength{\rightmargin}{#1}%
+ \listparindent \parindent
+ \itemindent \parindent
+ \parsep \parskip}%
+ \item[]}{\end{list}}
+\begin{document}
+ \raggedbottom
+ \DocInput{fonttable.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{945}
+%
+% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
+% \DoNotIndex{\@centercr,\@cite}
+% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+% \DoNotIndex{\@input,\@ixpt,\@m}
+% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
+% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+% \DoNotIndex{\advance,\Alph,\alph}
+% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+% \DoNotIndex{\bullet}
+% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+% \DoNotIndex{\fbox}
+% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+% \DoNotIndex{\input}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+% \DoNotIndex{\NeedsTeXFormat,\newdimen}
+% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
+% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
+% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
+% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+% \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+% \DoNotIndex{\wd,\xiipt,\year,\z@}
+%
+% \changes{v1.0}{2005/11/27}{First public release}
+% \changes{v1.0a}{2005/12/06}{Minor bug fix}
+% \changes{v1.1}{2006/10/02}{Minor extensions}
+% \changes{v1.2}{2006/10/02}{Minor extensions of texts}
+% \changes{v1.3}{2009/04/30}{Fix serious bug}
+% \changes{v1.4}{2009/05/06}{Added another way to select a font}
+% \changes{v1.5}{2009/05/12}{Added code for Knuth's testfont.tex}
+% \changes{v1.51}{2009/05/14}{Eliminated a clash with babel package}
+% \changes{v1.5b}{2009/09/02}{New maintainer (Will Robertson)}
+% \changes{v1.6}{2009/10/15}{New spacing of the decimals from Peter Wilson}
+% \changes{v1.6b}{2011/02/13}{Fix bug with Spanish babel}
+% \changes{v1.6c}{2017/06/06}{Fix bug with fonts with `at' in their name}
+%
+% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
+% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option
+% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file
+% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter
+% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle
+% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment
+% \newcommand*{\AD}{\textsc{ad}}
+% \newcommand*{\thisfont}{OandS}
+%
+% \GetFileInfo{fonttable.dtx}
+% \title{The \Lpack{fonttable} package}
+%
+% \author{%
+% Author: Peter Wilson, Herries Press\\
+% Maintainer: Will Robertson\\
+% \texttt{will dot robertson at latex-project dot org}%
+% }
+% \date{\fileversion\qquad \filedate}
+% \maketitle
+% \begin{abstract}
+% The package lets you typeset the characters in a font in tabular and/or
+% running text forms.
+% \end{abstract}
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The \Lpack{fonttable} package lets you typeset a font's character set
+% in tabular and/or running text forms.
+%
+% This manual is typeset according to the conventions of the
+% \LaTeX{} \textsc{docstrip} utility which enables the automatic
+% extraction of the \LaTeX{} macro source files~\cite{COMPANION}.
+%
+% \section{The package}
+%
+% The package provides commands to typeset a table of all the glyphs in
+% a given font and to typeset an example of regular text. For font designers
+% it provides commands to typeset a `test' glyph among sets of glyphs
+% from the font.
+%
+% \DescribeMacro{\fnthours}
+% As a convenience, \cs{fnthours} prints the time of day when the file was
+% processed; it uses the 24 hour clock notation. (The macro \cs{today} prints
+% the date when the file was processed.)
+%
+% \subsection{Table and texts}
+%
+%
+% \DescribeMacro{\fonttable}
+% The command \\
+% \cs{fonttable}\marg{testfont} \\
+% typesets a table showing all the
+% glyphs in the \meta{testfont}, where \meta{testfont} is the name of a
+% font file\footnote{More precisely, the name of a \texttt{.tfm} file.}
+% like \texttt{cmr10} (for Computer Modern Roman) or \texttt{pzdr}
+% (for Zapf Dingbats).
+%
+% NOTE: The \Lpack{mftinc} package~\cite{MFTINC} for pretty-printing
+% METAFONT code also defines a \cs{fonttable} macro that is akin to this
+% one. If you want to use both packages together then you can use the following
+% general procedure for when a macro \cs{macro} is defined in both
+% \Lpack{packA} and \Lpack{packB} packages.
+% \begin{verbatim}
+% \usepackage{packA}
+% \let\macroA\macro% save packA's definition
+% \let\macro\relax% undefine \macro
+% \usepackage{packB}% now it's packB's definition of \macro
+% ...
+% \macro % use the packB defintion
+% \macroA % use the packA definition
+% \end{verbatim}
+%
+% \DescribeMacro{\xfonttable}
+% The command \\
+% \cs{xfonttable}\marg{encoding}\marg{family}\marg{series}\marg{shape} \\
+% typesets a table showing all the
+% glyphs in the font with encoding \meta{encoding} (e.g., T1 or OMS),
+% family \meta{family} (e.g., \texttt{ppl} for Palatino or \texttt{cmbrs}
+% for CM Bright Math (OMS)), font series \meta{series} (e.g., \texttt{sb}
+% for semibold of \texttt{m} for medium), and font shape \meta{shape}
+% (e.g., \texttt{n} for normal or \texttt{sc} for small caps).
+% For example: \\
+% \verb?\xfonttable{U}{pzd}{m}{n}? \\
+% for Zapf Dingbats.
+%
+% \DescribeMacro{\pikfont}
+% The command\footnote{The name was chosen in an attempt to avoid
+% clashes with other macros that might perform similar functions.} \\
+% \cs{pikfont}\marg{encoding}\marg{family}\marg{series}\marg{shape} \\
+% selects the font with encoding \meta{encoding} (e.g., T1 or OMS),
+% family \meta{family} (e.g., \texttt{ppl} for Palatino or \texttt{cmbrs}
+% for CM Bright Math (OMS)), font series \meta{series} (e.g., \texttt{sb}
+% for semibold of \texttt{m} for medium), and font shape \meta{shape}
+% (e.g., \texttt{n} for normal or \texttt{sc} for small caps).
+% For example: \\
+% \verb?\pikfont{T1}{ppl}{m}{sc}? \\
+% for Palatino small caps.
+% The size of the font corresponds to the current setting (e.g.,
+% \cs{footnotesize}, \cs{normalsize}, \cs{Large}). It can also be
+% changed after being selected by the incantation \\
+% \cs{fontsize}\marg{size}\marg{baselineskip}\cs{selectfont} \\
+% where \meta{size} is the normal height and \meta{baselineskip} is the
+% distance between text lines; the measurement system is \texttt{pts}
+% but just use numbers with no units specified. For example: \\
+% \verb?\fontsize{12}{15}\selectfont? \\
+% for a 12pt font with 15pts between baselines.
+%
+% If you are unsure about the meaning of the various arguments
+% of \cs{xfonttable} and \cs{pikfont} see
+% \textit{The Companion}~\cite[Chapter 7]{COMPANION} or the
+% \textit{LaTeX2e font selection} manual (\texttt{fntguide.tex}; try
+% \verb?texdoc fntguide?).
+%
+% \DescribeMacro{\fontrange}
+% The package attempts to populate the table with a maximum of 256 glyphs,
+% numbered from 0 to 255.
+% The \cs{fontrange}\marg{low}\marg{high} declaration changes this by reducing
+% the range so that it extends from \meta{low} to \meta{high}, where \meta{low}
+% should be at least 0 and \meta{high} at most 256, and \meta{low} less than
+% \meta{high}.
+%
+% The table is composed of blocks of sixteen characters. If necessary the
+% value of \meta{low} is adjusted lower and \meta{high} is adjusted higher
+% to match this block structure. For example, if you wanted a table of the
+% lower 128 characters then \verb?\fontrange{0}{127}? would do the job,
+% while the upper half of a 256 character font could be tabulated via
+% \verb?\fontrange{128}{255}?.
+%
+% \DescribeMacro{\decimals}
+% \DescribeMacro{\nodecimals}
+% Normally each cell in the table includes the decimal number of the position
+% in the (256) character set. \cs{nodecimals} turns off this numbering and
+% \cs{decimals} turns it on. The default is \cs{decimals}.
+%
+% \DescribeMacro{\hexoct}
+% \DescribeMacro{\nohexoct}
+% Normally the columns and rows in the table are numbered using hexadecimal
+% and octal numbers. These can be turned off by \cs{nohexoct} and turned
+% on again with \cs{hexoct}, which is the default.
+%
+% \DescribeMacro{\ftablewidth}
+% The font table's width is the length \cs{ftablewidth}, which by default
+% is set to the normal textwidth (or more exactly, to \cs{hsize}). The table
+% itself is left aligned. However, if \cs{nohexoct} is in effect the width of
+% the table is its natural width.
+%
+% \DescribeMacro{\fntcolwidth}
+% When \cs{nohexoct} is in effect the minimum width of a table column
+% is \cs{fntcolwidth}. This is initially declared as \\
+% \verb?\setwidth{\fntcolwidth}{0.08\ftablewidth}?
+%
+% \DescribeMacro{\fonttext}
+% The command \cs{fonttext}\marg{testfont} typesets an example text using
+% the \meta{testfont} (e.g. \texttt{cmr10}).
+%
+% \DescribeMacro{\simpletext}
+% \DescribeMacro{\fulltext}
+% The example text can be just a paragraph and a line of capitals,
+% or include more complex accented
+% words as well. Following the declaration \cs{fulltext} the complex words are
+% included as well as the example paragraph. The default is \cs{simpletext}
+% for just the paragraph.
+%
+% \DescribeMacro{\regulartext}
+% The command \cs{regulartext}\marg{fontspec} typesets the example text
+% using \meta{fontspec}, for example \verb?\rmfamily\itshape?
+% or \verb?\pikfont{T1}{pnc}{m}{it}?.
+%
+% \DescribeMacro{\fonttexts}
+% \DescribeMacro{\regulartexts}
+% The macro \cs{fonttexts}\marg{testfont}\marg{text} typesets \meta{text} using
+% the \meta{testfont} (e.g., \texttt{cmr10}). Similarly the macro
+% \cs{regulartexts}\marg{fontspec}\marg{text} typesets \meta{text}
+% using \meta{fontspec} (e.g., \verb?\rmfamily\itshape? or
+% \verb?\pikfont{T1}{ppl}{m}{it}?).
+%
+% \DescribeMacro{\germanparatext}
+% \DescribeMacro{\latinparatext}
+% \cs{germanparatext} expands to a German language paragraph, borrowed from the
+% \Lpack{blindtext} package~\cite{BLINDTEXT}.
+% \cs{latinparatext} expands to one version of
+% a paragraph of the traditional \textit{lorem ipsum} dummy Latin text.
+% Either, or both, of these could be used as the \meta{text} argument
+% to \cs{fonttexts} or \cs{regulartexts}. \\
+% NOTE: These were originally called \cs{germantext} and \cs{latintext}
+% but on 2009/05/14 I was told that the \Lpack{babel} package defines \cs{latintext},
+% which causes unexpected results if it is used in the same document as this
+% package. To try and be on the safe side I renamed \cs{germantext}
+% as well as \cs{latintext}.
+%
+% \DescribeMacro{\aztext}
+% \DescribeMacro{\AZtext}
+% \DescribeMacro{\digitstext}
+% \DescribeMacro{\punctext}
+% \cs{aztext} expands to the lowercase Latin alphabet a to z, and \cs{AZtext}
+% is the corresponding command for the uppercase A to Z.
+% The macros \cs{digitstext} and \cs{punctext} expand respectively to the
+% digits 0 to 9, and to the typical punctuation marks. In all cases there
+% is a space between each character.
+%
+% \subsection{Testing a glyph}
+%
+% The macros here are a reimplementation of Donald Knuth's
+% \texttt{testfont.tex}, which is available from CTAN.
+%
+% In the following, the value of a glyph argument can be specified as
+% its location in the font (i.e., as a decimal number). With a few exceptions,
+% if the glyph is within the visible ASCII range (33--126) it may instead be
+% specified by the ASCII character prefixed with a single open quote
+% mark\footnote{Sometimes called a
+% `backquote'.} (`). The exceptions are nos: 37 (\verb?%?), 92 (\verb?\?)
+% 123 (\verb?{?) and 125 (\verb?}?) (but there may be others).
+% In any case, the glyph representing the
+% character \texttt{p} can be specified either as \texttt{`p} or as
+% \texttt{112}.
+%
+% The glyphs are taken from the current font. If the font does not
+% have Latin alphabet glyphs in the ASCII locations then
+% in the descriptions below phrases like `lowercase alphabet' or `uppercase
+% alphabet' or `digits', should be taken to mean (the glyphs in) those
+% locations.
+%
+% \DescribeMacro{\glyphmixture}
+% \cs{glyphmixture}\marg{T}\marg{S}\marg{E} typesets the \meta{T} (test) glyph
+% between the glyphs in the range from \meta{S} (start) to \meta{E} (end).
+% For example \\
+% \verb?\glyphmixture{`e}{`f}{`g}? will produce \\
+% \texttt{efeeffeeefffef} \\
+% \texttt{egeeggeeegggeg}
+%
+% \DescribeMacro{\glyphalternation}
+% \cs{glyphalternation}\marg{T}\marg{S}\marg{E} typesets the \meta{T}
+% glyph alternately between each glyph in the range from \meta{S}
+% to \meta{E}.
+% For example \\
+% \verb?\glyphalternation{`e}{`f}{`g}? will produce \\
+% \texttt{efefefefefefefefe} \\
+% \texttt{egegegegegegegege}
+%
+% \DescribeMacro{\glyphseries}
+% \cs{glyphseries}\marg{T}\marg{S}\marg{E} typesets the \meta{T}
+% glyph between the glyphs in the range from \meta{S}
+% to \meta{E}.
+% For example \\
+% \verb?\glyphseries{`e}{`f}{`h}? will produce \\
+% \texttt{efegehe}
+%
+% \DescribeMacro{\glyphalphabet}
+% \DescribeMacro{\GLYPHALPHABET}
+% \cs{glyphalphabet}\marg{T} typesets the \meta{T} glyph between
+% each letter of the lowercase Latin alphabet plus a few others.
+% \cs{GLYPHALPHABET}\marg{T}
+% does the same but using the uppercase Latin alphabet.
+% For example, the output of \\
+% \verb?\glyphalphabet}{`3}? is like \\
+% \texttt{3a3b3c3d3e3f3g\ldots3z3\char31 3}\verb?~?\texttt{3\char33 3\char34 3}
+%
+% \DescribeMacro{\glyphlowers}
+% \DescribeMacro{\glyphlowers}
+% \DescribeMacro{\glyphdigits}
+% \cs{glyphlowers} takes each character of the lowercase alphabet in turn as
+% a test glyph and sets it interspersed among the other lowercase characters.
+% \cs{glyphuppers} and \cs{glyphdigits} are similar except that they use
+% the uppercase alphabet and the ten digits instead. For example,
+% \cs{glyphdigits} produces output like \\
+% \texttt{000102030405060708090} \\
+% \texttt{101112131415161718191} \\
+% \texttt{202122232425262728292} \\
+% \ldots \\
+% \texttt{909192939495969798999}
+%
+% \DescribeMacro{\glyphpunct}
+% \cs{glyphpunct} sets a collection of words with an assortment of
+% punctuation marks.
+%
+%
+% \StopEventually{
+% \bibliographystyle{alpha}
+% \renewcommand{\refname}{Bibliography}
+% \begin{thebibliography}{GMS94}
+% \addcontentsline{toc}{section}{\refname}
+%
+% \bibitem[Lik05]{BLINDTEXT}
+% Knut Lickert.
+% \newblock \emph{Blindtext.sty: Creating text for testing / Texterzeugung
+% zum testen}.
+% \newblock October 2005.
+% \newblock (Available from CTAN in \url{macros/latex/contrib/blindtext})
+%
+% \bibitem[MG04]{COMPANION}
+% Frank Mittelbach and Michel Goossens.
+% \newblock \emph{The LaTeX Companion}.
+% \newblock Second edition.
+% \newblock Addison-Wesley Publishing Company, 2004.
+%
+% \bibitem[Pak05]{MFTINC}
+% Scott Pakin
+% \newblock `The \Lpack{mftinc} package',
+% \newblock January 2005.
+% \newblock (Available from CTAN in \url{macros/latex/contrib/mftinc})
+%
+%
+% \end{thebibliography}
+%
+% \PrintIndex
+%
+% }
+%
+%
+%
+% \section{The code} \label{sec:mf}
+%
+% \begin{macrocode}
+%<*pack>
+% \end{macrocode}
+%
+% \subsection{Table and texts}
+%
+% Most of the code below is an edited version of code used in
+% \texttt{nfssfont.tex} for displaying aspects of the set of glyphs in a font.
+%
+% \begin{macro}{\sevenrm}
+% A small fixed size roman font.
+% \begin{macrocode}
+\providecommand*{\sevenrm}{\fontsize{7}{9pt}\rmfamily}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tm}
+% \begin{macro}{\f@tn}
+% \begin{macro}{\f@tp}
+% \begin{macro}{\f@tdim}
+% Counts and a dimen.
+% \begin{macrocode}
+\newcount\f@tm \newcount\f@tn \newcount\f@tp \newdimen\f@tdim
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fonttable}
+% \cs{fonttable}\marg{font} typesets a table of all the glyphs in the
+% \meta{font} (e.g., auncl10).
+% \begin{macrocode}
+\newcommand*{\fonttable}[1]{%
+ \def\f@tfontname{#1}%
+ \bgroup
+ \f@tstartfont
+ \ftable
+ \egroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pikfont}
+% \cs{pikfont}\marg{encoding}\marg{family}\marg{series}\marg{shape}
+% selects the font with \meta{encoding},
+% \meta{family}, \meta{series} and \meta{shape}.
+% \changes{v1.4}{2009/05/06}{Added \cs{pikfont}}
+% \begin{macrocode}
+\DeclareRobustCommand{\pikfont}[4]{%
+ \fontencoding{#1}\fontfamily{#2}\fontseries{#3}\fontshape{#4}\selectfont}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\xfonttable}
+% \cs{xfonttable}\marg{encoding}\marg{family}\marg{series}\marg{shape}
+% typesets a table of all the glyphs in the font with \meta{encoding},
+% \meta{family}, \meta{series} and \meta{shape}
+% (e.g., \verb?\xfonttable{T1}{pnc}{m}{it}? for New Century Schoolbook italic).
+% The original code for the macro was supplied by Enrico Gregorio.
+% \changes{v1.4}{2009/05/06}{Added \cs{xfonttable}}
+% \begin{macrocode}
+\newcommand*{\xfonttable}[4]{%
+ \begingroup
+ \pikfont{#1}{#2}{#3}{#4}%
+ \edef\f@tfontname{\fontname\font}%
+% \end{macrocode}
+% New: strip any size information from the fontname (which could be, e.g.,
+% either `\verb*|cmr10|' or `\verb*|cmr10 at 10pt|'.)
+% This wasn't necessary before because we didn't explicitly choose the font
+% size; it was inferred automatically.
+% \begin{macrocode}
+ \edef\@tempa{ \string a\string t}%
+ \edef\@tempb{\noexpand\in@{\@tempa}{\f@tfontname}}%
+ \@tempb
+ \ifin@
+ \edef\f@tfontname{\expandafter\f@tstripsize\f@tfontname}%
+ \fi
+% \end{macrocode}
+% End new code, and finish as before:
+% \begin{macrocode}
+ \normalfont
+ \f@tstartfont
+ \ftable
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\f@tstripsize}
+% Needed above.
+% \begin{macrocode}
+\edef\@tempa{%
+ \def\noexpand\f@tstripsize
+ ##1 \string a\string t##2\string p\string t{##1}%
+}
+\@tempa
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\f@tstartfont}
+% Sets up for a font table.
+% \begin{macrocode}
+\newcommand*{\f@tstartfont}{%
+% \end{macrocode}
+% New: scale the font by 0.01\% to (attempt to) avoid TeX's font optimisation.
+% This becomes a problem in Spanish babel, say, when \verb|\textfont\fam|
+% changes when \verb|cmr10| has been loaded under a different name, here.
+% (And the \verb|\textfont| can no longer be parsed correctly. See:
+% \url{http://latex-alive.tumblr.com/post/3229118083/texs-font-loading-optimisation}
+% )
+% \begin{macrocode}
+ \@tempdima=\f@size pt
+ \font\f@ttestfont=\f@tfontname\space at 0.9999\@tempdima\relax
+% \end{macrocode}
+% Continue as before:
+% \begin{macrocode}
+ \f@ttestfont \f@tsetbaselineskip
+ \ifdim\fontdimen6\f@ttestfont<10pt\relax
+ \rightskip=0pt plus 20pt\relax
+ \else
+ \rightskip=0pt plus 2em\relax
+ \fi
+ \spaceskip=\fontdimen2\f@ttestfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\f@ttestfont
+ \advance\xspaceskip by\fontdimen7\f@ttestfont
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tsetbaselineskip}
+% \begin{macrocode}
+\newcommand*{\f@tsetbaselineskip}{\setbox0=\hbox{\f@tn=0
+ \loop\char\f@tn \ifnum \f@tn<255 \advance\f@tn 1 \repeat}
+ \baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@toct}
+% \cs{f@toct}\marg{onum} typesets the octal constant \meta{onum}.
+% \begin{macrocode}
+\newcommand*{\f@toct}[1]{\hbox{\rmfamily\'{}\kern-.2em\itshape
+ #1\/\kern.05em}} % octal constant
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@thex}
+% \cs{f@thex}\marg{hnum} typesets the hexadecimal constant \meta{hnum}.
+% \begin{macrocode}
+\newcommand*{\f@thex}[1]{\hbox{\rmfamily\H{}\ttfamily#1}} % hexadecimal constant
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tsetdigs}
+% \cs{f@tsetdigs}
+% \begin{macrocode}
+\def\f@tsetdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \f@tm=\f@tn \divide\f@tm by 64 \xdef\0{\the\f@tm}%
+ \multiply\f@tm by-64 \advance\f@tm by\f@tn \divide\f@tm by 8 \xdef\1{\the\f@tm}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@ttestrow}
+% \cs{f@ttestrow} checks if there are any characters in the next block of
+% 16 slots.
+% \begin{macrocode}
+\newcommand*{\f@ttestrow}{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\f@tp=\lastpenalty}} % \f@tp=1 if none of the characters exist
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifhexoct}
+% \begin{macro}{\hexoct}
+% \begin{macro}{\nohexoct}
+% Flag for (not) setting hex and octal numbers.
+% \begin{macrocode}
+\newif\ifhexoct
+\newcommand*{\hexoct}{\hexocttrue}
+\newcommand*{\nohexoct}{\hexoctfalse}
+\hexoct
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\f@toddlinenum}
+% \cs{f@toddline}
+% \begin{macrocode}
+\newcommand*{\f@toddline}{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\f@thex{\h x}}}\smash{\box0}
+ \cr
+ \noalign{\nointerlineskip}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iff@tskipping}
+% \begin{macro}{\f@tskippingtrue}
+% \begin{macro}{\f@tskippingfalse}
+% \begin{macrocode}
+\newif\iff@tskipping
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fontrange}
+% \cs{fontrange}\marg{low}\marg{high} sets the character range to be
+% output.
+% \begin{macrocode}
+\newcommand*{\fontrange}[2]{%
+ \ifnum#1<#2\relax
+% \end{macrocode}
+% Set \cs{f@tlow} to the nearest multiple of 16 that is at or below \meta{low},
+% but first make sure that it will be at least 0.
+% \begin{macrocode}
+ \ifnum#1<\z@
+ \f@tm=\z@
+ \else
+ \f@tm=#1
+ \divide \f@tm \sixt@@n
+ \multiply \f@tm \sixt@@n
+ \fi
+ \edef\f@tlow{\the\f@tm}
+% \end{macrocode}
+% Set \cs{f@thigh} to the nearest multiple of 16 at or above \meta{high},
+% finally making sure that its maximum is 256.
+% \begin{macrocode}
+ \f@tm=#2
+ \divide \f@tm \sixt@@n
+ \advance \f@tm \@ne
+ \multiply \f@tm \sixt@@n
+ \ifnum \f@tm > \@cclvi \f@tm=\@cclvi \fi
+ \edef\f@thigh{\the\f@tm}
+ \else
+ \PackageError{fonttable}{%
+ Improper values for fontrange. Default values substituted}{\@ehc}
+ \def\f@tlow{0} \def\f@thigh{256}
+ \fi}
+\fontrange{0}{256}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tloopforsixteen}
+% \cs{f@tloopforsixteen} sets up a block of sixteen character slots.
+% \begin{macrocode}
+\newcommand*{\f@tloopforsixteen}{%
+ \ifnum\f@tn<\f@tlow \global\f@tn=\f@tlow\fi
+ \loop\f@tskippingfalse
+ \ifnum\f@tn<\f@thigh \f@tm=\f@tn \divide\f@tm \sixt@@n \chardef\next=\f@tm
+ \expandafter\f@tsetdigs\meaning\next \f@ttestrow
+ \ifnum\f@tp=\@ne \f@tskippingtrue \fi\fi
+ \iff@tskipping \global\advance\f@tn \sixt@@n \repeat}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tevenline}
+% \begin{macro}{\f@tevenlinenonum}
+% \cs{f@tevenline} gets next non-empty set of a block of 16 characters.
+% It either calls \cs{f@tmorechart} to print them, or \cs{f@tendchart} to
+% finish off the table if all 256 potential characters have been processed.
+%
+% \cs{f@tevenlinenonum} does something similar when no external numbers
+% are printed.
+% \begin{macrocode}
+\newcommand*{\f@tevenline}{%
+ \f@tloopforsixteen
+ \ifnum\f@tn=\f@thigh \let\next=\f@tendchart\else\let\next=\f@tmorechart\fi
+ \next}
+\newcommand*{\f@tevenlinenonum}{%
+ \f@tloopforsixteen
+ \ifnum\f@tn=\f@thigh
+ \\\hline
+ \else
+ \\\hline
+ \f@tmorechartnonum
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tmorechart}
+% \begin{macro}{\f@tmorechartnonum}
+% \cs{f@tmorechart} sets two lines of the table, and \cs{f@tmorechartnonum}
+% does the same when there are no external numbers.
+% \begin{macrocode}
+\newcommand*{\f@tmorechart}{\cr\noalign{\hrule\penalty5000}
+ \f@tchartline \f@toddline \f@tm=\1 \advance\f@tm 1 \xdef\1{\the\f@tm}
+ \f@tchartline \f@tevenline}
+\newcommand*{\f@tmorechartnonum}{%
+ \f@tsimpleline \\ \hline
+ \f@tsimpleline \f@tevenlinenonum}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tchartline}
+% \begin{macro}{\f@tsimpleline}
+% \cs{f@tchartline} does a line of the table, including external numbers,
+% and \cs{f@tsimpleline} does an unnumbered line.
+% \begin{macrocode}
+\newcommand*{\f@tchartline}{%
+ &\f@toct{\0\1x}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&\f@tpsg{}&&}
+\newcommand*{\f@tsimpleline}{%
+ \f@tpsg{}\f@tchartstrut& \f@tpsg{} & \f@tpsg{} & \f@tpsg{} & \f@tpsg{} & \f@tpsg{} & \f@tpsg{} & \f@tpsg{}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tchartstrut}
+% \begin{macro}{\ftablewidth}
+% \begin{macro}{\fntcolwidth}
+% \cs{f@tchartstrut} is a strut used in each table line. \cs{ftablewidth} is
+% width of an externally numbered table. \cs{fntcolwidth} is the minimum
+% width of a column in an unnumbered table.
+% \begin{macrocode}
+\newcommand*{\f@tchartstrut}{\lower4.5pt\vbox to14pt{}}
+\newdimen\ftablewidth
+ \ftablewidth=\hsize
+\newdimen\fntcolwidth
+ \setlength{\fntcolwidth}{0.08\ftablewidth}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tcol}
+% \begin{macro}{\f@tstartchartnonum}
+% \cs{f@tstartchartnonum} is a table line of spaces, with no verticals.
+% \begin{macrocode}
+\newcommand*{\f@tcol}{%
+ \multicolumn{1}{c}{\hspace*{\fntcolwidth}}}
+\newcommand*{\f@tstartchartnonum}{%
+ \f@tcol &\f@tcol &\f@tcol &\f@tcol &\f@tcol &\f@tcol &\f@tcol &\f@tcol}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ftable}
+% \begin{macro}{\f@tftablenum}
+% \begin{macro}{\f@tftablenonum}
+% \cs{ftable} sets a complete character table. The actual code is in either
+% \cs{f@tftablenum} or \cs{f@tftablenonum} for externally numbered or
+% plain tables, respectively.
+% \changes{v1.0a}{2005/12/06}{Added missing zeroing of \cs{f@tn} to \cs{f@tftablenonum}}
+% \begin{macrocode}
+\newcommand*{\f@tftablenum}{$$\global\f@tn=\z@
+ \halign to\ftablewidth\bgroup
+ \f@tchartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\f@toct0&&\f@toct1&&\f@toct2&&\f@toct3&&\f@toct4&&\f@toct5&&\f@toct6&&\f@toct7&%
+ \f@tevenline}
+\newcommand*{\f@tftablenonum}{%
+ \global\f@tn=\z@
+ \begin{tabular}{|c|c|c|c|c|c|c|c|}
+ \f@tstartchartnonum
+ \f@tevenlinenonum
+ \end{tabular}}
+\newcommand*{\ftable}{\ifhexoct\f@tftablenum\else\f@tftablenonum\fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tendchart}
+% \cs{f@tendchart} sets the last line of an externally numbered table with
+% the relevant hex digits.
+% \begin{macrocode}
+\newcommand*{\f@tendchart}{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\f@thex 8&&\f@thex 9&&\f@thex A&&\f@thex B&
+ &\f@thex C&&\f@thex D&&\f@thex E&&\f@thex F&\cr
+ \egroup$$\par}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@tpsg}
+% \changes{v1.3}{2009/04/30}{Replaced redefinition of \cs{:} by \cs{f@tpsg}}
+% \changes{v1.5c}{2009/09/20}{\cs{renewcommand}\cs{f@tpsg} instead (props Michael Niedermair)}
+% \changes{v1.5d}{2009/09/22}{Fix the bug for real this time}
+% \begin{macro}{\f@placechar}
+% \begin{macro}{\f@placedecimal}
+% \cs{f@tpsg} typesets a single glyph, possibly with its decimal slot number.
+% \cs{f@placechar} is the function to typeset the glyph with its number that is
+% internally defined as \cs{f@placedecimal} if decimals are to be shown.
+% \begin{macrocode}
+\newcommand*{\f@tpsg}{%
+ \setbox\z@=\hbox{\f@placechar{\char\f@tn}{\the\f@tn}}%
+ \ifdim\ht\z@>7.5pt\relax
+ \f@treposition
+ \else
+ \ifdim\dp\z@>2.5pt\relax
+ \f@treposition
+ \fi
+ \fi
+ \box\z@
+ \global\advance\f@tn\@ne
+}
+% \end{macrocode}
+% Change this definition to adjust the typesetting of the decimal numbers:
+% \begin{macrocode}
+\newcommand*\f@placedecimal[2]{#1\ {\tiny #2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\decimals}
+% \begin{macro}{\nodecimals}
+% Following \cs{decimals}, which is the default, decimal numbers are
+% printed in the table. Following \cs{nodecimals} they are not printed.
+% \begin{macrocode}
+\newcommand*{\nodecimals}{%
+ \renewcommand*\f@placechar{\@firstoftwo}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\decimals}{%
+ \renewcommand*\f@placechar{\f@placedecimal}%
+}
+\newcommand*\f@placechar{}
+\decimals
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@treposition}
+% \cs{f@treposition}
+% \begin{macrocode}
+\newcommand*{\f@treposition}{\setbox0=\vbox{\kern2pt\box0}\f@tdim=\dp0
+ \advance\f@tdim 2pt \dp0=\f@tdim}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fonttext}
+% \cs{fonttext}\marg{font} typesets \cs{knutext} using \meta{font} (e.g.
+% auncl10).
+% \begin{macrocode}
+\def\fonttext#1{%
+ \def\f@tfontname{#1}%
+ \bgroup
+ \f@tstartfont
+ \knutext
+ \egroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\regulartext}
+% \cs{regulartext}\marg{fontspec} typesets \cs{knutext} using \meta{fontspec}
+% (e.g., \cs{aunclfamily}).
+% \begin{macrocode}
+\def\regulartext#1{%
+ \bgroup
+ #1
+ \knutext
+ \egroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knutext}
+% Deathless prose from Knuth for testing a font. It includes
+% \cs{moreknutext}, \cs{capknutext}, and \cs{knunames}.
+% \begin{macrocode}
+\def\knutext{{
+On November 14, 1885, Senator \& Mrs.~Leland Stanford called together
+at their San Francisco mansion the 24~prominent men who had been
+chosen as the first trustees of The Leland Stanford Junior University.
+They handed to the board the Founding Grant of the University, which
+they had executed three days before. This document---with various
+amendments, legislative acts, and court decrees---remains as the
+University's charter. In bold, sweeping language it stipulates that
+the objectives of the University are ``to qualify students for
+personal success and direct usefulness in life; and to promote the
+publick welfare by exercising an influence in behalf of humanity and
+civilization, teaching the blessings of liberty regulated by law, and
+inculcating love and reverence for the great principles of government
+as derived from the inalienable rights of man to life, liberty, and
+the pursuit of happiness.''
+
+\moreknutext
+
+\capknutext
+
+\knunames
+\par}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@moreknutext}
+% Some more text with a variety of ligatures and accents.
+% \begin{macrocode}
+\def\@moreknutext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's
+{\OE}uvres often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's
+official r\^ole in fluffy souffl\'es? }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@capknutext}
+% \begin{macro}{\capknutext}
+% Text using only capital letters and some punctuation.
+% \begin{macrocode}
+\newcommand{\@capknutext}{%
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)}
+\let\capknutext\@capknutext
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@knunames}
+% Lots of accents masquerading in personal names.
+% \begin{macrocode}
+\def\@knunames{ {\AA}ngel\aa\ Beatrice Claire
+ Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
+ Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave
+ Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula
+ Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\guillemotleft}
+% \begin{macro}{\guillemotright}
+% \begin{macro}{\flqq}
+% \begin{macro}{\frqq}
+% Just in case the French quotes are not defined, as they are called for in
+% the subsequent \cs{germantext}.
+% \changes{v1.2}{2008/05/08}{Replaced \cs{providecommand} for guillemots
+% by \cs{DeclareTextSymbol}}
+% \begin{macrocode}
+\DeclareTextSymbol{\guillemotleft}{OT1}{`\'}
+\DeclareTextSymbol{\guillemotright}{OT1}{`\`}
+\providecommand{\flqq}{\guillemotleft}
+\providecommand{\frqq}{\guillemotright}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\germantext}
+% \begin{macro}{\germanparatext}
+% Text from the \Lpack{Blindtext} package.
+% \changes{v1.1}{2006/10/02}{Added \cs{germantext}}
+% \changes{v1.51}{2009/05/14}{Changed \cs{germantext} to \cs{germanparatext}}
+% \begin{macrocode}
+\providecommand*{\germantext}{%
+ \PackageWarning{fonttable}{\protect\germantext\space is deprecated,
+ \MessageBreak use \protect\germanparatext\space instead}}
+\newcommand*{\germanparatext}{%
+Dies hier ist ein Blindtext zum Testen von Textausgaben. Wer
+diesen Text liest, ist selbst schuld. Der Text gibt lediglich den
+Grauwert der Schrift an. Ist das wirklich so? Ist es
+gleich\-g\"ul\-tig ob ich schreibe: \frqq Dies ist ein
+Blindtext\flqq\ oder \frqq Huardest gefburn\flqq? Kjift --
+mitnichten! Ein Blindtext bietet mir wichtige Informationen. An
+ihm messe ich die Lesbarkeit einer Schrift, ihre Anmutung, wie
+harmonisch die Figuren zueinander stehen und pr\"u\-fe, wie breit
+oder schmal sie l\"auft. Ein Blindtext sollte m\"og\-lichst viele
+verschiedene Buchstaben enthalten und in der Originalsprache
+gesetzt sein. Er mu\ss\ keinen Sinn ergeben, sollte aber lesbar
+sein. Fremdsprachige Texte wie \frqq Lorem ipsum\flqq\ dienen
+nicht dem eigentlichen Zweck, da sie eine
+falsche Anmutung vermitteln.\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\latintext}
+% \begin{macro}{\latinparatext}
+% The traditional printers' text.
+% \changes{v1.1}{2006/10/02}{Added \cs{latintext}}
+% \changes{v1.51}{2009/05/14}{Changed \cs{latintext} to \cs{latinparatext}
+% because of a clash with the babel package}
+% \begin{macrocode}
+\providecommand*{\latintext}{%
+ \PackageWarning{fonttable}{\protect\latintext\space may be overridden by the
+ babel package \MessageBreak use
+ \protect\latinparatext\space instead}}
+\newcommand*{\latinparatext}{%
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam
+lobortis facilisis sem. Nullam nec mi et neque pharetra
+sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper,
+felis non sodales commodo, lectus velit ultrices augue, a
+dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie
+ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in
+sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Duis fringilla tristique neque. Sed interdum libero ut metus.
+Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit
+amet ante lobortis sollicitudin. Praesent blandit blandit mauris.
+Praesent lectus tellus, aliquet aliquam, luctus a, egestas a,
+turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum
+turpis accumsan semper.\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\simpletext}
+% \begin{macro}{\fulltext}
+% \begin{macro}{\moreknutext}
+% \begin{macro}{\knunames}
+% \cs{simpletext} kills off \cs{moreknutext} and \cs{knunames}.
+% \cs{fulltext} restores \cs{moreknutext} and \cs{knunames}.
+% Make \cs{fulltext} the default.
+% \begin{macrocode}
+\newcommand*{\simpletext}{\let\moreknutext\relax \let\knunames\relax}
+\newcommand*{\fulltext}{\let\moreknutext\@moreknutext \let\knunames\@knunames}
+\fulltext
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{fonttexts}
+% \cs{fonttexts}\marg{font}\marg{text} typesets \meta{text} using \meta{font} (e.g.
+% auncl10).
+% \changes{v1.1}{2006/10/02}{Added \cs{fonttexts}}
+% \begin{macrocode}
+\def\fonttexts#1#2{%
+ \def\f@tfontname{#1}%
+ \bgroup
+ \f@tstartfont
+ #2
+ \egroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\regulartexts}
+% \cs{regulartext}\marg{fontspec}\marg{text} typesets \meta{text} using \meta{fontspec}
+% (e.g., \cs{aunclfamily}).
+% \changes{v1.1}{2006/10/02}{Added \cs{regulartexts}}
+% \begin{macrocode}
+\def\regulartexts#1#2{%
+ \bgroup
+ #1 #2
+ \egroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\aztext}
+% \begin{macro}{\AZtext}
+% \begin{macro}{\digitstext}
+% \begin{macro}{\punctext}
+% The various characters used for Latin texts.
+% \changes{v1.2}{2008/05/08}{Added \cs{aztext}, \cs{AZtext}, \cs{digitstext}
+% and \cs{punctext}}
+% \begin{macrocode}
+\newcommand*{\aztext}{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}
+\newcommand*{\AZtext}{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}
+\newcommand*{\digitstext}{0 1 2 3 4 5 6 7 8 9}
+\newcommand*{\punctext}{` ! @ \$ \& * ( ) \_ - + = [ ] < > \{ \} : ; ' , . ? /}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Testing a glyph}
+%
+% This is a reimplementation of Donald Knuth's \texttt{testfont.tex} which
+% is available from CTAN and there is also a commented version in Appendix H
+% of \textit{The METAFONT Book}.
+%
+% \begin{macro}{\fnthours}
+% \begin{macro}{\f@ttwodigits}
+% The time of day on a 24 hour clock.
+% \begin{macrocode}
+%%%%%%%% using \@tempcnta for Knuth's \m and \@tempcntb for his \n
+\newcommand*{\fnthours}{\@tempcntb=\time \divide\@tempcntb 60
+ \@tempcnta=-\@tempcntb \multiply\@tempcnta 60 \advance\@tempcnta \time
+ \f@ttwodigits\@tempcntb:\f@ttwodigits\@tempcnta}
+\newcommand*{\f@ttwodigits}[1]{\ifnum #1<10 0\fi \number#1}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tgettsechars}
+% \begin{macro}{\f@ttchar}
+% \begin{macro}{\f@tschar}
+% \begin{macro}{\f@techar}
+% \cs{f@tgettsechars}\marg{T}\marg{S}\marg{E} gets three characters
+% and \cs{chardef}s \cs{f@ttchar} to \meta{T} (the test character),
+% \cs{f@tschar} to \meta{S} (start character) and \cs{f@techar}
+% to \meta{E} (the end character).
+% \begin{macrocode}
+\newcommand*{\f@tgettsechars}[3]{%
+ \chardef\f@ttchar=#1 \chardef\f@tschar=#2 \chardef\f@techar=#3}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glyphmixture}
+% \begin{macro}{\f@tmixpattern}
+% \begin{macro}{\f@tdomix}
+% \cs{glyphmixture}\marg{T}\marg{S}\marg{E} sets a mix of \meta{T} within
+% the glyph range from \meta{S} to \meta{E} according to the pattern
+% \cs{f@tmixpattern}. The work is done by \cs{f@tdomix}.
+% \begin{macrocode}
+\newcommand*{\glyphmixture}[3]{\f@tgettsechars{#1}{#2}{#3}%
+ \f@tdomix\f@tmixpattern}
+\newcommand*{\f@tmixpattern}{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
+\newcommand*{\f@tdomix}[1]{\par\chardef\0=\f@ttchar \@tempcntb=\f@tschar
+ \loop \chardef\1=\@tempcntb #1\endgraf
+ \ifnum \@tempcntb<\f@techar \advance\@tempcntb \@ne \repeat}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glyphalternation}
+% \begin{macro}{\f@taltpattern}
+% These are similar to \cs{glyphmixture} and \cs{f@tmixpattern} except
+% that the glyphs are alternated.
+% \begin{macrocode}
+\newcommand*{\glyphalternation}[3]{\f@tgettsechars{#1}{#2}{#3}%
+ \f@tdomix\f@taltpattern}
+\newcommand*{\f@taltpattern}{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\f@tdisc}
+% For breaking long lines so that the test character will be at the end
+% of one line and repeated at the start of the next one.
+% \begin{macrocode}
+\newcommand*{\f@tdisc}{\discretionary{\f@ttchar}{\f@ttchar}{\f@ttchar}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\glyphseries}
+% \begin{macro}{\f@tdoseries}
+% \cs{glyphseries}\marg{T}\marg{S}\marg{E} puts the test character \meta{T}
+% between all the others in the range \meta{S} to \meta{E}. The work is
+% done by \cs{f@tdoseries}.
+% \begin{macrocode}
+\newcommand*{\glyphseries}[3]{\f@tgettsechars{#1}{#2}{#3}%
+ \f@tdisc\f@tdoseries\f@tschar\f@techar\par}
+\newcommand*{\f@tdoseries}[2]{\@tempcntb=#1\relax
+ \loop\char\@tempcntb\f@tdisc
+ \ifnum\@tempcntb<#2\advance\@tempcntb \@ne \repeat}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glyphalphabet}
+% \begin{macro}{\GLYPHALPHABET}
+% \begin{macro}{\f@tcomplower}
+% \begin{macro}{\f@tcompupper}
+% \cs{glyphalphabet}\marg{T} inserts the test glyph \meta{T} between the lowercase
+% alphabetic characters. Similarly \cs{GLYPHALPHABET}\marg{T} does
+% the same with the uppercase characters. The work is done by, respectively,
+% \cs{f@tcomplower} and \cs{f@tcompupper}.
+% \begin{macrocode}
+\newcommand*{\glyphalphabet}{\f@tcomplower}
+\newcommand*{\GLYPHALPHABET}{\f@tcompupper}
+\newcommand*{\f@tcomplower}[1]{\chardef\f@ttchar=#1
+ \f@tdisc\f@tdoseries{`a}{`z}\f@tdoseries{31}{34}\par}
+\newcommand*{\f@tcompupper}[1]{\chardef\f@ttchar=#1
+ \f@tdisc\f@tdoseries{`A}{`Z}\f@tdoseries{35}{37}\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glyphlowers}
+% \begin{macro}{\glyphuppers}
+% \begin{macro}{\glyphdigits}
+% \begin{macro}{\f@tclc}
+% \begin{macro}{\f@tcuc}
+% \begin{macro}{\f@tdgs}
+% \begin{macro}{\f@tdocomprehensive}
+% These macros generate an extended mix of characters of a particular kind.
+% The work is done by \cs{f@tdocomprensive} with \cs{f@tclc}, \cs{f@tcuc}, and
+% \cs{f@tdgs} setting up the glyph sets.
+% \begin{macrocode}
+\newcommand*{\glyphlowers}{\f@tdocomprehensive\f@tclc{`a}{`z}{31}{34}}
+\newcommand*{\glyphuppers}{\f@tdocomprehensive\f@tcuc{`A}{`Z}{35}{37}}
+\newcommand*{\glyphdigits}{\f@tdocomprehensive\f@tdgs{`0}{`4}{`5}{`9}}
+\newcommand*{\f@tdocomprehensive}[5]{\par\chardef\f@ttchar=#2
+ \loop{#1} \ifnum\f@ttchar<#3\@tempcnta=\f@ttchar\advance\@tempcnta \@ne
+ \chardef\f@ttchar=\@tempcnta \repeat
+ \chardef\f@ttchar=#4
+ \loop{#1} \ifnum\f@ttchar<#5\@tempcnta=\f@ttchar\advance\@tempcnta \@ne
+ \chardef\f@ttchar=\@tempcnta \repeat}
+\newcommand*{\f@tclc}{\f@tdisc\f@tdoseries{`a}{`z}\f@tdoseries{31}{34}\par}
+\newcommand*{\f@tcuc}{\f@tdisc\f@tdoseries{`A}{`Z}\f@tdoseries{35}{37}\par}
+\newcommand*{\f@tdgs}{\f@tdisc\f@tdoseries{`0}{`9}\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glyphpunct}
+% \begin{macro}{\f@tdopunct}
+% \cs{glyphpunct} sets punctuation marks in combination with different
+% sorts of letters. The work is done by \cs{f@tdopunct}.
+% \begin{macrocode}
+\newcommand*{\glyphpunct}{\par\f@tdopunct{min}\f@tdopunct{pig}\f@tdopunct{hid}
+ \f@tdopunct{HIE}\f@tdopunct{TIP}\f@tdopunct{fluff}
+ \$1,234.56 + 7/8 = 9\% @ \#0\par}
+\newcommand*{\f@tdopunct}[1]{#1,\ #1:\ #1;\ `#1'\
+ ?`#1?\ !`#1!\ (#1)\ [#1]\ #1*\ #1.\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% The end of the package.
+% \begin{macrocode}
+%</pack>
+% \end{macrocode}
+%
+%
+%
+%
+% \Finale
+\endinput
+
+%% \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 \~}
+
+
diff --git a/macros/latex/contrib/fonttable/fonttable.ins b/macros/latex/contrib/fonttable/fonttable.ins
new file mode 100755
index 0000000000..487e56060f
--- /dev/null
+++ b/macros/latex/contrib/fonttable/fonttable.ins
@@ -0,0 +1,69 @@
+%% fonttable.ins
+%% Author: Peter Wilson (Herries Press)
+%% Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+%% Copyright 2005--2009 Peter R. Wilson
+%%
+%% 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: <http://www.latex-project.org/lppl.txt>
+%%
+%% This work has the LPPL maintenance status "maintained".
+%% The Current Maintainer of this work is Will Robertson.
+%%
+%% This work consists of the files listed in the README file.
+%%
+%% This file will generate fast loadable files from the doc files
+%% in this work when run through LaTeX
+%%
+%% --------------------- start of docstrip commands --------------
+%%
+\def\batchfile{fonttable.ins}
+\input docstrip.tex
+\preamble
+------------------------------------------------------------------
+ Author: Peter Wilson (Herries Press)
+ Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+ Copyright 2005--2009 Peter R. Wilson
+
+ 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: <http://www.latex-project.org/lppl.txt>
+
+ This work has the LPPL maintenance status "maintained".
+ The Current Maintainer of this work is Will Robertson.
+
+ This work consists of the files listed in the README file.
+------------------------------------------------------------------
+\endpreamble
+
+\askforoverwritefalse
+\keepsilent
+
+%%% \Msg{*** Generating the driver file ***}
+%%% \generate{\file{fonttable.drv}{\from{fonttable.dtx}{driver}}}
+
+\Msg{*** Generating the LaTeX2e package files ***}
+\generate{\file{fonttable.sty}{\from{fonttable.dtx}{pack}}}
+
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move these files}
+\Msg{* into the LaTeX macro area:}
+\Msg{* \space\space fonttable.sty}
+\Msg{*}
+\Msg{* Further installation instructions are in the README}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through LaTeX.}
+\Msg{* Process any name.idx file by:}
+\Msg{* \space\space\space\space makeindex -s gind.ist name}
+\Msg{* Process any name.glo file by:}
+\Msg{* \space\space\space\space makeindex -s gglo.ist -o name.gls name.glo}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+
+\endinput
diff --git a/macros/latex/contrib/fonttable/fonttable.pdf b/macros/latex/contrib/fonttable/fonttable.pdf
new file mode 100644
index 0000000000..2ff3f16b40
--- /dev/null
+++ b/macros/latex/contrib/fonttable/fonttable.pdf
Binary files differ