summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex')
-rw-r--r--Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex1293
1 files changed, 1293 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex b/Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex
new file mode 100644
index 00000000000..3d1027d9415
--- /dev/null
+++ b/Master/texmf-dist/doc/fontinst/base/encspecs/encspecs.tex
@@ -0,0 +1,1293 @@
+\documentclass[a4paper]{article}
+
+\usepackage{array}
+
+\makeatletter
+\@ifundefined{l@nohyphenation}{\newlanguage\l@nohyphenation}{}
+\DeclareRobustCommand\meta[1]{%
+ \ensuremath{\langle}%
+ \sbox{\z@}{%
+ \setlanguage\l@nohyphenation
+ \normalfont\itshape #1\/%
+ \setlanguage\language
+ }%
+ \unhbox\z@
+ \ensuremath{\rangle}%
+}
+\makeatother
+\DeclareRobustCommand\marg[1]{%
+ \texttt{\char`\{}\meta{#1}\texttt{\char`\}}%
+}
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+
+\makeatletter
+\DeclareTextFontCommand\textsmaller{%
+ \fontsize{\scaledsize{\f@size}}{\f@baselineskip}\selectfont
+}
+\newcommand\scaledsize[1]{%
+ \ifdim #1\p@>6\p@
+ \ifdim #1\p@>7\p@
+ \ifdim #1\p@>8\p@
+ \ifdim #1\p@>9\p@
+ \ifdim #1\p@>10\p@
+ \ifdim #1\p@>11\p@
+ \ifdim #1\p@>12\p@
+ \ifdim #1\p@>14\p@ 14%
+ \else 12\fi
+ \else 11\fi
+ \else 10\fi
+ \else 9\fi
+ \else 8\fi
+ \else 7\fi
+ \else 6\fi
+ \else 5\fi
+}
+\makeatother
+\DeclareRobustCommand\ETX{\textsmaller{ETX}}
+
+
+\usepackage{shortvrb}
+\MakeShortVerb{\|}
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+
+\newcommand{\TeXOmega}{Omega}
+\DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
+\DeclareRobustCommand\package[1]{\textsf{#1}}
+
+\providecommand*{\href}[2]{#2}
+\newcommand*{\ctanref}[2]{\href{ftp://ftp.ctan.org/#1}{#2}}
+
+\title{Writing \ETX\ format font encoding specifications}
+\author{Lars Hellstr\"om}
+\date{2003/07/09}
+
+\begin{document}
+\maketitle
+
+\begin{abstract}
+ This paper explains how one writes formal specifications of font
+ encodings for \LaTeX\ and suggests a ratification procedure for such
+ specifications.
+\end{abstract}
+
+
+\tableofcontents
+
+\vspace{0mm plus 35mm}
+\pagebreak[2]
+
+
+\section{Introduction}
+
+\paragraph*{Why should one specify font encodings?}
+Because without a specification, font
+designers\footnote{Maybe not a good term, since it is really about
+making fonts available to \TeX. Some of these people actually
+design glyphs, but most of them merely working with the metrics.}
+cannot tell whether their fonts will work in general, they can
+only test that they work in the cases they know about. Font design
+is subject to a surprising amount of obscure technicalities and it
+is very hard to consider (or even find documentation that
+mentions) them all.
+
+\paragraph*{Why should one make formal specifications?}
+Because the informal specifications that we have today
+are incomplete and hard to use. E.g.\ the \LaTeX\
+\meta{enc}\texttt{enc.def} files only say something about the
+characters that are accessed via commands, and even for those you
+really have to do reverse engineering to figure out what the
+encoding contains. To figure out what the remaining characters
+should do you have to compile what the various user manuals claim
+to work and then work backwards from that, but I don't think the
+general problem of which character tokens are allowed in input is
+thoroughly treated anywhere. On top of that, \LaTeX\ itself
+contributes some character tokens when the document is being
+typeset.\footnote{This is basically the ``a \texttt{T}$*$ encoding
+must contain the characters \ldots'' problem that was the reason
+that the \texttt{T2} encoding had to be split up.}
+
+On the other side of things there are the files which tell e.g.
+\textsf{fontinst} or \textsf{AFMtoTFM} what the target font
+encoding is. These are basically recipes which are known (?\@) to
+produce valid results, and they do usually provide more
+information about the encoding than the sources listed above, but
+they don't give much information about where the recipe can be
+modified.
+
+\paragraph*{Why use the \ETX\ format?}
+To begin with it is an established format; many of those
+who are making fonts already use it, even if for a slightly
+different purpose. Another major reason is that an \ETX\ file is both
+a \LaTeX\ document and a processable data file; this is the same kind
+of bilinguality that has made the \texttt{.dtx} format so useful.
+Finally the \ETX\ format makes it easy to create experimental font
+installations when a new encoding is being designed; \textsf{fontinst}
+can directly read the file, but the file can also be automatically
+converted to a PostScript encoding vector if that approach seems more
+convenient.
+
+On the other hand, there are some features (such as the prominent
+role of the glyph names) of the \ETX\ format that would
+probably had been done differently in a file format that was built
+from scratch, but then you would also lose several of the advantages
+listed above.
+
+
+\section{Points to keep in mind}
+
+\subsection{Characters, glyphs, and slots}
+
+One fundamental difference one must understand is that between
+characters and glyphs. A \emph{character} is a semantic entity---it
+carries some meaning, even if you usually have to combine several
+characters to make up even one word---whereas a \emph{glyph} simply
+is a piece of graphics. In printed text, glyphs are used to represent
+characters and the first step of reading is to determine which
+character(s) a given glyph is representing.
+
+In the output, \TeX\ neither deals with characters nor glyphs, really
+(although many of its messages speak of characters), but with
+\emph{slots}, which essentially are numbered positions in a font. To
+\TeX, a slot is simply something which can have certain metric
+properties (width, height, depth, etc.\@) but to the driver which
+actually does the printing the slot also specifies a glyph. The same
+slot in two different fonts can correspond to two quite different
+characters.
+
+For completeness it should also be mentioned that the \emph{input} of
+\TeX\ is a stream of semantic entities and thus \TeX\ is dealing with
+characters on that side, but the input is not the subject of this
+paper.
+
+
+\subsection{Ligatures}
+
+In typography, a \emph{ligature} is a glyph which has been formed by
+joining glyphs that represent two or more characters; this joining can
+involve quite a lot of deformation of the original shapes. Examples
+of ligatures are the `fi' ligature (from `f' and `i'), the `\AE'
+ligature (from `A' and `E'), and the `\textit{\&}' character (from `E'
+and `t'), the latter two of which has evolved to become characters of
+their own. For those ligatures (such as `fi') that have not evolved to
+characters, \TeX\ has a mechanism for forming the ligature out of the
+characters it is composed from, under the guidance of ligature\slash
+kerning programs found in the font.
+
+More technically, what happens is really that if the |\char| (or
+equivalent) for one slot is immediately followed by the |\char| (or
+equivalent) for another (or the same) slot and there is a ligaturing
+instruction in the \texttt{\small LIGKERN} table of the current font
+which applies to this slot pair then this ligaturing instruction is
+executed. This usually replaces the two slots in the pair with a
+single new slot specified by the ligaturing instruction (it could
+also keep one or both of the original slots, but that is less common).
+\TeX\ has no idea about whether these replacements change the meaning
+of anything, but \TeX\ assumes that it doesn't, and it is up to the
+font designer to ensure that this is the case.
+
+Apart from forming ligatures in text, the ligaturing mechanism of
+\TeX\ is traditionally also employed for another task which is much
+more problematic. Ligatures are also used to produce certain
+characters which are not part of visible ASCII---the most common are
+the endash (typed as |--|) and the emdash (typed as |---|). This is a
+problem because it violates \TeX's assumption that the meaning is
+unchanged; the classical problem with this appears in the \texttt{OT2}
+encoding, where the Unicode character \texttt{U+0446}
+(\textsc{cyrillic small letter tse}) could be typed as |ts|, whilst
+the |t| and |s| by themselves produced Unicode characters
+\texttt{U+0442} (\textsc{cyrillic small letter te}) and \texttt{U+0441}
+(\textsc{cyrillic small letter es}) respectively. \TeX's hyphenation
+mechanism can however decompose ligatures, so it sometimes happened
+that the \textsc{tse} was hyphenated as \textsc{te}-\textsc{es},
+which is quite different from what was intended. Since this is such
+an obvious disadvantage, the use of ligatures for forming non-English
+letters quickly disappeared after 8-bit input encodings became
+available. The practice still remains in use for punctuation, however,
+and the font designer must be aware of this. For many font encodings
+there is a set of ligatures which must be present and replace two or
+more characters by a single, different character. These ligatures are
+called \emph{mandatory ligatures} in this paper.
+
+The use of mandatory ligatures in new font encodings is strongly
+discouraged, for a number of reasons. The main problem is that they
+create unhealthy dependencies between input and output encoding,
+whereas these should ideally be totally independent. Using ligatures
+in this way complicates the internal representation of text, and it
+also makes it much harder to typeset text where those ligatures are not
+wanted (such as verbatim text). Furthermore it creates problems with
+kerning, since the ``ligature'' has not yet been formed when a kern
+to the left of it is inserted. Finally, a much better solution (when
+it is available) is to use an \TeXOmega\ translation process
+(see~\cite[Sec.~8--11]{Omega-doc}), since that \emph{is} independent
+of the font, different translations can be combined, and they can
+easily handle even ``abbreviations'' much more complicated than those
+ligatures can deal with.
+
+
+\subsection{Output stages}
+
+On its way out of \LaTeX\ towards the printed text, a character passes
+through a number of stages. The following five seem to cover what is
+relevant for the present discussion:
+\begin{enumerate}
+ \item \emph{\LaTeX\ Internal Character Representation} (LICR);
+ see~\cite{LaTeXCompanion}, Section~7.11 for a full description.
+ At this point the character is a character token (e.g.~|a|),
+ a text command (e.g.~|\ss|), or a combination (e.g.~|\H{o}|).
+ \item \emph{Horizontal material;} this is what the character is
+ en route from \TeX's mouth to its stomach. For most characters
+ this is equivalent to a single |\char| command (e.g.\ |a| is
+ equivalent to |\char|\,|97|), but some require more than one, some
+ are combined using the |\accent| and |\char| commands, some
+ involve rules and\slash or kerns, and some are built using boxes
+ that arbitrarily combine the above elements.
+ \item \emph{DVI commands;} this is the DVI file commands that
+ produce the printed representation of the character.
+ \item \emph{Printed text;} this is the graphical representation of
+ the character, e.g. as ink on paper or as a pattern on a computer
+ screen. Here the text consists of glyphs.
+ \item \emph{Interpreted text;} this is essentially printed text
+ modulo equivalence of interpretation, hence the text doesn't really
+ reach this stage until someone reads it. Here the text consists of
+ characters.
+\end{enumerate}
+
+In theory there is a universal mapping from LICR to interpreted text,
+but various technical restrictions make it impossible to simultaneously
+support the entire mapping. A \LaTeX\ encoding selects a restriction
+of this mapping to a limited set which will be ``well supported''
+(meaning kerning and such between characters in the set works), whereas
+elements outside this set at best can be supported through temporary
+encoding changes. The encoding also specifies a decomposition of the
+mapping into one part which maps LICR to horizontal material and one
+part which maps horizontal material to interpreted text. The first
+part is realized by the text command definitions usually found in the
+\meta{enc}\texttt{enc.def} file for the encoding. The second part is
+the font encoding, the specification of which is the topic of this
+paper. It is also worth noticing that an actual font is a mapping of
+horizontal material to printed text.
+
+An alternative decomposition of the mapping from LICR to interpreted
+text would be at the DVI command level, but even though this
+decomposition is realized in most \TeX\ implementations, it has very
+little relevance for the discussion of encodings. The main reason for
+this is that it depends not only on the encoding of a font, but
+also on its metrics. Furthermore it is worth noticing that in e.g.\
+pdf\TeX\ there need not be a DVI command level.
+
+
+\subsection{Hyphenation}
+
+There are strong connections between font encoding and hyphenation because
+\TeX's hyphenation mechanism operates on horizontal material; more
+precisely the hyphenation mechanism only works on pieces of horizontal
+material that are equivalent to sequences of |\char| commands. This
+implies that hyphenation patterns, as selected via the |\language|
+parameter, are not only for a specific language, they are also for a
+specific font encoding.
+
+The hyphenation mechanism uses the |\lccode| values to distinguish
+between three types of slots: lower case letters (|\lccode|\(\,n =
+n\)), upper case letters (|\lccode|\(\,n \notin \{0,n\}\)), and
+non-letters (|\lccode|\(\,n = 0\)); only the first two types can be
+part of a hyphenatable word and only lower case letters are needed
+in the hyphenation patters. This does however place severe
+restrictions on how letters can be placed in a text font because
+\TeX\ uses the same |\lccode| values for all text in a paragraph and
+therefore these values cannot be changed whenever the encoding changes.
+In \LaTeX\ the |\lccode| table is not allowed to change at all and
+consequently all text font encodings must work using the standard set
+of |\lccode| values.
+
+In \eTeX\ each set of hyphenation patterns has its own set of
+|\lccode| values for hyphenation, so the problem isn't as severe
+there. The hyphenation mechanism of \TeXOmega\ should become
+completely independent of the font encoding, but in the current
+implementation it is still operating on material encoded according to
+a font encoding.
+
+
+\subsection{Production and specification \ETX\ files}
+
+Finally, it is worth pointing out the difference between an \ETX\ file
+created for the specification of a font encoding and one created for
+being used in actually producing fonts with this encoding. They are
+usually not the same. Specification \ETX s certainly may be of direct
+use in the production of fonts---especially experimental fonts
+produced as part of the work on a new encoding---but they are usually
+not ideal for the purpose. In particular there is often a need to
+switch between alternative names for a glyph to accommodate what is
+actually in the fonts, but such trickeries are undesirable
+complications in a specification. On the other hand a production
+\ETX\ file has little need for verbose comments, whereas they are rather
+an advantage in a specification \ETX\ file.
+
+Therefore one shouldn't be surprised if there are two \ETX\ files for a
+specific encoding: one which is a specification version and one which
+is a production version. If both might need to be in the same
+directory then one should, as a rule of thumb, include a
+`\texttt{spec}' in the name of the specification version.
+
+
+\section{Font encoding specifications}
+
+\subsection{Basic principles}
+
+Most features of the font encoding are categorized as either
+\emph{mandatory} or \emph{ordinary}. The mandatory features are what
+macros may rely on, whereas the ordinary simply are something which
+fonts with this encoding normally provide. Font designers may choose
+to provide other features than the ordinary, but are recommended to
+provide the ordinary features to the extent that the available
+resources permit.
+
+Many internal references in the specification are in the form of
+\emph{glyph names} and the choice of these is a slightly tricky
+matter. From the point of formal specification, the choices can be
+completely arbitrary, but from the point of practical usefulness they
+most likely are not. One of the main advantages of the \ETX\ format
+for specifications is that such specifications can also be used to
+make experimental implementations, but this requires that the glyph
+names in the specification are the same as those used in the fonts
+from which the experimental implementation should be built. Yet
+another aspect is that the glyph names are best chosen to be the ones
+one can expect to find in actual fonts, as that will make things
+easier for other people that want to make non-experimental
+implementations later. For this last purpose, a good reference is
+Adobe's technical note on Unicode and glyph names~\cite{unicodesign}.
+For most common glyphs, \cite{unicodesign} ends up recommending that
+one should follow the Adobe glyph list~\cite{AGL}, which however has
+the peculiar trait of recommending names on the form
+\texttt{afii}\textit{ddddd} (rather than the Unicode-based alternative
+\texttt{uni}\textit{xxxx}) for most non-latin glyphs. This is somewhat
+put in perspective by~\cite{ATN5013}.
+
+
+\subsection{Slot assignments}
+
+The purpose of the slot assignments is to specify for each slot which
+character or characters it is mapped to. That one slot is mapped to
+many characters is an unfortunate, but not very uncommon, reality in
+many encodings, as limitations in font size have often encouraged
+identifications of two characters which are almost the same. It should
+be avoided in new encodings.
+
+Slot assignmets are done using the |\nextslot| command and a
+|\setslot| \dots\ |\endsetslot| construction as follows:
+\begin{quote}
+ |\nextslot|\marg{slot number}\\*
+ |\setslot|\marg{glyph name}\\*
+ \mbox{\quad}\meta{slot commands}\\*
+ |\endsetslot|
+\end{quote}
+A typical example of this is
+\begin{quote}\begin{verbatim}
+\nextslot{65}
+\setslot{A}
+ \Unicode{0041}{LATIN CAPITAL LETTER A}
+\endsetslot
+\end{verbatim}\end{quote}
+which gets typeset as
+\begin{quote}
+ \textbf{Slot 65 `\texttt{A}'}\\*
+ Unicode character \texttt{U+0041}, \textsc{latin capital letter a}.
+\end{quote}
+
+The |\nextslot| command does not typeset anything; it simply stores
+the slot number in a counter, for later use by |\setslot|. The
+|\endsetslot| command increments this counter by one. Hence the
+|\nextslot| command is unnecessary between |\setslot|s for consecutive
+slots. Besides |\nextslot|, there is also a command |\skipslots| which
+increments the slot number counter by a specified amount. The
+argument of both |\nextslot| and |\skipslots| can be arbitrary
+\package{fontinst} integer expressions (see~\cite{fontinst-man}). All
+\TeX\ \meta{number}s that survive full expansion are valid
+\package{fontinst} integer expressions, but for example |`\~| isn't,
+as |\~| is a macro which will break before the expression is typeset.
+These cases can however be fixed by preceding the \TeX\ \meta{number}
+by |\number|, as |\number`\~| survives full expansion by expanding to
+|126|.
+
+The main duty of the \meta{slot commands} is to specify the target
+character (or characters) for this slot. The simplest way of doing
+this is to use the |\Unicode| command, which has the syntax
+\begin{quote}
+ |\Unicode|\marg{code point}\marg{name}
+\end{quote}
+The \meta{code point} is the number of the character (in hexadecimal
+notation, usually a four-digit number) and the \meta{name} is the name.
+Case is insignificant in these arguments. If a character does not
+have a Unicode code point then the specification should simply be a
+description in text which identifies the character. Such descriptions
+are written using the |\comment| command
+\begin{quote}
+ |\comment|\marg{text}
+\end{quote}
+It is worth noticing that the \meta{text} is technically only an
+argument of |\comment| when the program processing the \ETX\ file is
+ignoring |\comment| commands. This means |\verb| and similar
+catcode-changing commands \emph{can} be used in the \meta{text}. The
+|\par| command is on the other hand not allowed in the \meta{text}.
+
+The |\comment| command should also be used for any further piece of
+explanation of or commentary to the character used for the slot, if the
+exposition seems to need it. There can be any number of |\comment|
+commands in the \meta{slot commands}.
+
+
+\subsection{Ligatures}
+
+There are three classes of ligatures in the font encoding
+specifications: mandatory, ordinary, and odd. Mandatory ligatures must
+be present in any font which complies with the encoding, whereas
+ordinary and odd ligatures need not be. No clear distinction can be
+made between ordinary and odd ligatures, but a non-mandatory ligature
+should be categorized as ordinary if it makes sense for the majority
+of users, and as odd otherwise. Hence the `fi' ligature is
+categorized as ordinary in the \texttt{T1} encoding, whereas the `ij'
+ligature is odd.
+
+In the \ETX\ format, a ligature is specified using one of the slot
+commands
+\begin{quote}
+ |\Ligature|\marg{ligtype}\marg{right}\marg{new}\\
+ |\ligature|\marg{ligtype}\marg{right}\marg{new}\\
+ |\oddligature|\marg{note}\marg{ligtype}\marg{right}\marg{new}
+\end{quote}
+|\Ligature| is used for mandatory ligatures, |\ligature| is used for
+ordinary ligatures, and |\oddligature| is used for odd ligatures. The
+\meta{right} and \meta{new} arguments are names of the glyphs being
+assigned to the slots involved in this ligature. The \meta{right}
+specifies the right part in the slot pair being affected by the
+ligature, whereas the left part is the one of the |\setslot| \dots\
+|\endsetslot| construction in which the ligaturing command is placed.
+The \meta{new} specifies a new slot which will be inserted by the
+ligaturing instruction. The \meta{ligtype} is the actual ligaturing
+instruction that will be used; it must be |LIG|, |/LIG|, |/LIG>|,
+|LIG/|, |LIG/>|, |/LIG/|, |/LIG/>|, or |/LIG/>>|. The slashes specify
+retention of the left or right original character; the |>| signs
+specify passing over that many slots in the result without further
+ligature processing. \meta{note}, finally, is a piece of text which
+explains when the odd ligature may be appropriate. It is typeset as a
+footnote.
+
+As an example of ligatures we find the following in the specification
+of the \texttt{T1} encoding:
+\begin{quote}
+ |\nextslot{33}|\\
+ |\setslot{exclam}|\\
+ | \Unicode{0021}{EXCLAMATION MARK}|\\
+ | \Ligature{LIG}{quoteleft}{exclamdown}|\\
+ |\endsetslot|
+\end{quote}
+It is typeset as
+\begin{quote}
+ \textbf{Slot 33 `\texttt{exclam}'}\\*
+ Unicode character \texttt{U+0021}, \textsc{exclamation mark}.\\*
+ \textbf{Mandatory ligature}
+ \texttt{exclam}${}*{}$\texttt{quoteleft}${}\rightarrow
+ {}$\texttt{exclamdown}
+\end{quote}
+With other \meta{ligtype}s there may be more names listed on the
+right hand side and possibly a `$\lfloor$' symbol showing the
+position at which ligature processing will start afterwards.
+
+
+\subsection{Math font specialities}
+
+There are numerous technicalities which are special to math fonts, but
+only a few of them are exhibited in \ETX\ files.\footnote{For an
+overview of the subject, see for example Vieth~\cite{Vieth2001}.} Most
+of these have to do with the \TeX\ mechanisms that find sufficiently
+large characters for commands like |\left|, |\sqrt|, and |\widetilde|.
+
+The first mechanism for this is that a character in a font can sort of
+say ``If I'm too small, then then try character \dots\ instead''. This
+is expressed in an \ETX\ file using the |\nextlarger| command, which
+has the syntax
+\begin{quote}
+ |\nextlarger|\marg{glyph name}
+\end{quote}
+The second mechanism constructs a sufficiently large character from
+smaller pieces; this is known as a `varchar' or `extensible character'.
+This is expressed in an \ETX\ file using an ``extensible recipe'', the
+syntax for which is
+\begin{quote}
+ |\varchar| \meta{varchar commands} |\endvarchar|
+\end{quote}
+where each \meta{varchar command} is one of
+\begin{quote}
+ |\varrep|\marg{glyph name}\\
+ |\vartop|\marg{glyph name}\\
+ |\varmid|\marg{glyph name}\\
+ |\varbot|\marg{glyph name}
+\end{quote}
+There can be at most one of each and their order is irrelevant. The
+most important is the |\varrep| command, as that is the part which is
+repeated until the character is sufficiently large. The |\vartop|,
+|\varmid|, and |\varbot| commands are used to specify some other part
+which should be put at the top, middle, and bottom of the extensible
+character respectively. Not all extensible recipes use all of these,
+however.
+
+As an example, here is how a very large left brace is constructed:
+\begin{center}
+ \begin{tabular}{>{%
+ \fontencoding{OMX}\fontfamily{cmex}\selectfont
+ $\vcenter\bgroup\hbox\bgroup
+ }l<{\egroup\egroup$} l}
+ \char"38& For |\vartop{bracelefttp}|\\
+ \char"3E& For |\varrep{braceex}|\\
+ \char"3C& For |\varmid{braceleftmid}|\\
+ \char"3E& Again for |\varrep{braceex}|\\
+ \char"3A& For |\varbot{braceleftbt}|
+ \end{tabular}
+\end{center}
+
+Both |\nextlarger| and |\varchar| commands are like |\ligature| in
+that they describe ordinary features for the encoding; they appear in
+a specification \ETX\ file mainly to explain the purpose of some
+ordinary character. There is no such thing as a mandatory |\nextlarger|
+or |\varchar|, but varchars are occationally used to a similar effect.
+In these cases, the character generated by the extensible recipe is
+something quite different from what a |\char| for that slot would
+produce. Thus for the slot to produce the expected result it must be
+referenced using a |\delimiter| or |\radical| primitive, since those
+are the only ones which make use of the extensible recipe. The effect
+is that the slot has a \emph{semimandatory} assignment; the result of
+|\char| is unspecified (as for a slot with an ordinary assignment), but
+the result for a large delimiter or radical is not (as for a slot with
+a mandatory assignment).
+
+Thus some math fonts have an extra section ``Semimandatory characters''
+between the mandatory and ordinary character sections. In that section
+for the \texttt{OMX} encoding we find for example
+\begin{quote}\begin{verbatim}
+\nextslot{60}
+\setslot{braceleftmid}
+ \Unicode{2016}{DOUBLE VERTICAL LINE}
+ \comment{This is the large size of the |\Arrowvert|
+ delimiter, a glyphic variation on |\Vert|.
+ The \texttt{braceleftmid} glyph ordinarily
+ placed in this slot must not be too tall,
+ or else the extensible recipe actually producing
+ the character might sometimes not be used.}
+ \varchar
+ \varrep{arrowvertex}
+ \endvarchar
+\endsetslot
+\end{verbatim}\end{quote}
+which is typeset as
+\begin{quote}
+ \textbf{Slot 60 `\texttt{braceleftmid}'}\\*
+ Unicode character \texttt{U+2016}, \textsc{double vertical line}.\\
+ This is the large size of the |\Arrowvert|
+ delimiter, a glyphic variation on |\Vert|.
+ The \texttt{braceleftmid} glyph ordinarily
+ placed in this slot must not be too tall,
+ or else the extensible recipe actually producing
+ the character might sometimes not be used.\\
+ \textbf{Extensible glyph:}\\*
+ \textbf{Repeated} \texttt{arrowvertex}
+\end{quote}
+
+
+
+
+\subsection{Fontdimens}
+
+Each \TeX\ font contains a list of fontdimens, numbered from $1$ and
+up, which are accessible via the |\fontdimen| \TeX\ primitive. Quite a
+few are also used implicitly by \TeX\ and therefore cannot be left out
+even if they are totally irrelevant, but as one can always include
+some extra fontdimens in a font---the only bounds on how many
+fontdimens there may be are the general bound on the size of a TFM
+file and the amount of font memory \TeX\ has available---this is
+usually not a problem.
+
+The reason fontdimens are part of font encoding specifications is
+that the meaning of e.g.\ |\fontdimen|\,|8| varies between different
+fonts depending on their encoding; thus the encoding specification
+must define the quantity stored in each |\fontdimen| parameter. This
+is done using the |\setfontdimen| command, which has the syntax
+\begin{quote}
+ |\setfontdimen|\marg{number}\marg{name}
+\end{quote}
+The \meta{number} is the fontdimen number (as a sequence of decimal
+digits where the first digit isn't zero) and the \meta{name} is a
+symbolic name for the quantity.
+
+The standard list of symbolic names for fontdimen quantities appears
+below; the listed quantities should always be described using the names
+in this list. Encoding specifications that employ other quantities as
+fontdimens should include definitions of these quantities. Those
+quantities that are defined as ``Formula parameter \dots'' have to
+do with how mathematical formulae are rendered and are usually much
+too complicated to explain here. For exact definitions of these
+parameters, the reader is referred to Appendix~G of \textit{The
+\TeX book}~\cite{TeXbook}.
+\begin{list}{}{%
+ \setlength\labelwidth{0pt}%
+ \setlength\itemindent{-\leftmargin}%
+ \def\makelabel#1{\hspace{\labelsep}\normalfont\itshape #1}%
+ \setlength\itemsep{0.5\itemsep}%
+ \setlength\parsep{0.5\parsep}%
+}
+\item[acccapheight]
+ The height of accented full capitals.
+\item[ascender]
+ The height of lower case letters with ascenders.
+\item[axisheight] Formula parameter $\sigma_{22}$.
+\item[baselineskip]
+ The font designer's recommendation for natural length of the
+ \TeX\ parameter |\baselineskip|.
+\item[bigopspacing1] Formula parameter $\xi_{9}$.
+\item[bigopspacing2] Formula parameter $\xi_{10}$.
+\item[bigopspacing3] Formula parameter $\xi_{11}$.
+\item[bigopspacing4] Formula parameter $\xi_{12}$.
+\item[bigopspacing5] Formula parameter $\xi_{13}$.
+\item[capheight]
+ The height of full capitals.
+\item[defaultrulethickness] Formula parameter $\xi_{8}$.
+\item[delim1] Formula parameter $\sigma_{20}$.
+\item[delim2] Formula parameter $\sigma_{21}$.
+\item[denom1] Formula parameter $\sigma_{11}$.
+\item[denom2] Formula parameter $\sigma_{12}$.
+\item[descender]
+ The depth of lower case letters with descenders.
+\item[digitwidth]
+ The median width of the digits in the font.
+\item[extraspace]
+ The natural width of extra interword glue at the end of a sentence.
+ \TeX\ implicitly uses this parameter if |\spacefactor| is $2000$ or
+ more and |\xspaceskip| is zero.
+\item[interword]
+ The natural width of interword glue (spaces). \TeX\ implicitly uses
+ this parameter unless |\spaceskip| is nonzero.
+\item[italicslant]
+ The slant per point of the font. Unlike all other fontdimens, it is
+ not proportional to the font size.
+\item[maxdepth]
+ The maximal depth over all slots in the font.
+\item[maxheight]
+ The maximal height over all slots in the font.
+\item[num1] Formula parameter $\sigma_{8}$.
+\item[num2] Formula parameter $\sigma_{9}$.
+\item[num3] Formula parameter $\sigma_{10}$.
+\item[quad]
+ The quad width of the font, normally approximately equal to the
+ font size and\slash or the width of an `M'. Also implicitly available
+ as the length unit |em| and used for determining the size of the
+ length unit |mu|.
+\item[shrinkword]
+ The (finite) shrink component of interword glue (spaces). \TeX\
+ implicitly uses this parameter unless |\spaceskip| is nonzero.
+\item[stretchword]
+ The (finite) stretch component of interword glue (spaces). \TeX\
+ implicitly uses this parameter unless |\spaceskip| is nonzero.
+\item[sub1] Formula parameter $\sigma_{16}$.
+\item[sub2] Formula parameter $\sigma_{17}$.
+\item[subdrop] Formula parameter $\sigma_{19}$.
+\item[sup1] Formula parameter $\sigma_{13}$.
+\item[sup2] Formula parameter $\sigma_{14}$.
+\item[sup3] Formula parameter $\sigma_{15}$.
+\item[supdrop] Formula parameter $\sigma_{18}$.
+\item[verticalstem]
+ The dominant width of vertical stems. This quantity is meant to be used
+ as a measure of how ``dark'' the font is.
+\item[xheight]
+ The x-height (height of lower case letters without ascenders). Also
+ implicitly available as the length unit |ex|.
+\end{list}
+
+
+\subsection{The codingscheme}
+
+The final encoding-dependent piece of information in a \TeX\ font is
+the codingscheme, which is essentially a string declaring what
+encoding the font has. This information is currently only used by
+programs that convert the information in a \TeX\ font to some other
+format and these use it to identify the glyphs in the font. Therefore
+this string should be chosen so that the contents of the slots in the
+font can be positively identified. Observe that the encoding
+specification by itself does not provide enough information for this,
+since there are usually a couple of slots that do not contain
+mandatory characters. On the other hand, it is not a problem in this
+context if the font leaves some of the slots (even mandatory ones)
+empty as that is anyway easily detected. The only problem is with
+fonts where the slots are assigned to other characters than the ones
+specified in the encoding.
+
+For that reason, it is appropriate to assign two codingscheme strings
+to each encoding. The main codingscheme is for fonts were all slots
+(mandatory and ordinary alike) have been assigned according to the
+specification or have been left empty. The variant codingscheme is for
+fonts where some ordinary slots have been assigned other characters
+than the ones listed in the specification, but where the mandatory
+slots are still assigned according to the specification or are left
+empty. The font encoding specification should give the main
+codingscheme name, whereas the variant codingscheme name could be
+formed by adding \verb*| VARIANT| to the main codingscheme name.
+
+Technically the codingscheme is specified by setting the
+\texttt{codingscheme} string variable. This has the syntax
+\begin{quote}
+ |\setstr{codingscheme}|\marg{codingscheme name}
+\end{quote}
+e.g.
+\begin{quote}
+ |\setstr{codingscheme}{EXTENDED TEX FONT ENCODING - LATIN}|
+\end{quote}
+which is typeset as
+\begin{quote}
+ \textbf{Default} s(\texttt{codingscheme}) =
+ \verb*|EXTENDED TEX FONT ENCODING - LATIN|
+\end{quote}
+A codingscheme name may be at most 40 characters long and may not
+contain parentheses. If the entire \verb*| VARIANT| cannot be suffixed
+to a main name because the result becomes to long (as in the above
+example) then use the first 40 characters of the result.
+
+
+\subsection{Overall document structure}
+\label{Ssec:Structure}
+
+The overall structure of a font encoding specification should be
+roughly the following
+\begin{quote}
+ |\relax|\\
+ |\documentclass[twocolumn]{article}|\\
+ |\usepackage[specification]{fontdoc}|\\
+ \meta{preamble}\\
+ |\begin{document}|\\
+ \meta{title}\\
+ \meta{manifest}\\
+ |\encoding|\\
+ \meta{body}\\
+ |\endencoding|\\
+ \meta{discussion}\\
+ \meta{change history}\\
+ \meta{bibliography}\\
+ |\end{document}|
+\end{quote}
+The commands described in the preceding subsections must all go in
+the \meta{body} part of the document, as that is the only part of the
+file which actually gets processed as a data file. The part before
+|\encoding| is skipped and the part after |\endencoding| is never
+even input, so whatever appears there is only part of the \LaTeX\
+document. For the purposes of processing as a data file, the
+important markers in the file are the |\relax|, the |\endcoding|, and
+the |\endencoding| commands.
+
+The \meta{title} is the usual |\maketitle| (and the like) stuff. The
+person or persons who appear as author(s) are elsewhere in this paper
+described as the \emph{encoding proposers}. The \meta{title} should
+also give the date when the specification was last changed.
+
+The \meta{manifest} is an important, although usually pretty short,
+part of the specification. It is a piece of text which explains the
+purpose of the encoding (in particular what it can be used for) and
+the basic ideas (if any) which have been used in its construction. It
+is often best marked up as an abstract.
+
+The \meta{discussion} is the place for any longer comments on the
+encoding, such as analyses of different implementations, comparisons
+with other encodings, etc. This is also the place to explain any more
+general structures in the encoding, such as the arrow kit in the
+proposed \texttt{MS2} encoding~\cite{ClasenVieth}. In cases where the
+specification is mainly a formulation of what is already an
+established standard the \meta{discussion} is often rather short as
+the relevant discussion has already been published elsewhere, but
+it is anyway a service to the reader to include this information.
+References to the original documents should always be given.
+
+It might be convenient to include an FAQ section at the end of the
+discussion. This is particularly suited for explaining things where
+one has to look for a while and consult the references to find the
+relevant information.
+
+The \meta{change history} documents how the specification has changed
+over time. It is preferably detailed, as each detail in an encoding
+is important, but one should not be surprised if it is anyway rather
+short due to that there haven't been that many changes.
+
+The \meta{bibliography} is an important part of the specification. It
+should at the very least include all the sources which have been used
+in compiling the encoding specification, regardless of whether they
+are printed, available on the net, merely ``personal communication'',
+or something else. It is also a service to the reader to include in
+the bibliography some more general references for related matters.
+
+The \meta{preamble} is just a normal \LaTeX\ preamble and there are no
+restrictions on defining new commands in it, although use of such
+commands in the \meta{body} part is subject to the same restrictions
+as use of any general \LaTeX\ command. The preamble should however
+\emph{not} load any packages not part of the required suite of
+\LaTeX\ packages, as that may prevent users who do not have these
+packages from typesetting the specification. Likewise, the
+specification should \emph{not} require that some special font is
+available. Glyph examples for characters are usually better
+referenced via Unicode character charts than via special fonts.
+
+An exception to this rule about packages is that the specification
+must load the \package{fontdoc} package, as shown in the outline
+above, since that defines the |\setslot| etc.\ commands that should
+appear in the \meta{body}. This should not be a problem, as the
+\package{fontdoc} package can preferably be kept in the same directory
+as the collection of encoding specifications (see below). The
+\texttt{specification} option should be passed to the package to let it know
+that the file being processed is an encoding specification---otherwise
+|\Ligature| and |\ligature| will get the same formatting, for one. It
+is not necessary to use the \package{article} document class, and
+neither must it be passed the \texttt{twocolumn} option, but it is
+customary to do so. In principle any other document class within
+required \LaTeX\ will do just as well.
+
+If you absolutely think that using some non-required package
+significantly improves the specification, then try writing the code so
+that is loads the package only if it is available and provide some
+kind of fallback definition for sites where it is not. E.g.\ the
+\package{url} package could be loaded as
+\begin{verbatim}
+\IfFileExists{url.sty}{\usepackage{url}}{}
+\providecommand\url{\verb}
+\end{verbatim}
+The |\url| command defined by this is not equivalent to the command
+defined by the \package{url} package, but it can serve fairly well
+(with a couple of extra overfull lines as only ill effect) if its
+use is somewhat restricted.
+
+Finally, a technical restriction on the \meta{preamble}, \meta{title},
+and \meta{manifest} is that they must not contain any mismatched
+|\if|s (of any type) or |\fi|s, as \TeX\ conditionals will be used for
+skipping those parts of the file when it is processed as a data file.
+If the definition of some macro includes mismatched |\if|s or |\fi|s
+(this will probably occur only rarely) then include some extra code
+so that they do match.
+
+
+% All technical parts of the encoding specification (slot assignments,
+% fontdimens, etc.\@) have to be in the \meta{encoding commands} part.
+% The other parts are suitably used for longer commentry, such as the
+% mainfest (see below), revision history, and bibliography.
+%
+% When the file is being typeset as a \LaTeX\ document there is nothing
+% special going on. The |\encoding| and |\endencoding| commands may set
+% some internal variables, but otherwise they do very little. When the
+% file is being read by \package{fontinst}, things are quite different.
+% Everything between the initial |\relax| and |\encoding| is skipped,
+% and the file is not read further than to the |\endencoding|. Hence
+% the \meta{preamble}, \meta{\LaTeX\ text 1}, and \meta{\LaTeX\ text 2}
+% can contain pretty much anything (with a few exceptions) which is
+% legal in a \LaTeX\ document.
+
+
+\subsection{Encoding specification body syntax}
+
+The \meta{body} part of an encoding specification must comply to a
+much stricter syntax than the rest of the file.
+The full syntax of the \ETX\ format can\footnote{Well, it should be,
+only the manual hasn't been updated for a while now, so some things
+are missing from it. They're all documented in the \package{fontinst}
+sources~\cite{fontinst-pre}, though.} be found in the \package{fontinst}
+manual~\cite{fontinst-man}, but font encoding specifications only need
+a subset of that. The \meta{body} is a sequence of
+\meta{encoding command}s, each of which should be one of the
+following:
+\begin{quote}
+ |\setslot|\marg{glyph name} \meta{slots commands} |\endsetslot|\\
+ |\nextslot|\marg{number}\\
+ |\skipslots|\marg{number}\\
+ |\setfontdimen|\marg{number}\marg{name}\\
+ |\setstr{codingscheme}|\marg{codingscheme name}\\
+ |\needsfontinstversion|\marg{version number}
+\end{quote}
+The |\needsfontinstversion| command is usually placed immediately
+after the |\encoding| command. The \meta{version number} must be at
+least |1.918| for many of the features described in this file to be
+available.
+
+The \meta{slot commands} are likewise a sequence of \meta{slot
+command}s, each of which should be one of the following:
+\begin{quote}
+ |\Unicode|\marg{code point}\marg{name}\\
+ |\comment|\marg{text}\\
+ |\Ligature|\marg{ligtype}\marg{right}\marg{new}\\
+ |\ligature|\marg{ligtype}\marg{right}\marg{new}\\
+ |\oddligature|\marg{note}\marg{ligtype}\marg{right}\marg{new}\\
+ |\nextlarger|\marg{glyph name}\\
+ |\varchar| \meta{varchar commands} |\endvarchar|
+\end{quote}
+where \meta{varchar commands} similarly is a sequence of \meta{varchar
+command}s, each of which should be one of the following:
+\begin{quote}
+ |\varrep|\marg{glyph name}\\
+ |\vartop|\marg{glyph name}\\
+ |\varmid|\marg{glyph name}\\
+ |\varbot|\marg{glyph name}
+\end{quote}
+Finally, one can include any number of \meta{comment command}s between
+any two encoding, slot, or varchar commands. The comment commands are
+\begin{quote}
+ |\begincomment| \meta{\LaTeX\ text} |\endcomment|\\
+ |\label|\marg{reference label}
+\end{quote}
+The \meta{\LaTeX\ text} can be pretty much any \LaTeX\ code that can
+appear in conditional text. (|\begincomment| is either |\iffalse| or
+|\iftrue| depending on whether the encoding specification is
+processed as a data file or typeset as a \LaTeX\ document respectively.
+|\endcomment| is always |\fi|.) The |\label| command is just
+the normal \LaTeX\ |\label| command; when it is used in a \meta{slot
+commands} it references that particular slot (by number and glyph
+name).
+
+
+\subsection{Additional \package{fontdoc} features}
+
+There is an ``in comment paragraph'' form |\textunicode| of the
+|\Unicode| command. Both commands have the same syntax, but
+|\textunicode| is only allowed in ``comment'' contexts. A typical use
+of |\textunicode| is
+\begin{quote}
+ |\comment{An |\dots\\
+ \quad\dots| this is \textunicode{2012}{FIGURE DASH}; in |\dots\\
+ |}|
+\end{quote}
+which is typeset as
+\begin{quote}
+ An \dots\ this is \texttt{U+2012} (\textsc{figure dash}); in \dots
+\end{quote}
+
+The \package{fontdoc} package inputs a configuration file
+\texttt{fontdoc.cfg} if that exists. This can be used to pass
+additional options to the package. The only currently available
+options that this could be of interest for are the \texttt{hypertex}
+and \texttt{pdftex} options, which hyperlinks each \texttt{U+}\dots\
+generated by |\Unicode| or |\textunicode| (using Hyper\TeX\ or
+pdf\TeX\ conventions\footnote{One could just as well do the same
+thing using some other convention if a suitable definition of
+\cs{FD@codepoint} is included in \texttt{fontdoc.cfg}. See the
+\package{fontinst} sources~\cite{fontinst-pre} for more details.}
+respectively) to a corresponding glyph image on the Unicode consortium
+website. To use this feature one should put the line
+\begin{quote}
+ |\ExecuteOptions{hypertex}|
+\end{quote}
+or
+\begin{quote}
+ |\ExecuteOptions{pdftex}|
+\end{quote}
+in the \texttt{fontdoc.cfg} file. \emph{Please} do not include this
+option in the |\usepackage|\nolinebreak[1]|{fontdoc}| of an encoding
+specification file as that can be a severe annoyance for people whose
+\TeX\ program or DVI viewers do not support the necessary extensions.
+% Hyper\TeX\ |\special|s.
+
+
+\section{Font encoding ratification}
+
+This section describes a suggested ratification process for font
+encoding specifications. As there are fewer technical matters that
+impose restrictions on what it may look like, it is probably more
+subjective than the other parts of this paper.
+
+\medskip
+
+A specification in the process of being ratified can be in one of
+three different stages: \emph{draft}, \emph{beta}, or \emph{final}.
+Initially the specification is in the draft stage, during which it
+will be scrutinized and can be subject to major changes. A
+specification which is in the beta stage has got a formal approval
+but the encoding in question may still be subject to some minor
+changes if weighty arguments present themselves. Once the
+specification has reached the final stage, the encoding may not
+change at all.
+
+
+\subsection{Getting to the draft stage}
+
+The process of taking an encoding to the draft stage can be
+summarized in the following steps. Being in the draft stage doesn't
+really say anything about whether the encoding is in any way correct
+or useful, except in that some people (the encoding proposers)
+believe it is and are willing to spend some time on ratifying it.
+
+\paragraph{Write an encoding specification} The first step is to
+write a specification for the font encoding in question. This
+document must not only technically describe the encoding but also
+explain what the encoding is for and why it was created. See
+Subsection~\ref{Ssec:Structure} for details on how the document is
+preferably organised.
+
+\paragraph{Request an encoding name} The second step is to write to
+the \LaTeX3 project and request a \LaTeX\ encoding name for the
+encoding. This mail should be in the form of a \LaTeX\ bug report, it
+must be sent to
+\begin{quote}
+ \href{mailto:latex-bugs@latex-project.org}%
+ {\texttt{latex-bugs@latex-project.org}},
+\end{quote}
+and it must include the encoding specification file. Suggestions for
+an encoding name are appreciated, but not necessarily accepted.
+The purpose of this mail is \emph{not} to get an approval of the
+encoding, but only to have a reasonable name assigned to it.
+
+\paragraph{Upload the specification to CTAN} The third step is make
+the encoding specification publicly available by uploading it to
+CTAN. Encoding specifications are collected in the
+\begin{quote}
+ \ctanref{info/encodings}{\texttt{info/encodings}}
+\end{quote}
+directory (which should also contain the most recent version of this
+paper). The name of the uploaded file should be
+\meta{encoding name}\texttt{draft.etx}. The reason for this naming is
+that it must be clear that the specification has not yet been ratified.
+
+\paragraph{Announce the encoding} When the upload has been confirmed,
+it is time to announce the encoding by posting a message about it to
+the relevant forums. Most important is the \texttt{tex-fonts} mailing
+list, since that is where new encodings should be debated. Messages
+should also be posted to the \texttt{comp.text.tex} newsgroup and any
+forums related to the intended use of the encoding: an encoding for
+Sanskrit should be announced on Indian \TeX\ users forums, an
+encoding for printing chess positions should be announced on some
+chess-with-\TeX\ user forum, etc.; in the extent that such forums exist.
+
+The full address of the \texttt{tex-fonts} mailing list is
+\begin{quote}
+ \texttt{tex-fonts@math.utah.edu}
+\end{quote}
+This list rejects postings from non-members, so you need to subscribe
+to it before you can post your announcement. This is done by sending
+a `subscribe me' mail to
+\begin{quote}
+ \href{mailto:tex-fonts-request@math.utah.edu}
+ {\texttt{tex-fonts-request@math.utah.edu}}
+\end{quote}
+The list archives can be found at
+\begin{quote}
+ \href{http://www.math.utah.edu/mailman/listinfo/tex-fonts}
+ {\textsc{http:}/\slash \texttt{www.math.utah.edu}\slash
+ \texttt{mailman}\slash \texttt{listinfo}\slash
+ \texttt{tex-fonts}}
+\end{quote}
+A tip is to read through the messages from a couple of months
+before you write up your announcement, as that should help you get
+acquainted with the normal style on the list. Please do not send
+messages encoded in markup languages (notably, \textsmaller{HTML},
+\textsmaller{XML}, and word processor formats) to the list.
+
+\paragraph{Experimental encodings} There is a point in going through
+the above procedure even for experimental encodings, i.e., encodings
+whose names start with an \texttt{E}. Of course there is no idea in
+ratifying a specification of an experimental encoding, as it is very
+likely to frequently change, but having a proper name assigned to the
+encoding and uploading its specification to CTAN makes it much simpler
+for other people to learn about and make references to the encoding.
+
+
+\subsection{From draft to beta stage}
+
+The main difference between a draft and beta stage specification
+respectively is that beta stage specifications have been scrutinized
+by other people and found to be free of errors. The practical
+implementation of this is that a debate is held (in the normal
+anarchical manner of mailing list debates) on the \texttt{tex-fonts}
+mailing list. In particular the following aspects of the
+specification should be checked:
+\begin{enumerate}
+ \item \emph{Is the encoding technically correct?}
+ There are many factors which affect what \TeX\ does and it is
+ easy to overlook some. (The \cs{lccode}s seem to be particularly
+ troublesome, in this respect.) Sometimes fonts simply cannot work
+ as an encoding specifies they should and it is important that
+ such defects in the encoding are discovered on an early stage.
+ \item \emph{Are there any errors in the specification?}
+ A font encoding specification is largely a table and typos are
+ easy to make. Proof-reading may be boring, but it is very, very
+ important.
+ \item \emph{Is the specification sufficiently precise?}
+ Are there any omissions, ambiguities, inaccuracies, or completely
+ irrelevant material in the specification? There shouldn't be.
+\end{enumerate}
+During the debate, the encoding proposers should hear what other
+people have to say about the encoding draft, revise it accordingly
+when some flaw is pointed out, and upload the revised version. This
+cycle may well have to be repeated several times before everyone's
+content. It is worth pointing out that in practice the debate should
+turn out to be more of a collective authoring of the specification
+than a defense of its validity. There is no point in going into it
+expecting the worst.
+
+Unfortunately, it might happen that there never is a complete agreement
+on an encoding specification---depending on what side on takes, either
+the encoding proposers refuse to correct obvious flaws in it, or someone
+on the list insists that there is a flaw although there is obviously
+not---but hopefully that will never happen. If it anyway does happen
+then the person objecting should send a mail whose subject contains the
+phrase "formal protest against XXX encoding" (with XXX replaced by
+whatever the encoding is called) to the list. Then it will be up to
+the powers that be to decide on the fate of the encoding (see below).
+
+\paragraph{Summarize the debate} When the debate on the encoding is
+over---e.g.\ a month after anyone last posted anything new on the
+subject---then the encoding proposers should summarize the debate on
+the encoding specification draft and post this summary as a follow-up
+on the original mail to \texttt{latex-bugs}. This summary should list
+the changes that have been made to the encoding, what suggestions there
+were for changes which have not been included, and whether there were
+any formal protests against the encoding. The summary should also explain
+what the proposers want to have be done with the encoding. In the
+usual case this is having it advanced to beta stage, but the proposers
+might alternatively at this point have reached the conclusion that the
+encoding wasn't such a good idea to start with and therefore withdraw
+it, possibly to come again later with a different proposal.
+
+In response to this summary, the \LaTeX-project people may do one of
+three things:
+\begin{itemize}
+ \item
+ If the proposers wants the encoding specification advanced and
+ there are no formal protests against this, then the encoding
+ should be advanced to the beta stage. The \LaTeX-project
+ people do this by adding the encoding to the list of approved
+ (beta or final stage) encodings that they [presumably] maintain.
+ \item
+ If the proposers want to withdraw the encoding specification
+ then the name assigned to it should once again be made available
+ for use for other encodings.
+ \item
+ If the proposers want the encoding specification advanced but
+ there is some formal protest against this, then the entire matter
+ should be handed over to some suitable authority, as a suggestion
+ some technical TUG committee, for resolution.
+\end{itemize}
+
+
+\paragraph{Update the specification on CTAN} When the specification
+has reached the beta stage, its file on CTAN should be updated to say
+so. In particular the file name should be changed from \meta{encoding
+name}\texttt{draft.etx} to \meta{encoding name}\texttt{spec.etx}.
+
+
+\paragraph{Modifying beta stage encodings} If a beta stage encoding is
+modified then the revised specification should go through the above
+procedure of ratification again before it can replace the previous
+\meta{encoding name}\texttt{spec.etx} file on CTAN. The revised
+version should thus initially be uploaded as \meta{encoding
+name}\texttt{draft.etx}, reannounced, and redebated. It can however
+be expected that such debates will not be as extensive as the
+original debates.
+
+
+\subsection{From beta stage to final stage}
+
+The requirements for going from beta stage to final stage are more
+about showing that the encoding has reached a certain maturity than
+about demonstrating any technical merits of it. The main difference in
+usefulness between a beta stage encoding and a final stage encoding is
+that the latter can be considered safe for archival purposes, whereas
+one should have certain reservations against such use of beta stage
+encodings.
+
+It seems reasonable that the following conditions should have to be
+fulfilled before a beta stage encoding can be made a final stage
+encoding:
+\begin{itemize}
+ \item At least one year must have passed since the last change was
+ made to the specification.
+ \item At least two people other than the proposer must have
+ succeeded in implemented the encoding in a font.
+\end{itemize}
+It is quite possible that some condition should be added or some of
+the above conditions reformulated.
+
+
+% References updated 2004/08/07.
+\begin{thebibliography}{???}
+\bibitem{ATN5013}
+ Adobe Systems Incorporated:
+ \textit{Adobe Standard Cyrillic Font Specification},
+ Adobe Technical Note \#5013, 1998;
+ \href{http://partners.adobe.com/asn/developer/pdfs/tn/%
+ 5013.Cyrillic_Font_Spec.pdf}{\textsc{http}:/\slash
+ \texttt{partners.adobe.com}\slash \texttt{asn}\slash
+ \texttt{developer}\slash \texttt{pdfs}\slash \texttt{tn}\slash
+ \texttt{5013.Cyrillic\_Font\_Spec.pdf}}.
+\bibitem{AGL}
+ Adobe Systems Incorporated: \textit{Adobe Glyph List},
+ text file, 1998,
+ \href{http://partners.adobe.com/asn/developer/type/glyphlist.txt}
+ {\textsc{http}:/\slash \texttt{partners.adobe.com}\slash
+ \texttt{asn}\slash \texttt{developer}\slash \texttt{type}\slash
+ \texttt{glyphlist.txt}}.
+\bibitem{unicodesign}
+ Adobe Systems Incorporated:
+ \textit{Adobe Solutions Network: Unicode and Glyph Names},
+ web page, 1998,
+ \href{http://partners.adobe.com/asn/developer/type/unicodegn.html}
+ {\textsc{http}:/\slash \texttt{partners.adobe.com}\slash
+ \texttt{asn}\slash \texttt{developer}\slash \texttt{type}\slash
+ \texttt{unicodegn.html}}.
+\bibitem{ClasenVieth}
+ Matthias Clasen and Ulrik Vieth:
+ \textit{Towards a new Math Font Encoding for (La)TeX},
+ March 1998, presented at EuroTeX'98;
+ \href{http://tug.org/twg/mfg/papers/current/mfg-euro-all.ps.gz}
+ {\textsc{http}:/\slash \texttt{tug.org}\slash \texttt{twg}\slash
+ \texttt{mfg}\slash \texttt{papers}\slash \texttt{current}\slash
+ \texttt{mfg-euro-all.ps.gz}}.
+\bibitem{fontinst-man}
+ Alan Jeffrey, Rowland McDonnell, Ulrik Vieth, and Lars Hellstr\"om:
+ \textit{\package{fontinst}---font installation software for \TeX}
+ (manual), 2004,
+ \ctanref{fonts/utilities/fontinst/doc/fontinst.tex}{%
+ \textsc{ctan}:\discretionary{}{}{\thinspace}%
+ \texttt{fonts}\slash \texttt{utilities}\slash
+ \texttt{fontinst}\slash \texttt{doc}\slash \texttt{fontinst.tex}}.
+% \bibitem{fontinst}
+% Alan Jeffrey, Sebastian Rahtz, and Ulrik Vieth:
+% \textit{The \package{fontinst} utility}, documented source code,
+% v\,1.801,
+% \ctanref{fonts/utilities/fontinst/source}{%
+% \textsc{ctan}:\discretionary{}{}{\thinspace}%
+% \texttt{fonts}\slash \texttt{utilities}\slash
+% \texttt{fontinst}\slash \texttt{source}/}.
+\bibitem{fontinst-pre}
+ Alan Jeffrey, Sebastian Rahtz, Ulrik Vieth, and Lars Hellstr\"om:
+ \textit{The \package{fontinst} utility}, documented source code,
+ v\,1.9xx,
+ \ctanref{fonts/utilities/fontinst-prerelease/source}{%
+ \textsc{ctan}:\discretionary{}{}{\thinspace}%
+ \texttt{fonts}\slash \texttt{utilities}\slash
+ \texttt{fontinst}\slash \texttt{source}/}.
+\bibitem{TeXbook}
+ Donald E.\ Knuth, Duane Bibby (illustrations): \textit{The \TeX book},
+ Ad\-di\-son--Wes\-ley, 1991;
+ volume A of \textit{Computers and typesetting}.
+\bibitem{LaTeXCompanion}
+ Frank Mittelbac and Michel Goossens, with Johannes Braams,
+ David Carlisle, and Chris Rowley:
+ \textit{The \LaTeX\ Companion} (second edition),
+ Ad\-di\-son--Wes\-ley, 2004; ISBN~0-201-36299-6.
+\bibitem{Omega-doc}
+ John Plaice and Yannis Haralambous:
+ \textit{Draft documentation for the Omega system},
+ version~1.12, 1999;
+ \href{http://omega.cse.unsw.edu.au:8080/doc-1.12.ps}{%
+ \textsc{http:}/\slash \texttt{omega.cse.unsw.edu.au:8080}\slash
+ \texttt{doc-1.12.ps}}.
+% \textsc{ctan}:\discretionary{}{}{\thinspace}%
+% \texttt{systems}\slash \texttt{omega}\slash
+% \texttt{omega-doc-1.8.tar.gz}.
+\bibitem{Vieth2001}
+ Ulrik Vieth:
+ \textit{Math typesetting in \TeX: The~good, the~bad, the~ugly},
+ to appear in the proceedings of Euro\TeX\ 2001;
+ \href{http://www.ntg.nl/eurotex/vieth.pdf}{%
+ \textsc{http}:/\slash \texttt{www.ntg.nl}\slash
+ \texttt{eurotex}\slash \texttt{vieth.pdf}}.
+\end{thebibliography}
+
+
+\end{document} \ No newline at end of file