% $Id: note.tex,v 1.2 1999/06/10 05:51:53 loreti Exp $ \documentclass[a4paper]{article} \usepackage{verbatim} \newdimen\boxfigwidth \newenvironment{bigbox} {\begingroup\boxfigwidth=\hsize% \advance\boxfigwidth by -2\fboxrule% \advance\boxfigwidth by -2\fboxsep% \setbox4=\vbox\bgroup\hsize\boxfigwidth% \hrule height0pt width\boxfigwidth\par\bigskip% \linewidth=\boxfigwidth% }{\smallskip\egroup\fbox{\box4}\endgroup} \makeatletter \renewcommand{\fnum@figure}{\textsc{\figurename~\thefigure}} \renewcommand{\section}{\@startsection {section}{1}{\z@}% {-3.5ex \@plus -1ex \@minus -.2ex}% {2.3ex \@plus.2ex}% {\normalfont\Large\sffamily\bfseries}} \makeatother \begin{document} \title{\scshape How to use ``Old-Style Digits''\\ with the Lucida fonts} \author{\textsc{Maurizio Loreti}\thanks{ EMail: \texttt{loreti@pd.infn.it}}} \date{Rev.\ 1.2\quad--\quad 1999-06-10} \maketitle \noindent As a system administrator and local \TeX pert, I have been asked by an user to build a style file to automagically switch all the occurrences of a digit in the printed text to the so-called \emph{old-style digits}. Although I do not share the aesthetic preferences of this user, I have solved the problem satisfactorily; the main difficulty has been to understand how to define a \emph{virtual font}, because guidelines and examples were difficult to find. Here follows a short description of what I have done, hoping that other people wishing to define a virtual font will find it useful; I want to excuse myself for my bad english, and to thank Mr.\ Allin Cottrell, whose examples for Computer Modern have been an important starting point\/\footnote{They may be found under his web page in \texttt{http://www.wfu.edu/\textasciitilde cottrell}.}. A couple of notes: the old-style digits are in the LucidaNewMath-AltItalic font (normal weight) and in the LucidaNewMath-AltDemiItalic font (DemiBold weight); the latter is in the ``Lucida Expert'' font package, that is \emph{required} in order to obtain \emph{bold} old-style digits. All the \verb|.fd|, \verb|.tfm| and \verb|.vf| auxilliary files are built with Unix command procedures for the \verb|bash| shell, freely available from the Free Software Foundation\/\footnote{By anonymous ftp from \texttt{prep.ai.mit.edu} (and its mirrors) in \texttt{/pub/gnu}; download \texttt{/pub/gnu/GNUinfo/FTP} for a list of the mirror sites.}; the only used features missing from the usual Bourne shell environment (\verb|/bin/sh|) are: \begin{itemize} \item The parameter expansion commands like \texttt{\$\{par\%word\}} and \texttt{\$\{par\#word\}}: they first expand ``word'' to a pattern, and then remove from the end (the former) or from the beginning (the latter) of the expansion of the environment variable ``par'' the substring matching that pattern (in a Bourne shell environment they may be easily simulated with \verb|sed| pipes). \item The command substitution syntax: \verb|$(command)| is the \verb|bash| equivalent of the Bourne shell construct \verb|`command`|. \end{itemize} All the file manipulation is done with \verb|awk| programs; in our installation, the \verb|GNU| version of \verb|awk| comes first in the path: but the \verb|GNU| extensions to the language are not used, and any \verb|awk| flavour should understand these programs. \section{The style file} \verb|lucold.sty| is the style file; it has two options, \verb|text| (or \verb|notext|) and \verb|math| (or \verb|nomath|), to select (or, respectively, deselect) old-style digits in the text mode and in the math mode. The default options are \verb|[text,nomath]|; when \verb|notext| and \verb|math| are both explicitely selected, a warning is printed and \verb|notext| changed to \verb|text|: since having old-style digits in the mathematics and not in the text has poor meaning (in my opinion, of course). \verb|lucold.sty| is straightforward, being just a wrapper around the single command that remaps the text default font family to \verb|hlos| (in the current encoding), and the additional commands that remap the math-mode digits to the text font; the style file for Lucida, \verb|lucidabr.sty|, normally uses \verb|hlh| as default text font family. \section{The font definition files} The second step is the creation of the \verb|.fd| files for \verb|hlos| in the needed encodings; the \verb|OT1| (or Knuth) encoding is the default, but here in Italy we mainly use the \verb|T1| (or Cork) encoding. \begin{figure}[htbp] \begin{bigbox} \begin{verbatim} #! /bin/bash cp $TETEXDIR/texmf/tex/latex/lucidabr/*t1hlh.fd . for infile in *.fd do outfile="${infile%h.fd}os.fd" awk >$outfile -f makefd.awk -v infile=$infile done rm *t1hlh.fd \end{verbatim} \end{bigbox} \caption{the \texttt{makefd} shell procedure.} \label{fig:fd} \end{figure} The two font definition files \verb|ot1hlos.fd| and \verb|t1hlos.fd| are easily obtained using \verb|[o]t1hlh.fd| as a template; the shell procedure in figure \ref{fig:fd} does exactly that. The \verb|awk| program \verb|makefd.awk| remaps all the upright fonts of the \verb|hlos| family to a new set of (virtual) fonts, called \begin{center} \begin{tabular}{|c|c||c|c|} \hline & & New & Original \\ Encoding & Weight & Font & Font \\ \hline \hline \verb|OT1| & Normal & \verb|hlor7t| & \verb|hlhr7t| \\ \verb|OT1| & Bold & \verb|hlob7t| & \verb|hlhb7t| \\ \verb|T1| & Normal & \verb|hlor8t| & \verb|hlhr8t| \\ \verb|T1| & Bold & \verb|hlob8t| & \verb|hlhb8t| \\ \hline \end{tabular} \end{center} using as a template the input file given as a parameter in the \verb|-v| command option. All the other variants (italic, slanted, \ldots) of the \verb|hlos| family are left mapped to the same fonts used in the original \verb|.fd| files. \section{The \TeX\ font metric files} The third step is the creation of the \verb|.tfm| files: essentially, the shell procedure of figure \ref{fig:tfm} copies some of the metric files of the original fonts of the \verb|hlh| family to the current directory; then converts them to an human-readable form (\verb|.pl| files) using \verb|tftopl|; then, using \verb|maketfm.awk|, substitutes the section describing the digits with the corresponding section taken from the \verb|.tfm| files of the fonts with the old-style digits, i.e.\ \verb|hlcrima| (normal weight) and \verb|hlcdima| (boldface). \begin{figure}[htbp] \begin{bigbox} \begin{verbatim} #! /bin/bash cp $TETEXDIR/texmf/fonts/tfm/bh/lubright/hlh??t.tfm . cp $TETEXDIR/texmf/fonts/tfm/bh/lumath/hlc?im*.tfm . for file in *.tfm do tftopl $file ${file%tfm}pl done awk >hlor7t.pl -f maketfm.awk \ -v infile1=hlhr7t.pl -v infile2=hlcrima.pl awk >hlob7t.pl -f maketfm.awk \ -v infile1=hlhb7t.pl -v infile2=hlcdima.pl awk >hlor8t.pl -f maketfm.awk \ -v infile1=hlhr8t.pl -v infile2=hlcrima.pl awk >hlob8t.pl -f maketfm.awk \ -v infile1=hlhb8t.pl -v infile2=hlcdima.pl pltotf hlor7t.pl hlor7t.tfm pltotf hlob7t.pl hlob7t.tfm pltotf hlor8t.pl hlor8t.tfm pltotf hlob8t.pl hlob8t.tfm rm hl???t.pl hlc?im*.tfm \end{verbatim} \end{bigbox} \caption{the \texttt{maketfm} shell procedure.} \label{fig:tfm} \end{figure} Next, the merged \verb|.pl| files are converted to binary \verb|.tfm| files with \verb|pltotf|; and, finally, the few files that are no more needed are removed. \section{The virtual font files} \begin{figure}[htbp] \begin{bigbox} \begin{verbatim} #! /bin/bash cp $TETEXDIR/texmf/fonts/vf/bh/lubright/hlh??t.vf . for file in hlh??t.vf do base="${file%vf}" vftovp ${base}vf ${base}tfm ${base}vpl done to="hlor7t"; from="hlhr7t.vpl"; mft="hlcrima" ck="$(grep CHECKSUM ${mft}.pl | cut -d" " -f3 | sed 's/)//')" awk >tmp -f maketfm.awk -v infile1=$from -v infile2=${mft}.pl awk >${to}.vpl -f makevf.awk -v infile=tmp \ -v mft=$mft -v ck=$ck vptovf ${to}.vpl ${to}.vf ${to}.tfm rm tmp to="hlob7t"; from="hlhb7t.vpl"; mft="hlcdima" ck="$(grep CHECKSUM ${mft}.pl | cut -d" " -f3 | sed 's/)//')" awk >tmp -f maketfm.awk -v infile1=$from -v infile2=${mft}.pl awk >${to}.vpl -f makevf.awk -v infile=tmp \ -v mft=$mft -v ck=$ck vptovf ${to}.vpl ${to}.vf ${to}.tfm rm tmp to="hlor8t"; from="hlhr8t.vpl"; mft="hlcrima" ck="$(grep CHECKSUM ${mft}.pl | cut -d" " -f3 | sed 's/)//')" awk >tmp -f maketfm.awk -v infile1=$from -v infile2=${mft}.pl awk >${to}.vpl -f makevf.awk -v infile=tmp \ -v mft=$mft -v ck=$ck vptovf ${to}.vpl ${to}.vf ${to}.tfm rm tmp to="hlob8t"; from="hlhb8t.vpl"; mft="hlcdima" ck="$(grep CHECKSUM ${mft}.pl | cut -d" " -f3 | sed 's/)//')" awk >tmp -f maketfm.awk -v infile1=$from -v infile2=${mft}.pl awk >${to}.vpl -f makevf.awk -v infile=tmp \ -v mft=$mft -v ck=$ck vptovf ${to}.vpl ${to}.vf ${to}.tfm rm tmp *.pl *.vpl hlh*.tfm hlh*.vf \end{verbatim} \end{bigbox} \caption{the \texttt{makevf} shell procedure.} \label{fig:vf} \end{figure} The last step is the generation of the \verb|.vf| files; their human-readable form (the \verb|.vpl| files) are essentially \verb|.pl| files, with the addition of some sections: a \verb|VTITLE|, one or more \verb|MAPFONT| records describing the real fonts, and a \verb|MAP| entry in the record of every character describing how to obtain it from a real font. In the figure \ref{fig:vf}, the shell procedure that builds the \verb|.vf| files is listed; it performs the following steps: \begin{itemize} \item The \verb|.vf| files for the original fonts are copied to the current directory, and converted to \verb|.vpl| files using \verb|vftovp|; \item The checksum of the \verb|.tfm| file from which the old-style digits are taken is extracted from the corresponding \verb|.pl| file, and stored in the \verb|ck| environment variable; \item The program \verb|maketfm.awk| is executed, to substitute the section of every \verb|.vpl| file describing digits with the corresponding section for the old-style digits (taken from the relevant \verb|.pl| file): note that in that step the \verb|MAP| entry for every digit is lost; \item The program \verb|makevf.awk|, that adds to the \verb|.vpl| file a valid \verb|MAPFONT| record and valid \verb|MAP| entries for every digit, is executed; \item The \verb|.vpl| files are converted to binary using \verb|vptovf|, and a final cleanup is performed. \end{itemize} What is left is simply to move the \verb|*.sty|, \verb|*.fd|, \verb|*.tfm| and \verb|*.vf| files to the right directory of the \TeX\ tree. \section{History and Copyright} The first version of this package (1.0) has been updated because the font names in the default Lucida files distributed with the \LaTeX\ PSNFSS package have changed; the second version (1.1) stated in an improper way the license conditions. This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; either version 2, or (at your option) any later version. The text of the GNU GPL\footnote{Version 2, June 1991. Copyright \copyright\ 1989--1991 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.} is included in the file README of this distribution. \end{document}