summaryrefslogtreecommitdiff
path: root/info/ltx3pub/arrocont.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/ltx3pub/arrocont.tex
Initial commit
Diffstat (limited to 'info/ltx3pub/arrocont.tex')
-rw-r--r--info/ltx3pub/arrocont.tex283
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}