From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/base/nfssfont.dtx | 485 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 485 insertions(+) create mode 100644 macros/latex/base/nfssfont.dtx (limited to 'macros/latex/base/nfssfont.dtx') 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} +% +% \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 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 +% +% \end{macrocode} +% +% +% \DeleteShortVerb{\|} +% \Finale +% +\endinput -- cgit v1.2.3