\documentclass{article}

\usepackage{amstext}
\usepackage{colordvi}
\usepackage{graphicx}
\usepackage{times} 
\usepackage[arrow,matrix,curve,ps]{xy}
\xyoption{dvips}
\usepackage[active]{srcltx}
\usepackage[hypertex]{hyperref}
\sloppy

\newcommand{\KDVI}{{\sf KDVI 1.0}}

\begin{document}

\title{Support for \TeX\ extensions in \KDVI}

\author{Stefan Kebekus}

\maketitle
\begin{abstract}
  This document describes the extensions to the standard format of DVI
  files which \KDVI\ implements in order to support PostScript
  inclusion and hyperlinks.
  
  \KDVI\ is a program that displays DVI-files generated by the \TeX\ 
  typesetting system. If you don't know what \TeX\ is then you are
  most likely not interested in this. If you would like to know how to
  use special features of \KDVI, then you can find examples here.
\end{abstract}

\tableofcontents

\section{What's all this}

The DVI-previewing program \KDVI\ is able to display standard
DVI-files as specified in \cite{Level0Std}. In order to support
graphics inclusion, hyperlinks and non-standard fonts, \KDVI\ 
implements a number of features which extend \cite{Level0Std}. In
particular, \KDVI\ supports a number of \TeX 's $\backslash${\tt
  special} commands. The aim of this document is to describe these
extensions and give examples of their use.

Unfortunately, in spite of several attempts to find a sound standard
for the use of $\backslash${\tt special} commands, there is now a
wealth of competing and mutually incompatible definitions.

\KDVI\ does not attempt to support all possible features. Instead, we
tried to implement those which are most useful and used most commonly.
In this, we have tried to be consistent with the {\sf dvips} program.
\KDVI\ does not support a number of outdated and unsane standards, nor
does it support features which impair the system security.


\section{Virtual fonts}

\KDVI\ supports ``virtual fonts''. This enables \TeX\ to use
PostScript fonts. For more information, and a complete specification,
consult \cite{dvips}.

\paragraph*{Example}

This text uses the ``Times'' family of fonts instead of the ``Computer
Modern'' fonts which are usually used by \TeX. This was realized in
\LaTeX 2$\epsilon$ by including the line
\begin{verbatim}
\usepackage{times} 
\end{verbatim}
in the header of this document.


\section{PostScript support}

\KDVI\ implements basic facilities to include PostScript graphics in a
DVI file, which will enable the reader to conviently read most
scientific papers which use such features. 

\subsection{Literal PostScript}

