% File src/library/grDevices/man/Hershey.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2012 R Core Team
% Distributed under GPL 2 or later

\name{Hershey}
\alias{Hershey}
\title{Hershey Vector Fonts in R}
\description{
  If the \code{family} graphical parameter (see \code{\link{par}})
  has been set to one of the Hershey fonts (see \sQuote{Details})
  Hershey vector fonts are used to render text.

  When using the \code{\link{text}} and \code{\link{contour}} functions
  Hershey fonts may be selected via the \code{vfont} argument, which is
  a character vector of length 2 (see \sQuote{Details} for valid
  values).  This allows Cyrillic to be selected, which is not available
  via the font families.
}
\usage{
Hershey
}
\details{
  The Hershey fonts have two advantages:\cr
  \enumerate{
    \item vector fonts describe each
    character in terms of a set of points;  \R renders the character by
    joining up the points with straight lines.  This intimate knowledge of
    the outline of each character means that \R can arbitrarily transform
    the characters, which can mean that the vector fonts look better
    for rotated text.
    \item this implementation was adapted from the GNU \I{libplot} library
    which provides support for non-ASCII and non-English fonts.  This means
    that it is possible, for example, to produce weird plotting symbols and
    Japanese characters.
  }
  Drawback:\cr
You cannot use mathematical expressions (\code{\link{plotmath}}) with
  Hershey fonts.

  The Hershey characters are organised into a set of fonts.  A
  particular font is selected by specifying one of the following
  font families via \code{par(family)} and specifying the desired font
  face (plain, bold, italic, bold-italic) via \code{par(font)}.

%% The basic "table" is in  ../../../main/engine.c
  \tabular{ll}{
    family \tab faces available \cr
    \code{"HersheySerif"} \tab plain, bold, italic, bold-italic \cr
    \code{"HersheySans"} \tab plain, bold, italic, bold-italic \cr
    \code{"HersheyScript"} \tab plain, bold \cr
    \code{"HersheyGothicEnglish"} \tab plain \cr
    \code{"HersheyGothicGerman"} \tab plain \cr
    \code{"HersheyGothicItalian"} \tab plain \cr
    \code{"HersheySymbol"} \tab plain, bold, italic, bold-italic \cr
    \code{"HersheySansSymbol"} \tab plain, italic \cr
  }

  In the \code{vfont} specification for the \code{text} and
  \code{contour} functions, the Hershey font is specified by a typeface
  (e.g., \code{serif} or \code{sans serif}) and a \I{fontindex} or
  \sQuote{style} (e.g., \code{plain} or \code{italic}). The first
  element of \code{vfont} specifies the typeface and the second element
  specifies the \I{fontindex}.  The first table produced by
  \code{demo(Hershey)} shows the character \code{a} produced by each of
  the different fonts.

  The available \code{typeface} and \code{fontindex} values are
  available as list components of the variable \code{Hershey}.
  The allowed pairs for \code{(typeface, \I{fontindex})} are:
%% This is checked (via max{#}) in FixupVFont() ../../../main/plot.c
%% The basic "table" really is in  ../../../modules/vfonts/g_fontdb.c

  \tabular{ll}{
    serif \tab plain \cr
    serif \tab italic \cr
    serif \tab bold \cr
    serif \tab bold italic \cr
    serif \tab \I{cyrillic} \cr
    serif \tab oblique \I{cyrillic} \cr
    serif \tab \I{EUC} \cr
    sans serif \tab plain \cr
    sans serif \tab italic \cr
    sans serif \tab bold \cr
    sans serif \tab bold italic \cr
    script \tab plain \cr
    script \tab italic \cr
    script \tab bold \cr
    \I{gothic english}o \tab plain \cr
    \I{gothic german} \tab plain \cr
    \I{gothic italian} \tab plain \cr
    serif symbol \tab plain \cr
    serif symbol \tab italic \cr
    serif symbol \tab bold \cr
    serif symbol \tab bold italic \cr
    sans serif symbol \tab plain \cr
    sans serif symbol \tab italic \cr
  }
  and the indices of these are available as \code{Hershey$allowed}.

  \describe{
    \item{Escape sequences:}{The string to be drawn can include escape
      sequences, which all begin with a \samp{\\}.   When \R encounters a
      \samp{\\}, rather than drawing the \samp{\\}, it treats the
      subsequent character(s) as a coded description of what to draw.

      One useful escape sequence (in the current context) is of the
      form: \samp{\\123}.  The three digits following the \samp{\\}
      specify an octal code for a character.  For example, the octal
      code for \code{p} is 160 so the strings \code{"p"} and
      \code{"\\160"} are equivalent. This is useful for producing
      characters when there is not an appropriate key on your keyboard.

      The other useful escape sequences all begin with \samp{\\\\}.
      These are described below.  Remember that backslashes have to be
      doubled in \R character strings, so they need to be entered with
      \emph{four} backslashes.
    }

    \item{Symbols:}{an entire string of Greek symbols can be produced by
      selecting the \I{HersheySymbol} or \I{HersheySansSymbol} family or the
      Serif Symbol or Sans Serif Symbol typeface.  To allow Greek
      symbols to be embedded in a string which uses a non-symbol
      typeface, there are a set of symbol escape sequences of the form
      \samp{\\\\ab}. For example, the escape sequence \samp{\\\\*a}
      produces a Greek alpha.  The second table in \code{demo(Hershey)}
      shows all of the symbol escape sequences and the symbols that they
      produce.
    }

    \item{ISO Latin-1:}{further escape sequences of the form
      \samp{\\\\ab} are provided for producing ISO Latin-1 characters.
      Another option is to use the appropriate octal code.  The
      (non-ASCII) ISO Latin-1 characters are in the range 241\dots{}377.
      For example, \samp{\\366} produces the character o with an umlaut.
      The third table in \code{demo(Hershey)} shows all of the ISO
      Latin-1 escape sequences.

      These characters can be used directly.  (Characters not in Latin-1
      are replaced by a dot.)

      Several characters are missing, c-cedilla has no cedilla and
      \sQuote{sharp s} (\samp{U+00DF}, also known as \sQuote{\I{esszett}})
      is rendered as \code{ss}.
    }

    \item{Special Characters:}{a set of characters are provided which
      do not fall into any standard font.  These can only be accessed by
      escape sequence.  For example, \samp{\\\\LI} produces the zodiac sign for
      Libra, and \samp{\\\\JU} produces the astronomical sign for Jupiter.
      The fourth table in \code{demo(Hershey)} shows all of the
      special character escape sequences.
    }

    \item{Cyrillic Characters:}{\I{cyrillic} characters are implemented
      according to the K018-R encoding, and can be used directly in such
      a locale using the Serif typeface and Cyrillic (or Oblique Cyrillic)
      \I{fontindex}.  Alternatively they can be specified via an octal code
      in the range 300 to 337 for lower case characters or 340 to 377 for
      upper case characters.  The fifth table in \code{demo(Hershey)} shows the
      octal codes for the available Cyrillic characters.

      Cyrillic has to be selected via a \code{("serif", fontindex)} pair
      rather than via a font family.
    }

    \item{Japanese Characters:}{83 Hiragana, 86 Katakana, and 603 Kanji
      characters are implemented according to the \I{EUC-JP} (Extended Unix Code)
      encoding. Each character is identified by a unique hexadecimal code.
      The Hiragana characters
      are in the range 0x2421 to 0x2473, Katakana are in the range 0x2521 to
      0x2576, and Kanji are (scattered about) in the range 0x3021 to 0x6d55.

      When using the Serif typeface and \I{EUC}
      \I{fontindex}, these characters can be produced by a \emph{pair} of octal
      codes.  Given the hexadecimal code (e.g., 0x2421), take the first two
      digits and add 0x80 and do the same to the second two digits (e.g.,
      0x21 and 0x24 become \I{0xa4} and \I{0xa1}), then convert both to octal (e.g.,
      \I{0xa4} and \I{0xa1} become 244 and 241).  For example, the first Hiragana
      character is produced by \samp{\\244\\241}.

      It is also possible to use the hexadecimal code directly.  This works
      for all non-\I{EUC} fonts by specifying an escape sequence of the form
      \samp{\\\\#J1234}.  For example, the first Hiragana character is produced
      by \samp{\\\\#J2421}.

      The Kanji characters may be specified in a third way, using the
      so-called "Nelson Index", by specifying an escape sequence of the form
      \samp{\\\\#N1234}.  For example, the (obsolete) Kanji for \sQuote{one} is
      produced by \samp{\\\\#N0001}.

      \code{demo(Japanese)} shows the available Japanese characters.
    }

    \item{Raw Hershey Glyphs:}{all of the characters in the Hershey
      fonts are stored in a large array.  Some characters are not
      accessible in any of the Hershey fonts.  These characters can only
      be accessed via an escape sequence of the form \samp{\\\\#H1234}.
      For example, the \I{fleur-de-lys} is produced by \samp{\\\\#H0746}.
      The sixth and seventh tables of \code{demo(Hershey)} shows all of
      the available raw glyphs.
    }
  }
}

\references{
  \url{https://www.gnu.org/software/plotutils/plotutils.html}.
}
\seealso{ \code{\link{demo}(Hershey)}, \code{\link{par}},
  \code{\link{text}}, \code{\link{contour}}.

  \code{\link{Japanese}} for the Japanese characters in the Hershey fonts.
}
\examples{
Hershey

## for tables of examples, see demo(Hershey)
}
\keyword{aplot}
