summaryrefslogtreecommitdiff
path: root/macros/latex/base/nfssfont.dtx
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/base/nfssfont.dtx
Initial commit
Diffstat (limited to 'macros/latex/base/nfssfont.dtx')
-rw-r--r--macros/latex/base/nfssfont.dtx485
1 files changed, 485 insertions, 0 deletions
diff --git a/macros/latex/base/nfssfont.dtx b/macros/latex/base/nfssfont.dtx
new file mode 100644
index 0000000000..41712816b2
--- /dev/null
+++ b/macros/latex/base/nfssfont.dtx
@@ -0,0 +1,485 @@
+% \iffalse meta-comment
+%
+% Copyright 1993-2016
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It 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
+% https://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 file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+\def\nfssfontfileversion{v2.2d}
+\def\nfssfontfiledate{2015/02/01}
+
+%
+% \iffalse
+% Copyright (C) 1994 Donald E. Knuth
+% Copyright (C) 1994-94, 2003, 2006 Frank Mittelbach,
+% all rights reserved.
+% \fi
+%
+%
+% \title{The program \texttt{nfssfont}}
+% \author{Frank Mittelbach\thanks{Adapted from code written
+% by Donald E.~Knuth}}
+% \date{\nfssfontfiledate}
+%
+%
+% \def\dst{{\normalfont\scshape docstrip}}
+% \def\NFSS{\textsf{NFSS}}
+% \setcounter{StandardModuleDepth}{1}
+%
+%
+% \MaintainedByLaTeXTeam{latex}
+% \maketitle
+%
+% \section{Introduction}
+%
+% Within the \NFSS{} distribution there is a \LaTeX{} file
+% \texttt{nfssfont.tex} which can be used to test new fonts, produce
+% font tables showing all characters, etc. This is an addaption of a
+% program originally written by Don Knuth.
+
+% When you run this file through \LaTeX{} you will be asked to enter
+% the name of the font to test. Your answer should be the external
+% font name without any extension, e.g.\ \texttt{cmr10} (Computer
+% Modern Roman 10pt) or \texttt{yinit} (Yannis Haralambous' Initial
+% font).
+%
+% Alternatively (since version 2.1), you can press \meta{return} at
+% this point. In that case a dialog is started that asks you for the
+% font characteristics in \NFSS{} notation, i.e., first for the
+% encoding scheme (default \texttt{T1}), then for the family name
+% (default \texttt{cmr}), then for the series (default \texttt{m}),
+% then for the shape (default \texttt{n}), and finally for the size
+% (default \texttt{10pt}).
+%
+% You are then requested to enter a command. Probably the most
+% important one is |\table|, which will produce a font chart. To
+% switch to a new test font, type |\init|; to finish the test, type
+% |\bye|; and to learn about all the other possible tests type
+% |\help|.
+%
+% This is at
+% the moment only a crude addaption of the test program for the
+% Computer Modern fonts by Donald Knuth.
+%
+% \StopEventually{}
+%
+% \section{A driver for this document}
+%
+% The next bit of code contains the documentation driver file for
+% \TeX{}, i.e., the file that will produce the documentation you are
+% currently reading. It will be extracted from this file by the
+% \dst{} program.
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+ % \OnlyDescription % comment out for implementation details
+\begin{document}
+ \DocInput{nfssfont.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{The code}
+%
+% A testbed for font evaluation (see The METAFONTbook, Appendix H)
+% changed for \LaTeX{} with \NFSS.
+%
+% This program should get a complete rewrite some day or at least some
+% code documentation. Any volunteers?
+% \begin{macrocode}
+%<*code>
+\documentclass{article}
+\nofiles
+\setlength\textwidth{470pt}
+\setlength\oddsidemargin{0pt}
+\addtolength\textheight{7\baselineskip}
+\addtolength\topmargin{-3\baselineskip}
+
+\def\sevenrm{\fontencoding{OT1}\fontsize{7}{9pt}\rmfamily}
+
+\typeout{**********************************************}
+\typeout{* NFSS font test program version <\nfssfontfileversion>}
+\typeout{*}
+\typeout{* Follow the instructions}
+\typeout{**********************************************}
+\typeout{}
+
+\tracinglostchars=0
+\tolerance=1000
+\raggedbottom
+\parindent=0pt
+%\newlinechar=`@ %FMi
+\hyphenpenalty=200
+\doublehyphendemerits=30000
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\hours{\n=\time \divide\n 60
+ \m=-\n \multiply\m 60 \advance\m \time
+ \twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+% \end{macrocode}
+%
+% We first ask for a real external font name\ldots
+% \begin{macrocode}
+\def\init{%
+ \typein[\currfontname]%
+ {Input external font name, e.g., cmr10^^J%
+ (or <enter> for NFSS classification of font):}%
+% \end{macrocode}
+% If the answer is a real font name (like ``cmr10'') then we have no idea
+% what the encoding of this font is, so in this case we record the word
+% ``unknown'' and internally assume |T1| encoding. Commands other than
+% |\table| are then most likely going to fail, unless that assumption was
+% correct.
+% \begin{macrocode}
+ \def\encoding{unknown}%
+ \fontencoding{T1}\selectfont
+% \end{macrocode}
+% If the user answers with ``return'' we ask for the \NFSS{}
+% classification of the font in form of encoding, family, series,
+% shape, and size offering a default each time.
+% \begin{macrocode}
+ \ifx\currfontname\empty
+ \typein[\encoding]{^^J^^J*** NFSS classification
+ ***^^J^^JFont encoding [T1]:}%
+ \ifx\encoding\empty
+ \fontencoding{T1}%
+ \def\encoding{T1}%
+ \else
+% \end{macrocode}
+% Depending on the chosen encoding we have the problem, that the encoding
+% support information may not be available (only for |T1| and |OT1| this is
+% preloaded in the kernel, all other encodings normally need a declaration in
+% the preamble). So here we attempt to load this support file even though
+% it is actually already too late for this.
+% \begin{macrocode}
+ \edef\next{%
+ \lowercase{\def\noexpand\next{\encoding enc.def}}}%
+ \next
+ \makeatletter
+ \InputIfFileExists\next
+ {}%
+% \end{macrocode}
+% If the encoding support file is not found this may indicate an error, eg
+% something misspelled. However, it may equally mean that we dealing
+% with a math font encoding for which no encoding support is
+% available.
+% \begin{macrocode}
+ {\PackageWarningNoLine{nfssfont}%
+ {Encoding file `\next' not found.%
+ \MessageBreak
+ You might have misspelt the name of the encoding
+ \MessageBreak
+ or perhaps this encoding is not a text encoding,
+ \MessageBreak
+ in which case you will probably only be able to
+ \MessageBreak
+ run the \noexpand\table command successfully}%
+% \end{macrocode}
+% But actually the situation is even worse, as some math
+% encodings do have such support files. So for them we need to make the encoding
+% known to NFSS in some other way, otherwise we could not even find the
+% external font name, let alone typesetting a |\table|.
+% \begin{macrocode}
+ \expandafter\let\csname T@\encoding\endcsname\empty
+ }%
+ \makeatother
+ \let\next\relax
+ \fontencoding\encoding
+ \fi
+ \typein[\family]{Font family [cmr]:}%
+ \relax
+ \ifx\family\empty
+ \fontfamily{cmr}%
+ \else
+ \fontfamily\family
+ \fi
+ \typein[\series]{Font series [m]:}%
+ \ifx\series\empty
+ \fontseries{m}%
+ \else
+ \fontseries\series
+ \fi
+ \typein[\shape]{Font shape [n]:}%
+ \ifx\shape\empty
+ \fontshape{n}%
+ \else
+ \fontshape\shape
+ \fi
+ \typein[\size]{Font size [10pt]:}%
+ \ifx\size\empty
+ \fontsize{10}{10}%
+ \else
+ \fontsize\size\size
+ \fi
+% \end{macrocode}
+% Finally select the font and assign it to |\currfontname|.
+% \begin{macrocode}
+ \selectfont\edef\currfontname{\fontname\font}%
+ \fi
+ \startfont
+ \message{Now type a test command (\string\help\space for help):}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\startfont{\font\testfont=\currfontname
+ \leftline{\sevenrm Test of font \currfontname\unskip\ (encoding
+ \encoding\unskip) on \today\ at \hours}
+ \medskip
+ \testfont \setbaselineskip
+ \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt
+ \else\rightskip=0pt plus 2em \fi
+ \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\testfont \advance\xspaceskip
+ by\fontdimen7\testfont}
+% \end{macrocode}
+%
+% \begin{macrocode}
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|help{|message{%
+\init switches to another font;^^J%
+\stop or \bye finishes the run;^^J%
+\table prints the font layout in tabular format;^^J%
+\text prints a sample text, assuming TeX text font conventions;^^J%
+\sample combines \table and \text;^^J%
+\mixture mixes a background character with a series of others;^^J%
+\alternation interleaves a background character with a series;^^J%
+\alphabet prints all lowercase letters within a given background;^^J%
+\ALPHABET prints all uppercase letters within a given background;^^J%
+\series prints a series of letters within a given background;^^J%
+\lowers prints a comprehensive test of lowercase;^^J%
+\uppers prints a comprehensive test of uppercase;^^J%
+\digits prints a comprehensive test of numerals;^^J%
+\math prints a comprehensive test of TeX math italic;^^J%
+\names prints a text that mixes upper and lower case;^^J%
+\punct prints a punctuation test;^^J%
+\bigtest combines many of the above routines;^^J%
+\help repeats this message;^^J%
+and you can use ordinary TeX commands (e.g., to \input a file).}}}
+
+\def\setbaselineskip{\setbox0=\hbox{\n=0
+\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
+\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\setchar#1{{\escapechar-1\message{\string#1 character = }%
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \read-1 to\next
+ \expandafter\finsetchar\next\next#1}}
+\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
+ \ifnum #3=`\# \global\chardef#3=#2 \fi}
+\def\promptthree{\setchar\background
+ \setchar\starting \setchar\ending}
+
+\def\mixture{\promptthree \domix\mixpattern}
+\def\alternation{\promptthree \domix\altpattern}
+\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
+\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
+\def\domix#1{\par\chardef\0=\background \n=\starting
+ \loop \chardef\1=\n #1\endgraf
+ \ifnum \n<\ending \advance\n 1 \repeat}
+
+\def\!{\discretionary{\background}{\background}{\background}}
+\def\series{\promptthree \!\doseries\starting\ending\par}
+\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat}
+\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par}
+\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par}
+\def\compdigs{\!\doseries{`0}{`9}\par}
+\def\alphabet{\setchar\background\complower}
+\def\ALPHABET{\setchar\background\compupper}
+
+\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}}
+\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}}
+\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}}
+\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2
+ \loop{#1} \ifnum\background<#3\m=\background\advance\m 1
+ \chardef\background=\m \repeat \chardef\background=#4
+ \loop{#1} \ifnum\background<#5\m=\background\advance\m 1
+ \chardef\background=\m \repeat}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\names{ {\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}
+\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid}
+ \dopunct{HIE}\dopunct{TIP}\dopunct{fluff}
+ \$1,234.56 + 7/8 = 9\% @ \#0\par}
+\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\
+ #1*\ #1.\par}
+
+\def\bigtest{\sample
+ hamburgefonstiv HAMBURGEFONSTIV\par
+ \names \punct \lowers \uppers \digits}
+
+\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial
+ \mathchardef\Gamma="100 \mathchardef\Delta="101
+ \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104
+ \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107
+ \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A
+ \def\ii{i} \def\jj{j}
+ \def\\##1{|##1|+}\mathtrial
+ \def\\##1{##1_2+}\mathtrial
+ \def\\##1{##1^2+}\mathtrial
+ \def\\##1{##1/2+}\mathtrial
+ \def\\##1{2/##1+}\mathtrial
+ \def\\##1{##1,{}+}\mathtrial
+ \def\\##1{d##1+}\mathtrial
+ \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial}
+\newcount\skewtrial \skewtrial='177
+\def\mathtrial{$\\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 \\a \\b \\c \\d \\e \\f
+ \\g \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w
+ \\x \\y \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta
+ \\\eta \\\theta \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi
+ \\\rho \\\sigma \\\tau \\\upsilon \\\phi \\\chi \\\psi \\\omega
+ \\\vartheta \\\varpi \\\varphi \\\Gamma \\\Delta \\\Theta \\\Lambda
+ \\\Xi \\\Pi \\\Sigma \\\Upsilon \\\Phi \\\Psi \\\Omega \\\partial
+ \\\ell \\\wp$\par}
+\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests
+ \def\mathtrial{$\\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$\par}
+ \math\endgroup}
+% \end{macrocode}
+% Here we have to ensure that we use a suitable encoding otherwise our
+% octal and hexadecimal constants will appear in whatever encoding the
+% current font is.
+% \begin{macrocode}
+\def\oct#1{\hbox{\fontencoding{OT1}\rmfamily\'{}\kern-.2em\itshape
+ #1\/\kern.05em}}% octal constant
+\def\hex#1{\hbox{\fontencoding{OT1}\rmfamily
+ \H{}\ttfamily#1}}% hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\table{$$\global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\text{{\advance\baselineskip-4pt
+\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz}
+\ifdim\hsize>2\wd0
+ \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi
+\fi
+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.'' \moretext
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}}
+\def\moretext{?`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? }
+\def\omitaccents{\let\moretext=\relax}
+
+\def\sample{\table\text}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bye{\end{document}}
+% \end{macrocode}
+%
+% The redefinition of |\typeout| around the |\begin{document}|
+% prevents \LaTeX{} from reporting that there is no |.aux| file.
+% This is a bad hack, I agree :-)
+% \begin{macrocode}
+\let\oldtypeout\typeout
+\def\typeout#1{}
+% \end{macrocode}
+% And another bad hack: to be able to load an encoding definition file
+% after |\begin{document}| I disable the preamble only setting.
+% \begin{macrocode}
+\makeatletter
+\let\@preamblecmds\@empty
+\makeatother
+
+\begin{document}
+\let\typeout\oldtypeout
+
+\ifx\noinit!\else\init\fi
+%</code>
+% \end{macrocode}
+%
+%
+% \DeleteShortVerb{\|}
+% \Finale
+%
+\endinput