\KDVI\ supports the inclusion of PostScript into DVI-files by means of
the quote-special. The syntax follows the specification of
\cite{dvips}:
\begin{verbatim}
\special{" PostScript-commands}
\end{verbatim}
The PostScript-commands are not directly included, in fact they are
sandwiched between a {\tt save} and {\tt restore} pair. That way
\KDVI\ ensures that the command cannot affect PostScript-commands
which appear somewhere else in your file.

\paragraph*{Example}

Figure~\ref{quote-special} shows an example taken from \cite{dvips}.
The generating \TeX -code is
\begin{verbatim}
\vbox to 100bp{\vss
\special{" newpath 0 0 moveto 100 100 lineto
 300 0 lineto closepath gsave 0.8 setgray fill 
 grestore stroke}}
\end{verbatim}

\begin{figure}
\vbox to 100bp{\vss
\special{" newpath 0 0 moveto 100 100 lineto 300 0 lineto closepath gsave 0.8 setgray fill grestore stroke}}
\caption{Graphic generated by literal PostScript inclusion\label{quote-special}}
\end{figure}


\subsection{Direct PostScript}

\KDVI\ supports the inclusion of PostScript into DVI-files by means of
the direct-special. The syntax follows the specification of
\cite{dvips}:
\begin{verbatim}
\special{ps: Postscript-commands}
\end{verbatim}
The PostScript-commands are directly included, and there is no
protective {\tt save} and {\tt restore} pair. The use of this command
is not recommended, as it may have funny side effects on other
PostScript commands which appear later in your file.

\KDVI\ also supports the following syntactical variants which are
explained in \cite{dvips}:
\begin{verbatim}
\special{ps: Postscript-commands}
\special{ps::[begin] Postscript-commands}
\special{ps:: Postscript-commands}
\special{ps::[end] Postscript-commands}
\end{verbatim}
The variant
\begin{verbatim}
\special{ps: plotfile filename}
\end{verbatim}
is not currently supported.

\paragraph*{Example}

The command
\begin{verbatim}
\includegraphics[height=3cm, angle=20]{aboutkde.ps}
\end{verbatim}
which is used in section~\ref{chap:eps} uses the direct-special
internally in order to set the rotation.

\subsection{Literal headers}

Literal headers work as described in \cite{dvips}.
\begin{verbatim}
\special{! PostScript-Header-commands}
\end{verbatim}

\paragraph*{Example}
The following diagram, which was generated using the \Xy -pic macro
packages uses literal postscript inclusion which relies on literal
headers.
$$
\xymatrix{ {\tilde X}
  \ar@{-->}[rrd]_{\exists \alpha} \ar[rrrr]^{\eta}_{\txt{\tiny
      normalization}} \ar@/_/ [rrdd]_ {\tilde \pi} & & & & {X}
  \ar@/^/[lldd]^{\pi}  \\ & & {X'}
  \ar@{-->}[rru]_{\exists \beta} \ar@{-->}[d]_{\exists \pi'} & & \\ & &
  {Y}& &}
$$
Note that the actual headers are defined on the first page of the
document. This was a major source of trouble in earlier versions of
KDVI.



\subsection{PostScript headers}

PostScript headers work as described in \cite{dvips}. This command is
very similar to the literal header command, but expects the name of a
file which should be included.
\begin{verbatim}
\special{header=filename}
\end{verbatim}




\subsection{EPS inclusion}\label{chap:eps}

A popular way to include PostScript-files into \TeX\ documents uses
the PSFile $\backslash${\tt special} command. Again this is explained
in detail in \cite{dvips}. Currently \KDVI\ supports the syntax
\begin{verbatim}
\special{psfile=File keyword=value keyword=value ...}
\end{verbatim}
Where keyword is one of the following
\begin{description}
\item[llx] lower left corner of the bounding box, $x$-coordinate
\item[lly] lower left corner of the bounding box, $y$-coordinate
\item[urx] upper right corner of the bounding box, $x$-coordinate
\item[ury] upper right corner of the bounding box, $y$-coordinate
\item[rwi] width of the bounding box. If $llx-urx \not = rwi$, then
the boundig box is scaled accordingly. 
\item[rhi] height of the bounding box If $lly-ury \not = rhi$, then
the boundig box is scaled accordingly.
\item[angle] rotates the picture counterclockwise
\end{description}
Unknown keywords are silently ignored. The keywords {\tt llx}, {\tt
  lly}, {\tt urx}, {\tt ury} and {\tt rwi} are usually generated by
the {\tt epsf} macros.  The keywords {\tt hoffset}, {\tt voffset},
{\tt hsize}, {\tt vsize}, {\tt hscale}, {\tt vscale}, {\tt angle} and
{\tt clip} are not currently implemented. The ``uncompression''
feature of {\sf dvips} and {\sf xdvi} which allows to execute
arbitrary commands in via the syntactical variant
\begin{verbatim}
\special{psfile="'shell-command" keyword=value ...}
\end{verbatim}
is deliberately not implemented for security reasons.

\paragraph*{Example}
Figure~\ref{epsf-special} shows an embedded postscript-file. 
\begin{figure}
  \begin{center}
    \includegraphics[height=3cm]{aboutkde.ps}
    \includegraphics[height=4cm]{aboutkde.ps}
    \includegraphics[height=3cm, angle=20]{aboutkde.ps}
  \end{center}
\caption{Embedded PostScript graphic\label{epsf-special}}
\end{figure}
This was easily realized by including the line
\begin{verbatim}
\usepackage{graphicx}
\end{verbatim}
into the header of this document, and the lines
\begin{verbatim}
\includegraphics[height=3cm]{aboutkde.ps}
\includegraphics[height=4cm]{aboutkde.ps}
\includegraphics[height=3cm, angle=20]{aboutkde.ps}
\end{verbatim}
at the place where the graphic should appear. It is strongly
recommended to use the {\tt graphicx} macro package for this purpose.
\begin{figure}
  \begin{center}
    \includegraphics[height=2cm, bb=0 0 150 50]{nonexistent.ps}
  \end{center}
\caption{Reference to a non-existent PS-file\label{nonex-special}}
\end{figure}
Figure~\ref{nonex-special} shows how \KDVI\ warns you about
non-existent files.


\section{Hypertext support}

\KDVI\ supports commands for hyperlink support which commands
establish links between sections of documents in a manner exactly
analogous to the HTML of the WWW. For a detailed specification we
refer to \cite{HFAQ99} or \cite{Rah98}. Note, however, that \KDVI\ 
does currently not allow nested hyperlinks.

\subsection{Hyper-Labels}

The commands
\begin{verbatim}
\special{html:<a name="namestring">}
\special{html:</a>}
\end{verbatim}
labels the current point of the text for later reference.

\subsection{Hyper-References}

The commands 
\begin{verbatim}
\special{html:<a href="hrefstring">}
Text
\special{html:</a>}
\end{verbatim}
makes {\tt Text} a link to {\tt hrefstring}, where {\tt hrefstring} is
an absolute or relative URL in the standard format used on the
internel. If {\tt hrefstring} is of the form {\tt \#label} then it
points to the section of the current document which is labeled using
the labeling command described above:
\begin{verbatim}
\special{html:<a name="namestring">}
\end{verbatim}



\paragraph*{Example}
This document features a clickable table of contents, and also the
references can be clicked on. This has been achieved by using the {\tt
  hyperref} macro package in \LaTeX\ by including the line
\begin{verbatim}
\usepackage[hypertex]{hyperref}
\end{verbatim}
into the document preamble. Everything else is automatic.

Here is an external link which points to the \href{http://www.kde.org}{main
  website of the KDE project}. For this, the command {\tt href} of the
{\tt hyperref} macro package was used:
\begin{verbatim}
\href{http://www.kde.org}{main
  website of the KDE project}
\end{verbatim}


\paragraph{Warning.} On some installations, the {\tt
  hyperref} macro package is configured to generate PostScript
hyperlinks for {\tt dvips} by default. On these systems, using the
line
\begin{verbatim}
\usepackage{hyperref}
\end{verbatim}
will generate DVI file whose hyperlinks are not visible in KDVI.
Worse, KDVI will call the {\tt ghostview} PostScript interpreter for
every page, which makes the display very slow.



\section{Colored \Red{text} \Green{and} \Blue{background}}

The DVI specials for colored text are supported as they are described
in \cite{dvips}. 

\paragraph*{Example} In this document, the following code was used to
generate the text below.
\begin{verbatim}
\usepackage{colordvi}

...

\textGreen This text is green but here we are
\Red{switching to red, \Blue{nesting blue}, 
recovering the red} and back to original green.
\textCyan The text from here on will be cyan 
unless \Yellow{locally changed to yellow}. Now
we are back to cyan. \textBlack
\end{verbatim}

This gave the following output:
\begin{verse}
 \textGreen This text is green but here
we are \Red{switching to red, \Blue{nesting blue}, recovering the red}
and back to original green.  \textCyan The text from here on will be
cyan unless \Yellow{locally changed to yellow}. Now we are back to
cyan.  \textBlack
\end{verse}

To set the background color of the page, the command
\background{Lavender}
\begin{verbatim}
\background{Lavender}
\end{verbatim}
was used. To switch back to normal, the command
\begin{verbatim}
\background{White}
\end{verbatim}
was placed somewhere on the following page. As you see, the background
command does not fit well into \LaTeX's philosophy and should be
avoided.


\section{Source text specials}

\KDVI\ is able to make use of source file information which is included
in the DVI file. To include source file information, a {\tt special}
command like to following should be included at the beginning of every
paragraph or every line:
\begin{verbatim}
\special{src:123text.tex}
\end{verbatim}
This tells \KDVI\ that the next paragraph should be associated with
line 123 in the source file text.tex.

It is of course not practical to add these commands manually to the
beginning of every line ---see the \href{help:/kdvi}{Handbook of
\KDVI} to learn how to add the special commands automatically to your
DVI files.

The main use of source file specials is the interaction between \KDVI\
and your editor. Starting from version~1.0, both \emph{forward search}
and \emph{inverse search} are supported.

\subsection{Forward search}

Forward search is a feature that helps you find the place in the DVI
file that corresponds to a certain line in the source text. If source
file information is included, you can find the place in the DVI file
{\tt test.dvi} which corresponds to line 1234 in the source file {\tt
text.tex} by starting \KDVI\ like this:
\begin{verbatim}
kdvi file:test.dvi#1234text.tex
\end{verbatim}
In pracitse, this command line will be generated by a script that
communicates with your editor. Currently, scripts for Emacs and XEmacs
exist. As usual, the \href{help:/kdvi/forward-search.html}{Handbook of
\KDVI} explains how to set up your editor with thest scripts.


\subsection{Inverse search}

\background{White}
Inverse search means that you can click into the document in \KDVI,
and your editor will open, load the source file and jump to the proper
place. \KDVI\ currently supports the editors Emacs, Kate, NEdit, VI
and XEmacs. Users who prefer a different editor can specify shell
commands which are to be used. Again we refer to the
\href{help:/kdvi/inverse-search.html}{Handbook of \KDVI} for a detailed explanation.

\paragraph*{Example}
If you are viewing this document in \KDVI, you can click anywhere with
the middle mouse button (if your mouse has only two buttons, click
left and right simultaneously). An editor will pop up, load the
\LaTeX\ sourcefile and jump to the appropriate line in the
text. Source specials has been added using the {\tt srcltx} macro
package in \LaTeX\ by including the line
\begin{verbatim}
\usepackage[active]{srcltx}
\end{verbatim}
into the document preamble. Everything else is automatic.


\begin{thebibliography}{CM97}

\bibitem[Bha99]{HFAQ99}
T.~Bhattacharya et al.
\newblock {\em Hyper\TeX\ FAQ}
\newblock available on the internet site of the preprint server of the
 Los Alamos National Labatories at 
\href{http://arXiv.org/hypertex}{\small \tt http://arXiv.org/hypertex}

\bibitem[Rah98]{Rah98}
S.~Rahts
\newblock {\em Hypertext marks in \LaTeX: the {\sf hyperref} package}
\newblock included in the tetex distribution. A copy can be found on KDVI's 
home page at \hfill \linebreak
\href{http://devel-home.kde.org/~kdvi/DVI/hyperref-manual.pdf}{\small \tt http://devel-home.kde.org/$\sim$kdvi/DVI/hyperref-manual.pdf}

\bibitem[Rok00]{dvips}
T.~Rokicki
\newblock {\em DVIPS: A \TeX\ Driver}
\newblock included in the tetex distribution. A copy can be found on KDVI's 
home page at \hfill \linebreak
\href{http://devel-home.kde.org/~kdvi/DVI/dvips.dvi}{\small \tt http://devel-home.kde.org/$\sim$kdvi/DVI/dvips.dvi}

\bibitem[TUG0]{Level0Std}
The TUG DVI Driver Standards Committee
\newblock {\em The DVI Driver Standard, Level 0}
\newblock included in the tetex distribution. A copy can be found on KDVI's 
home page at \hfill \linebreak
\href{http://devel-home.kde.org/~kdvi/DVI/dvistd0.dvi}{\small \tt http://devel-home.kde.org/$\sim$kdvi/DVI/dvistd0.dvi}


\end{thebibliography}
\end{document}
