diff options
Diffstat (limited to 'info/ltx3pub/arrocont.tex')
-rw-r--r-- | info/ltx3pub/arrocont.tex | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/info/ltx3pub/arrocont.tex b/info/ltx3pub/arrocont.tex new file mode 100644 index 0000000000..0d14bf5c91 --- /dev/null +++ b/info/ltx3pub/arrocont.tex @@ -0,0 +1,283 @@ +%%% ==================================================================== +%%% @LaTeX-file{ +%%% author = "Alan Jeffrey", +%%% version = "0.01", +%%% date = "28 July 1993", +%%% time = "20:56:10 BST", +%%% filename = "arrocont.tex", +%%% address = "School of Cognitive and Computing Sciences +%%% University of Sussex +%%% Brighton BN1 9QH +%%% UK", +%%% telephone = "+44 273 606755 x 3238", +%%% FAX = "+44 273 678188", +%%% checksum = "11651 283 1282 11130", +%%% email = "alanje@cogs.sussex.ac.uk", +%%% codetable = "ISO/ASCII", +%%% keywords = "companion font TeX", +%%% supported = "yes", +%%% abstract = "This a technical study for arrows." +%%% docstring = "The checksum field above contains a CRC-16 +%%% checksum as the first value, followed by the +%%% equivalent of the standard UNIX wc (word +%%% count) utility output of lines, words, and +%%% characters. This is produced by Robert +%%% Solovay's checksum utility.", +%%% package = "stands alone", +%%% dependencies = "msam10 ltugboat.sty", +%%% } +%%% ==================================================================== +% +% 28 Jul 1993, v0.01: Finished v0.01. +% +% Copyright 1993 Alan Jeffrey. + +\documentstyle{ltugboat} + +\title{Control glyphs for arrows} +\author{Alan Jeffrey} +\address{University of Sussex} +\netaddress{alanje@cogs.susx.ac.uk} + +\def\rtitlex{MFG discussion document} +\def\midrtitle{{\sl Task 3: + Technical studies\/}} +\setcounter{page}{1} + +\def\T#1{$\fam0 T_{#1}$} +\def\X#1{$\fam0 X_{#1}$} +\def\psname#1{\penalty0\mbox{\normalshape $\langle$#1$\rangle$}} +\def\psnon#1{\penalty0\mbox{\it $\langle$#1\/$\rangle$}} +\def\errorglyph{{\vrule width 0.5em height 0.5em depth0em}} + +\font\msamten=msam10 +\def\msam#1{\leavevmode\hbox{\msamten\char"#1}} + +\font\lasyten=lasy10 +\def\lasy#1{\leavevmode\hbox{\lasyten\char"#1}} + +\def\syntax#1{\leavevmode\hbox{\it #1}} + +\begin{document} + +\maketitle + +\section{Introduction} + +This document looks at suitable control glyphs for implementing math +arrows. In particular, we look at ways that extensible and negated +arrows can be produced. + +\section{Vertical arrows} + +Vertical arrows can be accessed using the growing delimiter mechanism. +The non-negated arrows can be built with a `top', `bot' and `rep' +section, and the negated arrows can be built with a `top', `bot', `med' +and `rep' section, where the `med' section includes the negation. + +\section{Horizontal arrows} + +Horizontal arrows can be produced using the advanced ligature mechanism +introduced in \TeX~3. An \syntax{arrow} is defined by: +\[ + \syntax{arrow} ::= + \syntax{leftarrow} \: \syntax{rightarrow} \: \syntax{extarrow}^* +\] +A \syntax{leftarrow} is the leftmost part of an arrow, that is the tail +of a rightwards-pointing arrow or the head of a leftwards-pointing +arrow. For example, the \syntax{leftarrow} of `$\mapsto$' is +\psnon{leftarrowmapsto} and the \syntax{leftarrow} of `$\leftrightarrow$' is +\psnon{leftarowhead}. A \syntax{leftarrow} is one of: +\begin{itemize} + +\item \psnon{leftarrownone} There is nothing on the left of the arrow, + for example `$\rightarrow$' or `\msam{13}'. + +\item \psnon{leftarrowhead} There is a single arrowhead on the left of + this arrow, for example `$\leftrightarrow$' or `$\hookleftarrow$'. + +\item \psnon{leftarrowdblhead} There is a double arrowhead on the left of + this arrow, for example `$\Leftarrow$' or `$\Leftrightarrow$'. + +\item \psnon{leftarrowtrplhead} There is a triple arrowhead on the left + of this arrow, for example `\msam{57}' or `\msam{57}\kern-2pt\msam{56}'. + +\item \psnon{leftarrowmapsto} There is a flat bar on the left of this + arrow, for example `$\mapsto$'. + +\item \psnon{leftarrowhook} There is a hook on the left of this arrow, + for example `$\hookrightarrow$'. + +\item \psnon{leftarrowharpoonup} There is an upwards harpoon on the left + of this arrow, for example `$\leftharpoonup$'. + +\item \psnon{leftarrowharpoondown} There is a downwards harpoon on the + left of this arrow, for example `$\leftharpoondown$'. + +\item \psnon{leftarrowharpoondblup} There is an upwards harpoon on the + left of this double arrow, for example `\msam{0B}'. + +\item \psnon{leftarrowharpoondbldown} There is a downwards harpoon on the + left of this double arrow, for example `\msam{0A}'. + +\item \psnon{leftarrowheaddbl} There are two arrowheads on the left of + this single arrow, for example `\msam{11}'. + +\item \psnon{leftarrowdblheaddbl} There are two arrowheads on the left of + this double arrow, for example `\msam{12}'. + +\item \psnon{leftarrowdblheadup} There is an arrowhead on the top left of + this double arrow, for example `\msam{1C}'. + +\item \psnon{leftarrowdblheaddown} There is an arrowhead on the bottom + left of this double arrow, for example `\msam{1D}'. + +\item \psnon{leftarrowrighthead} There is a rightwards arrowhead on the + left of this arrow, for example `\msam{1A}'. + +\item \psnon{leftarrowcurlyhead} There is an arrowhead with a curly line + leading out of it on the left of this arrow, for example `\msam{21}' + +\item \psnon{leftarrowturn} There is a turn on the left of this arrow, for + example `\msam{23}'. + +\item \psnon{leftarrowcirc} There is an open circle on the left of this + arrow, for example `$\vcenter{\hbox{$\scriptstyle\circ$}}\!-$'. + +\item \psnon{leftarrowbullet} There is a closed circle on the left of this + arrow, for example `$\vcenter{\hbox{$\scriptstyle\bullet$}}\!-$'. + +\item \psnon{leftarrowtriangle} There is an open triangle on the left of this + arrow, for example `$\vcenter{\hbox{$\scriptstyle\triangleleft$}}\!-$'. + +\end{itemize} +A \syntax{rightarrow} has the same possibilities, visually mirrored +around the vertical axis, and with `\syntax{left}' swapped with +`\syntax{right}'. For example: +\begin{itemize} + +\item[$\rightarrow$] is \psnon{leftarrownone}\psnon{rightarrowhead}. + +\item[$\leftrightarrow$] is \psnon{leftarrowhead}\psnon{rightarrowhead}. + +\item[$\vcenter{\hbox{$\scriptstyle\bullet$}}\!\!$\msam{22}] + is \psnon{leftarrowbullet}\psnon{rightarrowturn}. + +\end{itemize} +These arrows can be extended using \syntax{extarrow} glyphs, which say +how many extension pieces to put into the arrow. An \syntax{extarrow} is +one of: +\begin{itemize} + +\item \psnon{extarrowone} which extends the arrow. +\item \psnon{extarrowneg} which negates the arrow. +\item \psnon{extarrowoneneg} which extends the arrow and negates it. + +\end{itemize} +If there is a negation, it should come in the middle of the list of +extensions, for example: +\begin{raggedright}\begin{description} + +\item[$\not\Leftrightarrow$] is \psnon{leftarrowdblhead}\psnon + {rightarrowdblhead}\psnon{extarrowneg}. + +\item[$\Leftarrow\!\!\not\,\Rightarrow$] + is \psnon{leftarrowdblhead}\psnon + {rightarrowdblhead}\psnon{extarrowoneneg}. + +\item[$\Leftarrow\!\not\Longrightarrow$] + is \psnon{leftarrowdblhead}\psnon + {rightarrowdblhead}\psnon{extarrowone}\psnon{extarrowneg}\psnon + {extarrowone}. + +\end{description}\end{raggedright}% +Note that not every font will be able to produce every combination of +\syntax{leftarrow} and \syntax{rightarrow}, for example some pi fonts do +not allow $\mapsto$ to be extended. In fact, some of the combinations +make no sense, such as \psnon{leftarrowhook}\psnon{rightarrowdblhead}. +Such nonexistent arrows should be set with an eye-catching error glyph +such as `\errorglyph' and if possible should put a `Warning:' special +into the \verb|dvi| file. + +We should not specify anything about the appearance of these control +glyphs, which should give font implementors enough freedom to convert +most pi fonts into this encoding. One possible implementation of these +control glyphs is by ligaturing and kerning, for example by using the +ligatures: +\begin{eqnarray*} + \lefteqn{\psnon{leftarrowhead} \psnon{rightarrowhead}} \\& + \rightarrow & \psnon{leftrightarrow} \\ + \lefteqn{\psnon{leftrightarrow}\psnon{extarrowone}} \\& + \rightarrow & \psnon{leftrightarrow}\psnon{rightarrow} \\ + \lefteqn{\psnon{leftrightarrow}\psnon{rightarrow}} \\& + \rightarrow & \psnon{leftarrow}\psnon{rightarrow} \\ + \lefteqn{\psnon{rightarrow}\psnon{extarrowone}} \\& + \rightarrow & \psnon{rightarrow}\psnon{rightarrow} \\ + \lefteqn{\psnon{rightarrow}\psnon{rightarrow}} \\& + \rightarrow & \psnon{arrowext}\psnon{rightarrow} +\end{eqnarray*} +and appropriate kerns for: +\begin{center} + \psnon{leftarrow}\psnon{rightarrow} \\ + \psnon{arrowext}\psnon{rightarrow} +\end{center} +then the `arrow-building kit' will build any length of +`$\leftrightarrow$' that is required, for example: +\begin{verbatim} + \def\longrightarrow{\mathrel + {\leftarrowheadchar + \rightarrowheadchar + \arrowextonechar}} +\end{verbatim} +Note that as long as the user does +not use the control glyphs of type mathord in their document, the +ligtable will never be used (rule 14 of Appendix G) and so input such as: +\begin{verbatim} + {\rightarrow} \rightarrow +\end{verbatim} +will not unexpectedly ligature to something else. There are a few +features missing from these control glyphs: +\begin{itemize} + +\item The simpler arrows should be in fixed slots, so that they can be + accessed quickly through a \verb|\mathchardef|. We should ensure that + this \verb|\mathchardef| is always of type mathrel, otherwise strange + ligaturing might happen. + +\item There is currently no syntax for accessing the negation glyphs on + their own, which are necessary for building negated arrow leaders + similar to \verb|\arrowfill|. + +\end{itemize} +There are eight other `arrowlike' glyphs that are defined as +special glyphs, and do not fit into the `arrow-building kit'. These are +`\msam{08}', `\msam{09}', `\msam{1E}', `\msam{1F}', `\msam{4B}', +`\msam{4C}', `$\vec{x}$' and +`$\vcenter{\hbox{$\scriptstyle\leftrightarrow$}\kern-2ex\hbox{$-$}\kern-.5ex}$'. +These glyphs should be accessed directly. + +All that these control glyphs are doing is simulating the extensible +vertical glyphs such as the growing delimiters. If there were a +horizontal equivalent of growing delimiters then no such trickery would +be required! + +\section{Diagonal arrows} + +There is no easy way to build diagonal extended arrows. All the font can +do is provide the building blocks, and leave \TeX\ macros to build the +arrows. The font standard should specify how each of the diagonal +extended arrows is to be constructed, and any font dimensions that will +be necessary for the task. + +\section{Conclusions} + +Setting extensible vertical arrows with \TeX\ is simple, since the +growing delimiter mechanism already supports it. Setting growing +horizontal arrows is trickier, and requires clever ligtable programming, +but it can still be done inside the font, and without use of \TeX\ +macros. Setting diagonal arrows can only be done by brute force and +\TeX\ programming. + +\makesignature + +\end{document} |