\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.1}} \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:} \special{html:} \end{verbatim} labels the current point of the text for later reference. \subsection{Hyper-References} The commands \begin{verbatim} \special{html:} Text \special{html:} \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:} \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{Rotated Text} Rotated text can sometimes be useful, e.g. to fit large table onto a single page. This is used, e.g.~in the style files of journals of the American Astronomical Society. Here is one example. \begin{table}[h] \centering \begin{tabular}{l|ll} & \rotatebox{90}{uses \TeX} & \rotatebox{90}{uses Linux} \\ \hline Stefan & $\times$ & $\times$ \\ Anke & & $\times$ \\ Thomas & $\times$ &\\ \end{tabular} \end{table} This was easily realized by including the line \begin{verbatim} \usepackage{graphicx} \end{verbatim} into the header of this document. The table itself was then typeset by {\footnotesize \begin{verbatim} \begin{tabular}{l|ll} & \rotatebox{90}{uses \TeX} & \rotatebox{90}{uses Linux} \\ \hline Stefan & $\times$ & $\times$ \\ Anke & & $\times$ \\ Thomas & $\times$ &\\ \end{tabular} \end{verbatim} } \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}