From 103b084776d861a93e851ebff9c72798019b7561 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Wed, 31 Jan 2001 03:39:28 +0000 Subject: [PATCH] r478: no message --- doc/Makefile.am | 28 ++- doc/bullet.bmp | Bin 0 -> 138 bytes doc/ctsim-concepts.tex | 22 ++ doc/ctsim-gui.tex | 14 ++ doc/ctsim-install.tex | 49 ++++ doc/ctsim-textui.tex | 210 +++++++++++++++++ doc/ctsim-web.tex | 20 ++ doc/ctsim.bib | 36 +++ doc/ctsim.hlp | Bin 0 -> 31122 bytes doc/ctsim.hpj | 29 +++ doc/ctsim.htb | Bin 0 -> 18240 bytes doc/ctsim.tex | 104 +++++++++ doc/fancyhea.sty | 145 ++++++++++++ doc/logo-huge.bmp | Bin 0 -> 67856 bytes doc/logo-huge.gif | Bin 0 -> 4687 bytes doc/make-help | 12 + doc/makeidx.sty | 11 + doc/mysober.sty | 154 ++++++++++++ doc/mytitle.sty | 30 +++ doc/psbox.tex | 520 +++++++++++++++++++++++++++++++++++++++++ doc/tex2rtf.ini | 10 + doc/texhelp.sty | 298 +++++++++++++++++++++++ doc/verbatim.sty | 212 +++++++++++++++++ 23 files changed, 1900 insertions(+), 4 deletions(-) create mode 100644 doc/bullet.bmp create mode 100644 doc/ctsim-concepts.tex create mode 100644 doc/ctsim-gui.tex create mode 100644 doc/ctsim-install.tex create mode 100644 doc/ctsim-textui.tex create mode 100644 doc/ctsim-web.tex create mode 100644 doc/ctsim.bib create mode 100644 doc/ctsim.hlp create mode 100644 doc/ctsim.hpj create mode 100644 doc/ctsim.htb create mode 100644 doc/ctsim.tex create mode 100644 doc/fancyhea.sty create mode 100644 doc/logo-huge.bmp create mode 100644 doc/logo-huge.gif create mode 100644 doc/make-help create mode 100644 doc/makeidx.sty create mode 100644 doc/mysober.sty create mode 100644 doc/mytitle.sty create mode 100644 doc/psbox.tex create mode 100644 doc/tex2rtf.ini create mode 100644 doc/texhelp.sty create mode 100644 doc/verbatim.sty diff --git a/doc/Makefile.am b/doc/Makefile.am index 0edfc8c..b165afd 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,4 +1,24 @@ -docs=sgp.doc -info_INFO=ctsim.texi -EXTRA_DIST = ${docs} $(info_INFO) -SUBDIRS = tex2rtf \ No newline at end of file +docs=ctsim.tex ctsim.bib texhelp.sty psbox.tex logo-huge.bmp tex2rtf.ini ctsim.hpj bullet.bmp verbatim.sty mytitle.sty makeidx.sty mysober.sty fancyhea.sty ctsim.bib +EXTRA_DIST = ${docs} + +dvi: ctsim.tex + bibtex ctsim + latex ctsim + makeindex ctsim + latex ctsim + +winhelp: ctsim.tex + rm -f ctsim.rtf ctsim.cnt + tex2rtf ctsim.tex ctsim.rtf -winhelp + hcw /c /m /e ctsim.hpj + mv CTSIM.HLP ctsim.hlp + cp ctsim.hlp ctsim.cnt ../msvc/ctsim/ + +htmlhelp: ctsim.tex + rm -f ctsim*.html ctsim.hhp ctsim.hhc ctsim.hhk + tex2rtf ctsim.tex ctsim.html -html + zip ctsim.zip *.html *.gif ctsim.hhp ctsim.hhc ctsim.hhk + mv ctsim.zip ctsim.htb + cp ctsim.htb ../msvc/ctsim/. + cp ctsim.htb ../src/. + diff --git a/doc/bullet.bmp b/doc/bullet.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aad8fc793edd54ffb5910e67b2470659c95448b7 GIT binary patch literal 138 zcmZumxe>rH2vhFtK1GJ`9PYi2Yw9con_&SdBlI1b>qTKR2Gu`ZXgNITWj7;KP=JJL V1)UXU1`*-lNw`O&c<~DR!2u5s7-j$f literal 0 HcmV?d00001 diff --git a/doc/ctsim-concepts.tex b/doc/ctsim-concepts.tex new file mode 100644 index 0000000..ba0c2ad --- /dev/null +++ b/doc/ctsim-concepts.tex @@ -0,0 +1,22 @@ +\chapter{Concepts}\index{Concepts}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\section{Overview}\label{conceptoverview}\index{Concepts,Overview}% + +\section{Phantoms}\label{conceptphantom}\index{Concepts,Phantoms}% +\subsection{Overview}\label{phantomoverview}\index{Concepts,Phantoms,Overview}% +\subsection{Phantom Elements}\label{phantoelements}\index{Concepts,Phantoms,Elements} +\subsubsection{ellipse} +\subsubsection{rectangle} +\subsubsection{triangle} +\subsubsection{sector} +\subsubsection{segment} + +\section{Scanner}\label{conceptscanner}\index{Concepts,Scanner}% +\subsection{Geometries} +\subsection{Focal Length} +\subsection{Field of View} + +\section{Reconstruction}\label{conceptreconstruction}\index{Concepts,Reconstruction}% +\subsection{Filtered Backprojection} diff --git a/doc/ctsim-gui.tex b/doc/ctsim-gui.tex new file mode 100644 index 0000000..99bc69d --- /dev/null +++ b/doc/ctsim-gui.tex @@ -0,0 +1,14 @@ +\chapter{ctsim - the Graphical User Interface}\label{ctsim}\index{ctsim}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\ctsim is the graphical shell for the CTSim project. It is +written using the wxLibrary for cross-platform compatibility with GTK, +Motif, and Microsoft Windows. It includes all of the functionality of +the command-line tool {\tt ctsimtext} as well as image processing and visualization features. + +\ctsim can open projection files, image files, phantom definition files, and plotfiles. + +\usage +ctsim [OPTIONS] [files to open...] + diff --git a/doc/ctsim-install.tex b/doc/ctsim-install.tex new file mode 100644 index 0000000..c5cb08d --- /dev/null +++ b/doc/ctsim-install.tex @@ -0,0 +1,49 @@ +\chapter{Installation}\index{Installation}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\section{Download}\label{download}\index{Installation,Download}% + +The latest version of CTSim, plus source code, can be accessed from: + +\begin{verbatim} +http://www.ctsim.org +ftp://ftp.ctsim.org +\end{verbatim} + +It is available in Windows 95/NT/2000 and Linux GUI versions and non-GUI versions. + +\section{Installing Linux RPM}\index{Installation,Linux}% + +\section{Installing Windows Binary}\index{Installation,Windows}% + +\section{Build From Sources}\label{build}\index{Installation,Build}% + +See the INSTALL file included in the source distribution for instructions. + +\section{Web Requirements}\label{installreq}\index{Installation,Requirements}% + \begin{itemize}\itemsep=0pt + \item zlib Library (optional) + \par Used for PNG file export. + + \item libpng Library (optional) + \par Used for PNG file export. + \par www.libpng.org + + \item FFTW library (optional) + \par Used for frequency-based filtering and fourier transformations of images. + \par www.fftw.org + + \item readline library (optional) + \par Used for \ctsimtext interactive shell. + + \item dmalloc library (optional) + \par Used for debugging memory allocation + \par www.dmalloc.com + + \item wxWindows library (optional) + \par Used for platform-independent graphical interface. The graphical-shell + program \ctsim requires this library. + \par www.wxwindows.org +\end{itemize} + diff --git a/doc/ctsim-textui.tex b/doc/ctsim-textui.tex new file mode 100644 index 0000000..3826c49 --- /dev/null +++ b/doc/ctsim-textui.tex @@ -0,0 +1,210 @@ +\chapter{ctsimtext}\label{ctsimtext}\index{ctsimtext}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\ctsimtext is a master shell for all of the command-line utilities. + +\usage +\ctsimtext can be executed without any parameters. In that case, \ctsimtext +offers a command-line to enter the function-names and their parameters. The output of the command is displayed. Further commands may be given to \ctsimtext. The shell is exited by the {\tt quit} command. + +\ctsimtext can also be called to execute a single command. This is especially useful for batch files containing multiple \ctsimtext commands. This is invoked by calling \par +{\tt ctsimtext function-name parameters...}. + +The available functions are: + +\section{if1}\label{if1}\index{ctsimtext,if1}% +Perfoms math functions on a single image. + +\usage +\begin{itemize}\itemsep=0pt + \item --invert + \item --log + \item --exp + \item --sqr + \item --sqrt +\end{itemize} + +\section{if2}\label{if2}\index{ctsimtext,if2}% +Perfoms math functions on a two images. + +\usage +\begin{itemize}\itemsep=0pt + \item --add + \item --sub + \item --mul + \item --comp + \item --column-plot + \item --row-plot +\end{itemize} + +\section{ifexport}\label{ifexport}\index{ctsimtext,ifexport}% +Export an imagefile to a standard graphics file. + +\usage +\begin{itemize}\itemsep=0pt + \item --format + \begin{itemize}\itemsep=0pt + \item --pgm + \item --pgmasc + \item --png + \item --png16 + \end{itemize} + \item --center + \begin{itemize}\itemsep=0pt + \item median + \item mode + \item mean + \end{itemize} + \item --auto + \begin{itemize}\itemsep=0pt + \item --full + \item --std0.1 + \item --std0.5 + \item --std1 + \item --std2 + \item --std3 + \end{itemize} + \item --scale + \item --min + \item --max +\end{itemize} + +\section{ifinfo}\label{ifinfo}\index{ctsimtext,ifinfo}% + +Displays information about an imagefile. + +\usage +\begin{itemize}\itemsep=0pt + \item --labels + \item --no-labels + \item --stats + \item --no-stats + \item --help +\end{itemize} + +\section{phm2pj}\label{phm2pj}\index{ctsimtext,phm2pj}% +Simulates collection of X-rays data (projections) around a phantom object. + +\usage +phm2pj projection-file-name number-of-detectors number-of-views [options...] +\begin{itemize}\itemsep=0pt + \item --phantom + Select a standard phantom + \begin{itemize}\itemsep=0pt + \item herman + \item herman-b + \item shepp-logan + \item shepp-logan-b + \end{itemize} + + \item --phmfile + Load a phantom definition definition + + \item --geometry + \begin{itemize}\itemsep=0pt + \item parallel + \item equiangular + \item equilinear + \end{itemize} + + \item --nray + Number of samples per each detector + + \item --rotangle + Sets the rotation amount as a multiple of pi. For parallel geometries use +a rotation angle of 1 and for equilinear and equiangular geometries use a rotation angle of 2. + + \item --field-of-view + Sets the field of view as a ratio of the diameter of the phantom. For parallel geometries, using a value of 1.0 is fine. For other geometies, this should be at least 1.3 to avoid artifacts. + + \item --focal-length + Sets the distance of the radiation source and detectors from the center of the object as a ratio of the radius of the object. For parallel geometries, a value of 1.0 is fine. For other geometries, this should be at least 2.0 to avoid artifacts. +\end{itemize} + +The Herman phantom is taken with permission from Gabor Hermans 1980 book\cite{HERMAN80}. The Shepp-Logan phantom was published in 1974\cite{SHEPP74}. + +\section{phm2if}\label{phm2if}\index{ctsimtext,phm2if}% +Converts a geometric phantom object into an imagefile. The size of the +imagefile in pixels must be specified as well as the number of samples +to average per pixel. + +\usage +\begin{itemize}\itemsep=0pt + \item --nsamples +\end{itemize} + +\section{pj2if}\label{pj2if}\index{ctsimtext,pj2if}% +Convert a projection file into an imagefile. + +\usage +\begin{itemize}\itemsep=0pt +\item --help Print brief online help +\end{itemize} + +\section{pjinfo}\label{pjinfo}\index{ctsimtext,pjinfo}% +Displays information about a projection file. + +\usage +\begin{itemize}\itemsep=0pt + \item --binaryheader + \item --binaryview + \item --startview + \item --endview + \item --dump +\end{itemize} + +\section{pjrec}\label{pjrec}\index{ctsimtext,pjrec}% +Reconstructs the interior of an object from a projection file. + +\usage +\begin{twocollist} +\twocolitemruled{{\bf Parameter}}{{\bf Options}} +\twocolitem{{\bf --filter}} +{Selects which filter to apply to each projection. To properly reconstruct an image, this filter should be multiplied +by the absolute value of distance from zero frequency. +\begin{itemize}\itemsep=0pt +\item abs\_bandlimit +\item abs\_cosine +\item abs\_hamming +\end{itemize} +} +\twocolitem{{\bf --filter-parameter}}{Sets the alpha level for Hamming + window. At setting of 0.54, this equals the Hanning window.} + +\twocolitem{{\bf --filter-method}}{Selects the filtering method. For large numbers of detectors, {\tt rfftw} is optimal. For smaller numbers of detectors, {\tt convolution} might be a bit faster. +\begin{itemize}\itemsep=0pt +\item convolution +\item fourier +\item fourier\_table +\item fftw +\item rfftw +\end{itemize} +} + +\twocolitem{{\bf --filter-generation}}{Selects the filter generation. With convolution, {\tt direct} is the proper method to select. With any of the frequency methods, {\tt inverse-fourier} is the best method. +\begin{itemize}\itemsep=0pt +\item direct +\item inverse-fourier +\end{itemize} +} +\twocolitem{{\bf --interpolation}}{Interpolation technique. {\tt linear} is optimal. +\begin{itemize}\itemsep=0pt +\item nearest +\item linear +\end{itemize} +} + \twocolitem{{\bf -backprojection}}{Selects the backprojection technique. A setting of {\tt idiff3} is optimal. +\begin{itemize}\itemsep=0pt +\item trig +\item table +\item diff +\item diff2 +\item idiff2 +\item idiff3 +\end{itemize} +} +\twocolitem{{\bf --zeropad}}{ Zeropad factor. A setting of {\tt 1} is optimal.} + +\twocolitem{{\bf --preinterpolate}}{Selects preinterpolation interpolation technique and sets the preinterpolation factor. Currently, this is experimental and does not work well.} +\end{twocollist} diff --git a/doc/ctsim-web.tex b/doc/ctsim-web.tex new file mode 100644 index 0000000..b6ccb31 --- /dev/null +++ b/doc/ctsim-web.tex @@ -0,0 +1,20 @@ +\chapter{The Web Browser CGI Interface}\label{webinterface}\index{Web Interface}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\section{Overview}\index{Web Interface,Overview}% +The CGI program {\tt ctsim.cgi} takes projections of a standard +phantom object, performs reconstruction, and then compares the +rasterized phantom object with the reconstruction. The comparison is +performed both visually by an image subtraction as well as by standard +statistics as described by Herman\cite{HERMAN80}. + +\section{Requirements}\index{Web Interface,Requirements}% + \begin{itemize}\itemsep=0pt + \item Apache or other CGI compatible web server + + \item Perl (version 4.0 or higher) + + \item A client web browser than can display PNG files. Most + current web browsers support PNG. + \end{itemize} diff --git a/doc/ctsim.bib b/doc/ctsim.bib new file mode 100644 index 0000000..c29be25 --- /dev/null +++ b/doc/ctsim.bib @@ -0,0 +1,36 @@ +\bibliography{ctsim} +\bibliographystyle{plain} + +@book{KAK87, + author = {A. Kak and M. Slaney}, + title = {Principles of Computerized Tomographic Imaging}, + publisher = {IEEE Press, New York}, + year = {1987} +} + +@book{HERMAN80, + author = {G.T. Herman}, + title = {Image Reconstruction from Projections: The Fundamentals of Computerized Tomography}, + year = {1980}, + publisher = {Academic Press, New York, 1980} +} + +@book{PRESS92, + author = {W.H. Press, S.A. Teukolsky, W.T. Vellerling, and B.P. Flannery}, + title = {Numerical Recipes in C: The Art of Scientific Computing}, + publisher = {Cambridge University Press, Cambridge}, + edition = {Second}, + year = {1992} +} + +@article{SHEPP74, + author = {L. Shepp and B. Logan}, + title = {The Fourier Reconstruction of a Head Section}, + journal = {IEEE Transactions in Nuclear Science}, + volume = {NS-21}, + number = {6}, + pages = {21-43}, + year = {1974} +} + + diff --git a/doc/ctsim.hlp b/doc/ctsim.hlp new file mode 100644 index 0000000000000000000000000000000000000000..9d6c3e1d647fbef87d533a5b87aeea6a8c1070f0 GIT binary patch literal 31122 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 literal 0 HcmV?d00001 diff --git a/doc/ctsim.tex b/doc/ctsim.tex new file mode 100644 index 0000000..6b42f8d --- /dev/null +++ b/doc/ctsim.tex @@ -0,0 +1,104 @@ +\documentclass[11pt]{report}% +%\input{psbox.tex} +\usepackage{texhelp} +\usepackage{fancyheadings} +\usepackage{mysober} +\usepackage{mytitle} +\usepackage{verbatim} +\usepackage{makeidx} +\usepackage{times} +\usepackage{hyperref} + +\newcommand{\ctsim}{{\tt CTSim}} +\newcommand{\ctsimtext}{{\tt CTSimText}} +\newcommand{\usage}{{\bf Usage}{\par}} + +\newcommand{\commandref}[2]{\helpref{{\tt $\backslash$#1}}{#2}}% +\newcommand{\commandrefn}[2]{\helprefn{{\tt $\backslash$#1}}{#2}\index{#1}}% +\newcommand{\commandpageref}[2]{\latexignore{\helprefn{{\tt $\backslash$#1}}{#2}}\latexonly{{\tt $\backslash$#1} {\it page \pageref{#2}}}\index{#1}}% +\newcommand{\indexit}[1]{#1\index{#1}}% +\newcommand{\inioption}[1]{{\bf {\tt #1}}\index{#1}}% +\parskip=10pt% +\parindent=0pt% +%\backgroundcolour{255;255;255}\textcolour{0;0;0}% Has an effect in HTML only +\winhelpignore{\title{Manual for CTSim 3.0}% +\author{Kevin Rosenberg, M.D.}% +\date{January 2001}% +}% +\winhelponly{\title{Manual for CTSim 3.0}% +\author{by Kevin Rosenberg, M.D.\\$$\image{3cm;3cm}{logo-huge.bmp}$$}% +}% +\makeindex% +\begin{document}% +\maketitle% +\pagestyle{fancyplain}% +\bibliographystyle{plain}% +\pagenumbering{roman}% + +\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% +\tableofcontents% + +\chapter*{Copyright notice}% +\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +Copyright (c) 1983-2001 Kevin Rosenberg, M.D. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose is hereby granted without fee, provided that the +above copyright notice, author statement and this permission notice appear in +all copies of this software and related documentation. + +THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, +IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL KEVIN ROSENBERG BE LIABLE FOR ANY +SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY +OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +\chapter{Introduction}\label{introduction}% +\pagenumbering{arabic}% +\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\winhelponly{$$\image{3cm;3cm}{logo-huge}$$}% +\htmlonly{$$\image{3cm;3cm}{logo-huge.gif}$$}% +Computed Tomography is a technique for estimating the interior of an object +from measurement of radiation collected around the object. This radiation +can be either projected through or emitted from the object. +\rtfsp\ctsim simulates the process of projecting X-rays through a phantom object. +\rtfsp\ctsim can then reconstruct the interior of the object from the projections +collected around the phantom object. + +The \ctsim package has two executable files: the graphical \helprefn{ctsim}{ctsim} and text \helprefn{ctsimtext}{ctsimtext} programs. + +\include{ctsim-concepts} + +\include{ctsim-install} + +\include{ctsim-gui} + +\include{ctsim-textui} + +\include{ctsim-web} + +\newpage + +\bibliographystyle{plain} +\bibliography{ctsim} +\addcontentsline{toc}{chapter}{Bibliography} +\setheader{{\it REFERENCES}}{}{}{}{}{{\it REFERENCES}}% +\setfooter{\thepage}{}{}{}{}{\thepage}% + +\addcontentsline{toc}{chapter}{Index} +\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}} % +\setfooter{\thepage}{}{}{}{}{\thepage} % +\printindex % + +\end{document}% + diff --git a/doc/fancyhea.sty b/doc/fancyhea.sty new file mode 100644 index 0000000..83914fa --- /dev/null +++ b/doc/fancyhea.sty @@ -0,0 +1,145 @@ +% fancyheadings.sty version 1.92 +% Fancy headers and footers. +% Piet van Oostrum, Dept of Computer Science, University of Utrecht +% Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands +% Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!sun4nl!ruuinf!piet) +% Sep 16, 1994 +% version 1.4: Correction for use with \reversemargin +% Sep 29, 1994: +% version 1.5: Added the \iftopfloat, \ifbotfloat and \iffloatpage commands +% Oct 4, 1994: +% version 1.6: Reset single spacing in headers/footers for use with +% setspace.sty or doublespace.sty +% Oct 4, 1994: +% version 1.7: changed \let\@mkboth\markboth to +% \def\@mkboth{\protect\markboth} to make it more robust +% Dec 5, 1994: +% version 1.8: corrections for amsbook/amsart: define \@chapapp and (more +% importantly) use the \chapter/sectionmark definitions from ps@headings if +% they exist (which should be true for all standard classes). +% May 31, 1995: +% version 1.9: The proposed \renewcommand{\headrulewidth}{\iffloatpage... +% construction in the doc did not work properly with the fancyplain style. +% June 1, 1995: +% version 1.91: The definition of \@mkboth wasn't restored on subsequent +% \pagestyle{fancy}'s. +% June 1, 1995: +% version 1.92: The sequence \pagestyle{fancyplain} \pagestyle{plain} +% \pagestyle{fancy} would erroneously select the plain version. + +\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}} +\def\@xlhead[#1]#2{\gdef\@elhead{#1}\gdef\@olhead{#2}} +\def\@ylhead#1{\gdef\@elhead{#1}\gdef\@olhead{#1}} + +\def\chead{\@ifnextchar[{\@xchead}{\@ychead}} +\def\@xchead[#1]#2{\gdef\@echead{#1}\gdef\@ochead{#2}} +\def\@ychead#1{\gdef\@echead{#1}\gdef\@ochead{#1}} + +\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}} +\def\@xrhead[#1]#2{\gdef\@erhead{#1}\gdef\@orhead{#2}} +\def\@yrhead#1{\gdef\@erhead{#1}\gdef\@orhead{#1}} + +\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}} +\def\@xlfoot[#1]#2{\gdef\@elfoot{#1}\gdef\@olfoot{#2}} +\def\@ylfoot#1{\gdef\@elfoot{#1}\gdef\@olfoot{#1}} + +\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}} +\def\@xcfoot[#1]#2{\gdef\@ecfoot{#1}\gdef\@ocfoot{#2}} +\def\@ycfoot#1{\gdef\@ecfoot{#1}\gdef\@ocfoot{#1}} + +\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}} +\def\@xrfoot[#1]#2{\gdef\@erfoot{#1}\gdef\@orfoot{#2}} +\def\@yrfoot#1{\gdef\@erfoot{#1}\gdef\@orfoot{#1}} + +\newdimen\headrulewidth +\newdimen\footrulewidth +\newdimen\plainheadrulewidth +\newdimen\plainfootrulewidth +\newdimen\headwidth +\newif\if@fancyplain +\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi} + +% Command to reset various things in the headers: +% a.o. single spacing (taken from setspace.sty) +% and the catcode of ^^M (so that epsf files in the header work if a +% verbatim crosses a page boundary) +\def\fancy@reset{\restorecr + \def\baselinestretch{1}% + \ifx\undefined\@newbaseline% NFSS not present; 2.09 or 2e + \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi% + \else% NFSS (2.09) present + \@newbaseline% + \fi} + +% Initialization of the head and foot text. + +\headrulewidth 0.4pt +\footrulewidth\z@ +\plainheadrulewidth\z@ +\plainfootrulewidth\z@ + +\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}} +% i.e. empty on ``plain'' pages, \rightmark on even, \leftmark on odd pages +\chead{} +\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}} +% i.e. empty on ``plain'' pages, \leftmark on even, \rightmark on odd pages +\lfoot{} +\cfoot{\rm\thepage} % page number +\rfoot{} + +% Put together a header or footer given the left, center and +% right text, fillers at left and right and a rule. +% The \lap commands put the text into an hbox of zero size, +% so overlapping text does not generate an errormessage. + +\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\hbox +{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill +\parbox[b]{\headwidth}{\centering#3\strut}\hfill +\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5} + + +\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\footrule +\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill +\parbox[t]{\headwidth}{\centering#3\strut}\hfill +\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5} + +\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi +\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}} + +\def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi +\vskip-0.3\normalbaselineskip\vskip-\footrulewidth +\hrule\@width\headwidth\@height\footrulewidth\vskip0.3\normalbaselineskip}} + +\def\ps@fancy{% +\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook +\@ifundefined{chapter}{\def\sectionmark##1{\markboth +{\uppercase{\ifnum \c@secnumdepth>\z@ + \thesection\hskip 1em\relax \fi ##1}}{}}% +\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne + \thesubsection\hskip 1em\relax \fi ##1}}}% +{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} +\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}}}% +\csname ps@headings\endcsname % use \ps@headings defaults if they exist +\ps@@fancy +\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}% +\headwidth\textwidth} +\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy} +\def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy} +\def\ps@@fancy{% +\def\@mkboth{\protect\markboth}% +\def\@oddhead{\@fancyhead\@lodd\@olhead\@ochead\@orhead\@rodd}% +\def\@oddfoot{\@fancyfoot\@lodd\@olfoot\@ocfoot\@orfoot\@rodd}% +\def\@evenhead{\@fancyhead\@rodd\@elhead\@echead\@erhead\@lodd}% +\def\@evenfoot{\@fancyfoot\@rodd\@elfoot\@ecfoot\@erfoot\@lodd}% +} +\def\@lodd{\if@reversemargin\hss\else\relax\fi} +\def\@rodd{\if@reversemargin\relax\else\hss\fi} + +\let\latex@makecol\@makecol +\def\@makecol{\let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol} +\def\iftopfloat#1#2{\ifx\topfloat\empty #2\else #1\fi} +\def\ifbotfloat#1#2{\ifx\botfloat\empty #2\else #1\fi} +\def\iffloatpage#1#2{\if@fcolmade #1\else #2\fi} + diff --git a/doc/logo-huge.bmp b/doc/logo-huge.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a51df36e4b512364ee1cde4f7767a825f53486b1 GIT binary patch literal 67856 zcmeI5d2|-l-N&!BQmrqw)zZH9wD#E3bKdu~_Vl!;ww(8mipvqYsI^7KrFB82SPD@< zL|me5VKbtDEGnBQNJPRKWZ#kisRD*20g{k~tb~w22ua|1Kl2P3CNp>DnVIK#Ci4WJ zGlV;L?!9yG?>oPHf6HBNyX)ImT_%*@Z~6DX{F`>+-(}*z38}wpuNFf2*Y*n~?C)ev z4cEHWtH%x-#x-j2;Ct@6>rW3p7~y*0f&LFYq-G(nT1Z1(UBZ$fBt#ZlTbonSX6i-ebvU~)YM)NKYUH^-r|pc6wf>(UU)&2mWt|XapDBu zp~s87l)$xYnSyHX-d*pz?|Zl1HasO|i-MnvK)zm3F zri|J0e=GKgf&x)iCR$oN!sQU>)>hHbpuB72M)C5?qG!);-~Fz_q9aCBmX(FhpAR6O z!Nahrspa_b#?`A2jUK&a;>7I*hmS+H8yq4K^JM4Gi{;A|7VX}>>kog}t7p%Qg$tV+ z8Ulr6kT5JPJh5_R{?erfH*YTb;*0WzhO;WEGD4v%Vh)an0xK%SC!dHBBW}9omM8DK zZ}+ZU0YNet7@j(HcEyUkl z|F)wsJaOU--DYy~ru6iK($+VHLcQV&i08s#%fW-iwb%B0Z+)jvpWeNDcN9-{1cr5WXO=C?n=m2sz=3Kj z=(P9^q0nVMKoR9DkY+#l0G_0G-Me$AR(XE{{$hCeaP78j#dGHD{`AuW=gv8j(?5!m zx_)M-cYXf(t~cL2b=0W+Uw-KifV{;o4AB^nInfp9LLH)~(%^MJL5Rt_YHP*Nq2Idt z>hzEJ{`~mGAH(M6)|#5eRjUrAr{}qC5u7?aCUo_`kQFP$&wqY*j~*vVOWn5GZTk3Q zxM@?-#*KwXj?}uX8tIXAzVAQzWA#StJ(DNj*t_@2g$q5j-FcRHVpv<-n3|fEpRX8N zy#3Y$Tqt#d_TIhXnrrU9_14DIr@av&Vy?JhSXz2=`t+RK+{%bmut|`p9jO6ZWS!sr z?&${}2%S4;(^$`s;(%d&{aHr8wQG-@Jc)wt{nr=@{n9{;#Jz29{@N?A^t$b~)#>Tp zDPoZ`))>-%PMnx&WpuHqgghD!zAAA+lh%Cx{4QVnTK?X>@&Aa)oYJ61n!+OEpVQ|*B8dP6UKrwt_%`cYb1*DJ1= zHEEJp+8Fc22*bw4mc@(rRaC^xu|`2xCNxm?mB%Of>t8RMJ=+L}r~6o72y_5gT^&o= zIk$6T2*Q<>m)~(mzuvtY8>1b1qQ;Oebjp++{Ppw+S!T+x|BgGy(=%t_#(wwTZ%GAb z52C{`=3S^(>GwMaN)cPp*m%VqcPxAFJ+0v$0#RTXk1kYg0cO&n5nJDB5>!+uo$CGf zH#awX0FW$RF+>kU3XOResy2cF;(MJ2A}0+weOlan^Nf@fA2GxLgC2-C!rMC|=Gxu) zwEKuio;r0^j~>fE{x~9W%n97{A=Ay?cq21bdZ4*R#EgyD;!c^Myu8adzq$I8Poy-l ziFA)4Q<%7Hij49R+I`PX36YaV&7a?+M-R6Ibcta_#i{k{3*5fMRr)iXUNf`>^BXf~ zvZTiq#oS;>|2bnu4$_RPH@HoVX4si6G`0XL%McnHQ5w_d&2vsS#~8M@o}WB9J3l|} z3rJpw*vd|yVC~v2mtVd2lq5d3*NQ(>4-@xaMDf zeY4Ga2>asQJ`LOwC!awxzi!^VIkRTjlQ9y8Oic4jq`l0IxWr=`8*fiaYOq~T zZi^x8_rV8yTurUF|6=T)R(#cwNw@3xK23+NX=}-B$vQ(>`e6K(>c8fMLRry(;KP&-*FPghDKF`Y-(lck+y=jp90aRy4GT zvmw!{yIMk`fxXyT#EB?Mu5A=&;=Ey;o(|@4QPG_bK4|bswa4(xnHF}esH%$1x);Oe zVsqP0yI;Idtj-fzC0?$b$HboFV$)&qai)0j9r4s_7q9-K#iC4+mM!+yiku3OUFxO$ ztYWeDNXNqXok^3b^7Hk?Y>#1W?HQlNQR-sU?#FKz#dS{m7Q>g?dRDAoBSt2RA}+3E3hIKX zyWPeKsac|+)-{n>FTHlH7&1iJ*L2=I@$S2Vy=IGxFJ5f2wq=W$K3%;3zIg00F?X)W z&lk$K#ef0g)G52f=5jh5L%zG;|9*|mH>|_3zP@Sv_-$;0XP|Ms zZ<7sla*H9G#s1+BV!{O18w#@skX?y~4NEW#A=iiz&prC6hKmlv%*^5i3u3%fTzijI zpvmkrbcJDFo_PIrF=dLNFExA%PHx!(IyqUaT&Zxclk}wNa6Y6CWo6xd_OsdwoOQ~t z4MUuS>?Px~TFCn)+afy0aQk-g^wT0M%PIM#D6xn8v(JjrqeWAbqjG|PAq`1N+PHXe z7(xw0JWVMnTYXjwslrCH&(I-;?A_D7yLjUbr?i&>s79_|FP?l-%$%7>7%p8pYsQTB z81CI$!H!&NoS%Q0Dq^IZ6AbI>#H+8eai}q`RvLl}BIu`|ie0V$(No{`nwgwVFdRQ#kt)r3wHOdiN)k^z zA%5}`al;Mb#v7GAf9-qAg$tEa7mgpdD>gV79zWh|@ZhF;WeI)Tc$k${f`acehApAc z;~LeqfIWui&M6%Ax4(((Y&&9a+9ck2N9i6x8?^BR+tFBBrjy8zJ`&TWDP1%c zgCj>QUl9;Kq(ze_Ki;QL%h|KxzO0| z7SVIhiH9Dt92J9uVNDIEjd5;V7{hok&z622MxUWZT`LT+f+B4`^;Bd-_0gkZ;zUK7 zL4VhZbrPU_@}gw?>Q{n+SDGa_7*&5(Q#o`CD>%n|X^$cX7;HfvnHF^f5l3n}4-ST>PhZ)y=Q_-V z3WiwOjvVoCDyjNiJYhvqD-1yfp^>h`DkJe9ekjt@FDAgdG`j-L_3|-~{mm4jfRFk_8JC=b<^J8p9BZ8)Mu!@!Q|Z(*z2` zp+iTZX>|;SScKY5g3?n|iXr0SBaeu}LOET@4ueUh5Of6L0lNZGp zh&SqA|58kKoMfr5m>LcghDAm9Jp6D6VTg8rrI|cxj1)si``5n;=2J*>F-W3zNX?;N zetF^OQo2wTOiDob95l#MYF)QZ`Cc%YW41BBE>IX&R{pV1AHmmKk6h|!Uuvn{+hEAS zy%?>TLt!Q=F^rS@_DLRrJibA=Zs$&cuS&y^EI2BV=%l5ok;pVJy(CExC=AQXIfPs= zljulX_wF)(9mYve20}{taQ}Ww8z~(uD!J4VkDhVstzyp}McUN&rM!{!*utf(tJY`H zBJs*A5)mqh7{2*tme0zeaT1gh3`dPpWD!G3^%emIc}4n&K@xT3z4sJG#g|xF*)AET zQT$EPj6}k>V93lkLxLb;$U4J<0$-QMBpaw=xRvrD-5Q;nAtkr?iC{LQR`VlbFbMSO zC0=_?Nx*n$NJjVj{PXgRdylp10XVhrX} zlobr5((D)n5~eSmIWs3Ok12va{UUF+F6~R1TL0#o5-}3iLQ9Z>fCh-3jz)rHgRvaB zhv5;%)3YLqA|*&|+psqn8pI%86vV!ijT1Pa!Y2enp+8IMt&fyq2;uL)-^fMeN==np zQ&@6w&piSK|A7Y-?}h3)Msufk1vl+=6pNPvl?k9aN5CB87*g*&To8MeeIGFzpXsRBF1bgkZ#sLuZpD|NktQy9xFP+98 zC=BcBdh(I_YA;2*kGw6S6hmYe`ci|D6TyG#R3rJ(=;=aXJcA~oB7)nhAHJ^c6537$UDSx?(<^Ge_=+V)i~(9H}KP zP#6vzI9Bl=`nFnz1>(Py($x?t#Ss2M$iUoYQ0EvA^*tUsA#-9hACsYE^%k=o2cLiO zga*UK+)a7RE&Ob6gng#4%2S*(=qfVt6?VG*vtpu1ECzoUZxG0^AZy%4Ey#^ zP8t-R69s_rRuLok4E5Bq!jLq~IE2j%0w*#J6DVLpl|NxiX&T>6?a@!M9wJvzJXd+w>B8k4fgM^?3ZAbmw1Lp zslKOX!OsDY*?`PoNRMr0fTNJWV0dlmiRVYI2DLDTthC_x3O1*SAB?$9vF9;`Mnq6k?0Q4_6(^$T-r5 zA^-2%RTir=(WM^(eqT$<86MeVn47Br$iQe&GW3PuFl1EJ$Eaa=4As%9lOzp7FVe4c zT8CCz2Vsb91kDUGYQIS-+gN15ZI}=FKi=yP-`8jmF<_4&H~=7&MsBn!3M&iCGDx7Y z6AXq)j>y@wEpx%5=%36%4HAam2)kRyghJICcHsaEoLJ_>ywdg<*45#kjmr;#CbGLi z1H>Lfk}*pHQyQi>w0OSWY9y&KtO?cylpU~z8#ex4#ado7cH%i zAu@Itb`6hpvqK>dOU~HDgsn{4W60gxZ|^v8Aod4yF&GXrkiq`eA%+x!lN}gQ@bUN_ zKI{kq{j2#3@H8@|3e%{5wUj=MIUEZNyM;o@;aywZa)X*4foAO3tvD-87^)8am^(1& z9Gq(RD#4s%NP4t&x>JP7&6^c3l8pgIj|LJ9(@jwY(Nqv(>;+MMM#52Gh-x=7++jvJ z71V%KTVD#I26VlBBIaC-(2;$HdOEqnkc@~m2%m^J1W*ou)I2FvD<4xDDY1DoQ6E_c z*OhY)R10yBAws4>wKG%6Rg9s>)L}?5`d-#msWypU(CFtd;1)xQRrj-i6_G#b7#Sf^ zCJ zv0%Q)-Y#->xJFN{|Bh1oJ!n;f3g$2?)y^9kwOqS*mm79vYmXt)>84FZTJq=v2sEzG zh8?{{Y&@cDCG74xAxch(vPSWFp?GV)cy6Q^JW>o9eeoJRN+i9e#DBI+9IY3nr$u3% z%U6V}v@B2A)m`>IGTfOBD$&!>Py%Wptfr4_k0C?ihaY~)`4;*l(S#9b_%5X_wv60V zBqnW9v_x;$$PfZWnABfBs^Nz7y6D zu&FTY`|#rkwPni=HZ(xji@)|55?@=}$oUrf?)GA0_aWB;ja$GwF1^ZivDd|HiM(o6 zK9?bh2}7Q9zD2AQ#pI5ou_d2JS0z-t*b12jK8I?89M7j5uDxPKo>_sHVMskV0~q-y$_in(yD~vgGUKMkfL^~S z3@T9)P@kRA&FXM%3k(|?nxj9g#OWlc;NgsFhyMT}6Kj1yetY&*Y}imJt&9bR%*$Yp z{b-Ihbt>RI)--#{%lxOI~HL*>6dCJCBKtM zbV7j8ycFgv))!Sh{zyRMNs-2!VuEHE|Z{H!>VhDPe-mJP| z`-=1p9){|0M+cEWzow?vh=PeNhO~9xzAE$#53I1D%F9pX z41W*++4bz|_wmbLj3ISIOTl;( zv9gE}=wLSeUNnz@j`BTB$c$L+;3PnTM3iZ6Zgp5CHyBbRJ@o$l5&WLXaR3ni!DE3p zs5m6KeKLITGiKztGLN~$u(|o%nl*<{p0t$Lc@Qhj5Zq8u`UK2>V2?obPtnHRE_`u` zA$7z6XS1&q%VVyLnhy~&VP^b3mY+)Wv^L#*mV8t0hS)F=L0J z1`bvnw%9PNk<*@D%7OIsgA*rade#H2NEZhTdDX##H5nO)_U;YNRClZP`xK9tfb;EE ztvXa+k9#%7zxZHCCD{arm2#hcdf@C?r+%;)H!U#5<>ppSpPm!H!|mdRp-MsKx2C1- zk8SrK7;GF>giX}md^0=d{ipujamJ8W;SifMXE*yY+ISuHHR?2BrsmRrVup!#i{g(V zEns#XW>uCK)2w(mC>>t$#RhH8V52H0#2wF)FZ|GeDKgNkh^O7Fl?Jb=dh z`6WvZV0W=e?Ej;HVW<)S$pHKQx^+j!jM;(&i&oiDeQZ%t-FxqSo|3Xn-I{<}MO;bt z6^14Xu!IXQ2;D4HWCAosEA&kM#)FoOY+Cu4m)Ithbr0~K&$@z%1`#3x$%p1T!-t0s z)gT0BW)|}|E9)pSZE7l9x|3e6pr96pG3T<6VPqp?LBVk(DvILB58%qmQp+#G=@O8h z+`bh&O%M#t?WnJBg8bnV<94Q|ZiivQSEl+`!#0c(KxtShtkrg9hcj*kLyGe76_{() wAu$Pyp_y96#V0vCN4;1SGIQpCrcK+y);w)j7NSy75gdCVjk$ybjS>9*AAWt#xc~qF literal 0 HcmV?d00001 diff --git a/doc/logo-huge.gif b/doc/logo-huge.gif new file mode 100644 index 0000000000000000000000000000000000000000..aee56d23e050212348d1698b7f4a400b516eefe4 GIT binary patch literal 4687 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 Vl`CPD1Y6SoQ literal 0 HcmV?d00001 diff --git a/doc/make-help b/doc/make-help new file mode 100644 index 0000000..1ad3b6b --- /dev/null +++ b/doc/make-help @@ -0,0 +1,12 @@ +rm -f ctsim.rtf ctsim.cnt +tex2rtf ctsim.tex ctsim.rtf -winhelp +hcw /c /m /e ctsim.hpj +mv CTSIM.HLP ctsim.hlp +cp ctsim.hlp ctsim.cnt ../../msvc/ctsim/ +rm -f ctsim*.html ctsim.hhp ctsim.hhc ctsim.hhk +tex2rtf ctsim.tex ctsim.html -html +zip ctsim.zip *.html *.gif ctsim.hhp ctsim.hhc ctsim.hhk +mv ctsim.zip ctsim.htb +cp ctsim.htb ../../msvc/ctsim + + diff --git a/doc/makeidx.sty b/doc/makeidx.sty new file mode 100644 index 0000000..4fbb9ae --- /dev/null +++ b/doc/makeidx.sty @@ -0,0 +1,11 @@ +% makeidx.sty 20-Jan-87 modified for international usage +% +% Modified by J.Schrod (TeXsys). +% according to the suggestion of H.Partl (TU Wien) in german.sty +% to make caption names adaptable to other languages. + +\@ifundefined{seeterm}{\def\seeterm{see}}{} % <----------- + +\def\see#1#2{{\em \seeterm\/} #1} +\def\printindex{\@input{\jobname.ind}} + diff --git a/doc/mysober.sty b/doc/mysober.sty new file mode 100644 index 0000000..a6f73a6 --- /dev/null +++ b/doc/mysober.sty @@ -0,0 +1,154 @@ +% SOBER.STY van Nico Poppelier +% Adapted by Julian Smart for his own +% nefarious purposes +% -------------------------------------- +% Koppen van secties, subsecties, ... +% -------------------------------------- +% +% -------------------------------------- +% fontgrootte en regelafstand +% (met de notatie X/Y wordt bedoeld +% 'letter X op regelafstand Y') +% -------------------------------------- +% +% 10pt 11pt 12pt +% \scriptsize 7/ 8 8/ 9.5 8/ 9.5 +% \tiny 5/ 6 6/ 7 6/ 7 +% \small 9/11 10/12 11/13.6 +% \footnotesize 8/ 9.5 9/11 10/12 +% \@normalsize 10/12 11/13.6 12/15 +% \large 12/14 12/14 14/18 +% \Large 14/18 14/18 17/22 +% \LARGE 17/22 17/22 20/25 +% \huge 20/25 20/25 25/30 +% \Huge 25/30 25/30 25/30 +% +% de syntax van \@startsection is: +% \@startsection +% {Name}{Level}{Indent}{Before_skip}{After_Skip}{Type_face} +% Indent : inspring van kop vanaf linkermarge +% Before_skip: wit boven kopje +% (< 0 geeft aan dat eerste alinea niet inspringt) +% After_skip : wit onder kopje indien >= 0 +% horizontaal wit na kopje, +% met kopje op de regel indien < 0 +% +% notatie voor : ()() +% +% in LaTeX's standaard-stijlen (onafhankelijk van \@ptsize): +% +% Indent Before_skip After_skip Type_face +% section 0 -3.5ex (-1ex)(-0.2ex) 2.3ex(0.2ex) \Large\bf +% subsection 0 -3.25ex(-1ex)(-0.2ex) 1.5ex(0.2ex) \large\bf +% subsubsection 0 -3.25ex(-1ex)(-0.2ex) 1.5ex(0.2ex) \normalsize\bf +% paragraph 0 3.25ex( 1ex)( 0.2ex) -1em()() \normalsize\bf +% subparagraph \parindent 3.25ex( 1ex)( 0.2ex) -1em()() \normalsize\bf +% +% +% in een soberder uitvoering (onafhankelijk van \@ptsize): +% +\def\section{\@startsection{section}{1} +%{\z@}{-2.5ex plus -0.5ex minus -0.1ex}{0.5ex plus 0.1ex}{\large\bf}} +{\z@}{-2.5ex plus -0.5ex minus -0.1ex}{0.5ex plus 0.1ex}{\large\bf}} +\def\subsection{\@startsection{subsection}{2} +{\z@}{-2.25ex plus -0.3ex minus -0.2ex}{0.05ex plus 0.05ex}{\normalsize\bf}} +\def\subsubsection{\@startsection{subsubsection}{3} +{\z@}{-2.25ex plus -0.3ex minus -0.2ex}{0.05ex plus 0.05ex}{\normalsize\sc}} +\def\paragraph{\@startsection{paragraph}{4} +{\z@}{2ex plus 0.5ex minus 0.1ex}{-0.7em}{\normalsize\it}} +\def\subparagraph{\@startsection{subparagraph}{4} +{\parindent}{2ex plus 0.5ex minus 0.1ex}{-0.7em}{\normalsize\it}} +% +% -------------------------------------- +% Hoofdstuk-koppen +% -------------------------------------- +% +% LaTeX's book style (standaard documentstijl) definieert +% de hoofdstuk-koppen onafhankelijk van \@ptsize +% + +\def\@makechapterhead#1{\vspace*{20pt}% +% Next line repaired by Piet van Oostrum - June 14, 1991. +%{\parindent 0pt\Large\bf \ifnum\c@secnumdepth>\m@ne\thechapter \fi +{\parindent 0pt\LARGE\bf \ifnum\c@secnumdepth>\m@ne\thechapter. \hskip 1em \fi% +{\raggedright\LARGE\bf #1}\\\rule[10pt]{\textwidth}{0.3mm}\par\nobreak \vskip25pt} } + +\def\@makeschapterhead#1{ + \vspace*{20pt} { \parindent 0pt \raggedright + \LARGE\bf#1\par\nobreak\vskip25pt } } +% +% -------------------------------------- +% List-omgevingen (itemize en enumerate) +% -------------------------------------- +% +% De volgende parameters zijn relevant in een list-omgeving: +% +% \labelsep : afstand tussen label en item +% \labelwidth : breedte van label +% \leftmargin : afstand tussen linkermarge en item +% \rightmargin : afstand tussen item en rechtermarge +% \listparindent: indentatie voor vervolg-alinea's in item +% \parsep : verticaal wit tussen vervolg-alinea's in item +% \itemsep : verticaal wit tussen opeenvolgende item's +% \topsep, +% \partopsep : wit boven item 1 = \topsep + \parskip +% (geen alinea-overgang boven lijst) +% wit boven item 1 = \topsep + \parskip + \partopsep +% (alinea-overgang boven lijst) +% +% zie verder LaTeX-boek 5.7.1 en C.5.3 +% -------------------------------------- +% +% De parameters voor niveau 1 worden gedefinieerd op top-niveau en +% \@listi definieert uitsluitend \leftmargin +% +% size = small (9pt, 10pt, 11pt) +\def\@listi{\topsep 0.4ex \parsep 0pt \itemsep \parsep} +% \topsep 4pt(2pt)(2pt) 6pt(2pt)(2pt) 9pt(3pt)(5pt) +% \parsep 2pt(1pt)(1pt) 3pt(2pt)(1pt) 4.5pt(2pt)(1pt) +% +% size = footnotesize (8pt, 9pt, 10pt) +\def\@listi{\topsep 0.4ex \parsep 0pt \itemsep \parsep} +% \topsep 3pt(1pt)(1pt) 4pt(2pt)(2pt) 6pt(2pt)(2pt) +% \parsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 3pt(2pt)(1pt) +% +% size = normalsize (and bigger) +% \parskip 0pt(1pt) 0pt(1pt) 0pt(1pt) +% \parindent 15pt 17pt 1.5em +% \topsep 8pt(2pt)(4pt) 9pt(3pt)(5pt) 10pt(4pt)(6pt) +% \partopsep 2pt(1pt)(1pt) 3pt(1pt)(2pt) 3pt(2pt)(2pt) +% \itemsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt +% \parsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt) +\topsep 0.4ex \partopsep 0pt \itemsep 0pt \parsep 0pt +% +% \leftmargini 2.5em \leftmarginii 2.2em \leftmarginiii 1.87em +% \leftmarginiv 1.7em \leftmarginv 1.0em \leftmarginvi 1.0em +% +% \leftmargin\leftmargini +% \labelwidth\leftmargini\advance\labelwidth-\labelsep +% \labelsep 0.5em +% +% \def\@listi{\leftmargin\leftmargini} +% +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth-\labelsep +% \topsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt) +% \parsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 2.5pt(1pt)(1pt) + \topsep 0pt \parsep 0pt \itemsep \parsep} +% +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep +% \topsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 2.5pt(1pt)(1pt) +% \partopsep 1pt(0pt)(1pt) 1pt(0pt)(1pt) 1pt(0pt)(1pt) + \parsep \z@ \topsep 0pt \partopsep 0pt \itemsep \topsep} +% +% \def\@listiv{\leftmargin\leftmarginiv +% \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} +% +% \def\@listv{ \leftmargin\leftmarginv +% \labelwidth\leftmarginv\advance\labelwidth-\labelsep} +% +% \def\@listvi{\leftmargin\leftmarginvi +% \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} + + diff --git a/doc/mytitle.sty b/doc/mytitle.sty new file mode 100644 index 0000000..4d5652c --- /dev/null +++ b/doc/mytitle.sty @@ -0,0 +1,30 @@ +% mytitle.sty + +\def\maketitle{\begin{titlepage} +\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{0} +%\null +%\vfil +\vspace*{2cm}\begin{flushleft} +{\huge \sf\@title\\\rule{\textwidth}{0.5mm}} \vskip 3em {\large \lineskip .75em +{\sf\@author} +\par} +\vskip 1.5em {\large\sf \@date \par} \end{flushleft} \par +\@thanks +\vfill +{\sf\small\begin{flushright}% +Heart Hospital of New Mexico\\ +Albuquerque, New Mexico\\ +Tel. 1-505-724-2378 +\end{flushright}} +\null +\end{titlepage} +\setcounter{footnote}{0} \let\thanks\relax +\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\maketitle\relax} +\def\abstractname{Abstract} % <---------- +\def\abstract{\titlepage +\null\vfil +\begin{center} +{\bf \abstractname} % <---------- +% {\bf Abstract} +\end{center}} +\def\endabstract{\par\vfil\null\endtitlepage} diff --git a/doc/psbox.tex b/doc/psbox.tex new file mode 100644 index 0000000..b7438f4 --- /dev/null +++ b/doc/psbox.tex @@ -0,0 +1,520 @@ +% +% %%%%%%% %%%%% %%%%%% %%%%% % % +% % % % % % % % % % +% % % % % % % % % % +% %%%%%%% %%%%% %%%%%% % % % +% % % % % % % % % +% % % % % % % % % +% % %%%%%% %%%%%% %%%%% % % +% +% By Jean Orloff +% Comments & suggestions by e-mail: ORLOFF@surya11.cern.ch +% No modification of this file allowed if not e-sent to me. +% +% A simple way to measure the size of encapsulated postscript figures +% from inside TeX, and to use it for automatically formatting texts +% with inserted figures. Works both under Plain TeX-based macros +% (Phyzzx, Harvmac, Psizzl, ...) and LaTeX environment. +% Provides exactly the same result on any PostScript printer provided +% the single instruction \psfor... is changed to fit the needs of the +% particular dvi->ps translator used. +% History: +% 1.31: adds \psforDVIALW(?) +% 1.30: adds \splitfile & \joinfiles for multi-file management +% 1.24: fix error handling & add \psonlyboxes +% 1.23: adds \putsp@ce for OzTeX fix +% 1.22: makes \drawingBox \global for use in Phyzzx +% 1.21: accepts %%BoundingBox: (atend) +% 1.20: tries to add \psfordvitps for the TeXPS package. +% 1.10: adds \psforoztex, error handling... +%2345678 1 2345678 2 2345678 3 2345678 4 2345678 5 2345678 6 2345678 7 23456789 +% +\def\temp{1.31} +\let\tempp=\relax +\expandafter\ifx\csname psboxversion\endcsname\relax + \message{version: \temp} +\else + \ifdim\temp cm>\psboxversion cm + \message{version: \temp} + \else + \message{psbox(\psboxversion) is already loaded: I won't load + psbox(\temp)!} + \let\temp=\psboxversion + \let\tempp=\endinput + \fi +\fi +\tempp +\let\psboxversion=\temp +\catcode`\@=11 +% Every macro likes a little privacy... +% +% Some common defs +% +\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution +\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex +\def\executeinspecs#1{% +\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}} +% +%Trying to tame the variety of \special commands for Postscript: the +% universal internal command \PSspeci@l##1##2 takes ##1 to be the +% filename and ##2 to be the integer scale factor*1000 (as for usual +% TeX \scale commands) +% +\def\psfortextures{% For TeXtures on the Macintosh +%----------------- +\def\PSspeci@l##1##2{% +\special{illustration ##1\space scaled ##2}% +}} +% +\def\psfordvitops{% For the DVItoPS converter on IBM mainframes +%---------------- +\def\PSspeci@l##1##2{% +\special{dvitops: import ##1\space \the\drawingwd \the\drawinght}% +}} +% +\def\psfordvips{% For DVIPS converter on VAX, UNIX and PC's +%-------------- +\def\PSspeci@l##1##2{% +% \special{/@scaleunit 1000 def}% never read dox without trying! +\d@my=0.1bp \d@mx=\drawingwd \divide\d@mx by\d@my% +\special{PSfile=##1\space llx=\psllx\space lly=\pslly\space% +urx=\psurx\space ury=\psury\space rwi=\number\d@mx}% +}} +% +\def\psforoztex{% For the OzTeX shareware on the Macintosh +%-------------- +\def\PSspeci@l##1##2{% +\special{##1 \space + ##2 1000 div dup scale + \putsp@ce{\number-\psllx} \putsp@ce{\number-\pslly} translate +}% +}} +\def\putsp@ce#1{#1 } +% +\def\psfordvitps{% From the UNIX TeXPS package, vers.>3.12 +%--------------- +% Convert a dimension into the number \psn@sp (in scaled points) +\def\psdimt@n@sp##1{\d@mx=##1\relax\edef\psn@sp{\number\d@mx}} +\def\PSspeci@l##1##2{% +% psfig.psr contains the def of "startTexFig": if you can locate it +% and include the correct pathname, it should work +\special{dvitps: Include0 "psfig.psr"}% contains def of "startTexFig" +\psdimt@n@sp{\drawingwd} +\special{dvitps: Literal "\psn@sp\space"} +\psdimt@n@sp{\drawinght} +\special{dvitps: Literal "\psn@sp\space"} +\psdimt@n@sp{\psllx bp} +\special{dvitps: Literal "\psn@sp\space"} +\psdimt@n@sp{\pslly bp} +\special{dvitps: Literal "\psn@sp\space"} +\psdimt@n@sp{\psurx bp} +\special{dvitps: Literal "\psn@sp\space"} +\psdimt@n@sp{\psury bp} +\special{dvitps: Literal "\psn@sp\space startTexFig\space"} +\special{dvitps: Include1 "##1"} +\special{dvitps: Literal "endTexFig\space"} +}} +\def\psforDVIALW{% Try for dvialw, a UNIX public domain +%--------------- +\def\PSspeci@l##1##2{ +\special{language "PS" +literal "##2 1000 div dup scale" +include "##1"}}} +\def\psonlyboxes{% Draft-like behaviour if none of the others works +%--------------- +\def\PSspeci@l##1##2{% +\at(0cm;0cm){\boxit{\vbox to\drawinght + {\vss + \hbox to\drawingwd{\at(0cm;0cm){\hbox{(##1)}}\hss} + }}} +}% +} +% +\def\psloc@lerr#1{% +\let\savedPSspeci@l=\PSspeci@l% +\def\PSspeci@l##1##2{% +\at(0cm;0cm){\boxit{\vbox to\drawinght + {\vss + \hbox to\drawingwd{\at(0cm;0cm){\hbox{(##1) #1}}\hss} + }}} +\let\PSspeci@l=\savedPSspeci@l% restore normal output for other figs! +}% +} +% +%\def\psfor... add your own! +% +% \ReadPSize{PSfilename} reads the dimensions of a PostScript drawing +% and stores it in \drawinght(wd) +\newread\pst@mpin +\newdimen\drawinght\newdimen\drawingwd +\newdimen\psxoffset\newdimen\psyoffset +\newbox\drawingBox +\newif\ifNotB@undingBox +\newhelp\PShelp{Proceed: you'll have a 5cm square blank box instead of +your graphics (Jean Orloff).} +\def\@mpty{} +\def\s@tsize#1 #2 #3 #4\@ndsize{ + \def\psllx{#1}\def\pslly{#2}% + \def\psurx{#3}\def\psury{#4}% needed by a crazyness of dvips! + \ifx\psurx\@mpty\NotB@undingBoxtrue% this is not a valid one! + \else + \drawinght=#4bp\advance\drawinght by-#2bp + \drawingwd=#3bp\advance\drawingwd by-#1bp +% !Units related by crazy factors as bp/pt=72.27/72 should be BANNED! + \fi + } +\def\sc@nline#1:#2\@ndline{\edef\p@rameter{#1}\edef\v@lue{#2}} +\def\g@bblefirstblank#1#2:{\ifx#1 \else#1\fi#2} +\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex +\def\execute#1{#1}% Seems stupid, but cs are identified BEFORE execution +{\catcode`\%=12 +\xdef\B@undingBox{%%BoundingBox} +} %% is not a true comment in PostScript, even if % is! +\def\ReadPSize#1{ + \edef\PSfilename{#1} + \openin\pst@mpin=#1\relax + \ifeof\pst@mpin \errhelp=\PShelp + \errmessage{I haven't found your postscript file (\PSfilename)} + \psloc@lerr{was not found} + \s@tsize 0 0 142 142\@ndsize + \closein\pst@mpin + \else + \immediate\write\psbj@inaux{#1,} + \loop + \executeinspecs{\catcode`\ =10\global\read\pst@mpin to\n@xtline} + \ifeof\pst@mpin + \errhelp=\PShelp + \errmessage{(\PSfilename) is not an Encapsulated PostScript File: + I could not find any \B@undingBox: line.} + \edef\v@lue{0 0 142 142:} + \psloc@lerr{is not an EPSFile} + \NotB@undingBoxfalse + \else + \expandafter\sc@nline\n@xtline:\@ndline + \ifx\p@rameter\B@undingBox\NotB@undingBoxfalse + \edef\t@mp{% + \expandafter\g@bblefirstblank\v@lue\space\space\space} + \expandafter\s@tsize\t@mp\@ndsize + \else\NotB@undingBoxtrue + \fi + \fi + \ifNotB@undingBox\repeat + \closein\pst@mpin + \fi +\message{#1} +} +% +% \psboxto(xdim;ydim){psfilename}: you specify the dimensions and +% TeX uniformly scales to fit the largest one. If xdim=0pt, the +% scale is fully determined by ydim and vice versa. +% Notice: psboxes are a real vboxes; couldn't take hbox otherwise all +% indentation and all cr's would be interpreted as spaces (hugh!). +% +\newcount\xscale \newcount\yscale \newdimen\pscm\pscm=1cm +\newdimen\d@mx \newdimen\d@my +\let\ps@nnotation=\relax +\def\psboxto(#1;#2)#3{\vbox{ + \ReadPSize{#3} + \divide\drawingwd by 1000 + \divide\drawinght by 1000 + \d@mx=#1 + \ifdim\d@mx=0pt\xscale=1000 + \else \xscale=\d@mx \divide \xscale by \drawingwd\fi + \d@my=#2 + \ifdim\d@my=0pt\yscale=1000 + \else \yscale=\d@my \divide \yscale by \drawinght\fi + \ifnum\yscale=1000 + \else\ifnum\xscale=1000\xscale=\yscale + \else\ifnum\yscale<\xscale\xscale=\yscale\fi + \fi + \fi + \divide \psxoffset by 1000\multiply\psxoffset by \xscale + \divide \psyoffset by 1000\multiply\psyoffset by \xscale + \global\divide\pscm by 1000 + \global\multiply\pscm by\xscale + \multiply\drawingwd by\xscale \multiply\drawinght by\xscale + \ifdim\d@mx=0pt\d@mx=\drawingwd\fi + \ifdim\d@my=0pt\d@my=\drawinght\fi + \message{scaled \the\xscale} + \hbox to\d@mx{\hss\vbox to\d@my{\vss + \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{ + \kern-\psyoffset + \PSspeci@l{\PSfilename}{\the\xscale} + \vss}\hss\ps@nnotation} + \global\ht\drawingBox=\the\drawinght + \global\wd\drawingBox=\the\drawingwd + \baselineskip=0pt + \copy\drawingBox + \vss}\hss} + \global\psxoffset=0pt + \global\psyoffset=0pt% These are local to one figure + \global\pscm=1cm + \global\drawingwd=\drawingwd + \global\drawinght=\drawinght +}} +% +% \psboxscaled{scalefactor*1000}{PSfilename} allows to bypass the +% rounding errors of TeX integer divisions for situations where the +% TeX box should fit the original BoundingBox with a precision better +% than 1/1000. +% +\def\psboxscaled#1#2{\vbox{ + \ReadPSize{#2} + \xscale=#1 + \message{scaled \the\xscale} + \divide\drawingwd by 1000\multiply\drawingwd by\xscale + \divide\drawinght by 1000\multiply\drawinght by\xscale + \divide \psxoffset by 1000\multiply\psxoffset by \xscale + \divide \psyoffset by 1000\multiply\psyoffset by \xscale + \global\divide\pscm by 1000 + \global\multiply\pscm by\xscale + \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{ + \kern-\psyoffset + \PSspeci@l{\PSfilename}{\the\xscale} + \vss}\hss\ps@nnotation} + \global\ht\drawingBox=\the\drawinght + \global\wd\drawingBox=\the\drawingwd + \baselineskip=0pt + \copy\drawingBox + \global\psxoffset=0pt + \global\psyoffset=0pt% These are local to one figure + \global\pscm=1cm + \global\drawingwd=\drawingwd + \global\drawinght=\drawinght +}} +% +% \psbox{PSfilename} makes a TeX box having the minimal size to +% enclose the picture +\def\psbox#1{\psboxscaled{1000}{#1}} +% +% +% \joinfiles file1, file2, ...n \into joinedfilename . +% makes one file out of many +% \splitfile joinedfilename +% the opposite +% +%\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution +%\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex +%\def\executeinspecs#1{% +%\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}} +%\newread\pst@mpin +\newif\ifn@teof\n@teoftrue +\newif\ifc@ntrolline +\newif\ifmatch +\newread\j@insplitin +\newwrite\j@insplitout +\newwrite\psbj@inaux +\immediate\openout\psbj@inaux=psbjoin.aux +\immediate\write\psbj@inaux{\string\joinfiles} +\immediate\write\psbj@inaux{\jobname,} +% +% We redefine input to keep track of the various files inputted +% +\immediate\let\oldinput=\input +\def\input#1 { + \immediate\write\psbj@inaux{#1,} + \oldinput #1 } +\def\empty{} +\def\setmatchif#1\contains#2{ + \def\match##1#2##2\endmatch{ + \def\tmp{##2} + \ifx\empty\tmp + \matchfalse + \else + \matchtrue + \fi} + \match#1#2\endmatch} +\def\warnopenout#1#2{ + \setmatchif{TrashMe,psbjoin.aux,psbjoin.all}\contains{#2} + \ifmatch + \else + \immediate\openin\pst@mpin=#2 + \ifeof\pst@mpin + \else + \errhelp{If the content of this file is so precious to you, abort (ie +press x or e) and rename it before retrying.} + \errmessage{I'm just about to replace your file named #2} + \fi + \immediate\closein\pst@mpin + \fi + \message{#2} + \immediate\openout#1=#2} +% No comments allowed below: % will have an unusual catcode +{ +\catcode`\%=12 +\gdef\splitfile#1 { + \immediate\openin\j@insplitin=#1 + \message{Splitting file #1 into:} + \warnopenout\j@insplitout{TrashMe} + \loop + \ifeof + \j@insplitin\immediate\closein\j@insplitin\n@teoffalse + \else + \n@teoftrue + \executeinspecs{\global\read\j@insplitin to\spl@tinline\expandafter + \ch@ckbeginnewfile\spl@tinline%Beginning-Of-File-Named:%\endcheck} + \ifc@ntrolline + \else + \toks0=\expandafter{\spl@tinline} + \immediate\write\j@insplitout{\the\toks0} + \fi + \fi + \ifn@teof\repeat + \immediate\closeout\j@insplitout} +\gdef\ch@ckbeginnewfile#1%Beginning-Of-File-Named:#2%#3\endcheck{ + \def\t@mp{#1} + \ifx\empty\t@mp + \def\t@mp{#3} + \ifx\empty\t@mp + \global\c@ntrollinefalse + \else + \immediate\closeout\j@insplitout + \warnopenout\j@insplitout{#2} + \global\c@ntrollinetrue + \fi + \else + \global\c@ntrollinefalse + \fi} +\gdef\joinfiles#1\into#2 { + \message{Joining following files into} + \warnopenout\j@insplitout{#2} + \message{:} + { + \edef\w@##1{\immediate\write\j@insplitout{##1}} + \w@{% This text was produced with psbox's \string\joinfiles.} + \w@{% To decompose and tex it:} + \w@{%-save this with a filename CONTAINING ONLY LETTERS, and no extensions} + \w@{% (say, JOINTFIL), in some uncrowded directory;} + \w@{%-make sure you can \string\input\space psbox.tex (version>=1.3);} + \w@{%-tex JOINTFIL using Plain, or LaTeX, or whatever is needed by} + \w@{% the first part in the joining (after splitting JOINTFIL into} + \w@{% it's constituents, TeX will try to process it as it stands).} + \w@{\string\input\space psbox.tex} + \w@{\string\splitfile{\string\jobname}} + } + \tre@tfilelist#1, \endtre@t + \immediate\closeout\j@insplitout} +\gdef\tre@tfilelist#1, #2\endtre@t{ + \def\t@mp{#1} + \ifx\empty\t@mp + \else + \llj@in{#1} + \tre@tfilelist#2, \endtre@t + \fi} +\gdef\llj@in#1{ + \immediate\openin\j@insplitin=#1 + \ifeof\j@insplitin + \errmessage{I couldn't find file #1.} + \else + \message{#1} + \toks0={%Beginning-Of-File-Named:#1} + \immediate\write\j@insplitout{\the\toks0} + \executeinspecs{\global\read\j@insplitin to\oldj@ininline} + \loop + \ifeof\j@insplitin\immediate\closein\j@insplitin\n@teoffalse + \else\n@teoftrue + \executeinspecs{\global\read\j@insplitin to\j@ininline} + \toks0=\expandafter{\oldj@ininline} + \let\oldj@ininline=\j@ininline + \immediate\write\j@insplitout{\the\toks0} + \fi + \ifn@teof + \repeat + \immediate\closein\j@insplitin + \fi} +} +% To be put at the end of a file, for making an tar-like file containing +% everything it used. +\def\autojoin{ + \immediate\write\psbj@inaux{\string\into\space psbjoin.all} + \immediate\closeout\psbj@inaux + \input psbjoin.aux +} +% +% Annotations & Captions etc... +% +% +% \centinsert{anybox} is just a centered \midinsert, but is included as +% people barely use the original inserts from TeX. +% +\def\centinsert#1{\midinsert\line{\hss#1\hss}\endinsert} +\def\psannotate#1#2{\def\ps@nnotation{#2\global\let\ps@nnotation=\relax}#1} +\def\pscaption#1#2{\vbox{ + \setbox\drawingBox=#1 + \copy\drawingBox + \vskip\baselineskip + \vbox{\hsize=\wd\drawingBox\setbox0=\hbox{#2} + \ifdim\wd0>\hsize + \noindent\unhbox0\tolerance=5000 + \else\centerline{\box0} + \fi +}}} +% for compatibility with older versions +\def\psfig#1#2#3{\pscaption{\psannotate{#1}{#2}}{#3}} +\def\psfigurebox#1#2#3{\pscaption{\psannotate{\psbox{#1}}{#2}}{#3}} +% +% \at(#1;#2)#3 puts #3 at #1-higher and #2-right of the current +% position without moving it (to be used in annotations). +\def\at(#1;#2)#3{\setbox0=\hbox{#3}\ht0=0pt\dp0=0pt + \rlap{\kern#1\vbox to0pt{\kern-#2\box0\vss}}} +% +% \gridfill(ht;wd) makes a 1cm*1cm grid of ht by wd whose lower-left +% corner is the current point +\newdimen\gridht \newdimen\gridwd +\def\gridfill(#1;#2){ + \setbox0=\hbox to 1\pscm + {\vrule height1\pscm width.4pt\leaders\hrule\hfill} + \gridht=#1 + \divide\gridht by \ht0 + \multiply\gridht by \ht0 + \gridwd=#2 + \divide\gridwd by \wd0 + \multiply\gridwd by \wd0 + \advance \gridwd by \wd0 + \vbox to \gridht{\leaders\hbox to\gridwd{\leaders\box0\hfill}\vfill}} +% +% Useful to measure where to put annotations +\def\fillinggrid{\at(0cm;0cm){\vbox{ + \gridfill(\drawinght;\drawingwd)}}} +% +% \textleftof\anybox: Sample text\endtext +% inserts "Sample text" on the left of \anybox ie \vbox, \psbox. +% \textrightof is the symmetric (not documented, too uggly) +% Welcome any suggestion about clean wraparound macros from +% TeXhackers reading this +% +\def\textleftof#1:{ + \setbox1=#1 + \setbox0=\vbox\bgroup + \advance\hsize by -\wd1 \advance\hsize by -2em} +\def\textrightof#1:{ + \setbox0=#1 + \setbox1=\vbox\bgroup + \advance\hsize by -\wd0 \advance\hsize by -2em} +\def\endtext{ + \egroup + \hbox to \hsize{\valign{\vfil##\vfil\cr% +\box0\cr% +\noalign{\hss}\box1\cr}}} +% +% \frameit{\thick}{\skip}{\anybox} +% draws with thickness \thick a box around \anybox, leaving \skip of +% blank around it. eg \frameit{0.5pt}{1pt}{\hbox{hello}} +% \boxit{\anybox} is a shortcut. +\def\frameit#1#2#3{\hbox{\vrule width#1\vbox{ + \hrule height#1\vskip#2\hbox{\hskip#2\vbox{#3}\hskip#2}% + \vskip#2\hrule height#1}\vrule width#1}} +\def\boxit#1{\frameit{0.4pt}{0pt}{#1}} +% +% +\catcode`\@=12 % cs containing @ are unreachable +% +% CUSTOMIZE YOUR DEFAULT DRIVER: +% Uncomment the line corresponding to your TeX system: +%\psfortextures% For TeXtures on the Macintosh +%\psforoztex % For OzTeX shareware on the Macintosh +%\psfordvitops % For the DVItoPS converter for TeX on IBM mainframes + \psfordvips % For DVIPS converter on VAX and UNIX +%\psfordvitps % For dvitps from TeXPS package under UNIX +%\psforDVIALW % For DVIALW, UNIX public domain +%\psonlyboxes % Blank Boxes (when all else fails). diff --git a/doc/tex2rtf.ini b/doc/tex2rtf.ini new file mode 100644 index 0000000..15548a6 --- /dev/null +++ b/doc/tex2rtf.ini @@ -0,0 +1,10 @@ +winHelpVersion = 4 +winHelpContents = yes +#generateHPJ = yes +htmlWorkshopFiles = true +combineSubSections = true +runTwice = yes +useUpButton = yes +winHelpTitle = "CTSim Manual" + + diff --git a/doc/texhelp.sty b/doc/texhelp.sty new file mode 100644 index 0000000..af91bd5 --- /dev/null +++ b/doc/texhelp.sty @@ -0,0 +1,298 @@ +% LaTeX style file +% Name: texhelp.sty +% Author: Julian Smart +% +% Purpose +% ------- +% Style file to enable the simultaneous preparation of printed LaTeX and on-line +% hypertext manuals. +% Use in conjunction with Tex2RTF (see Tex2RTF documentation). +% +% Note that if a non-ASCII character starts a newline and there should be a space +% between the last word on the previous line and the first word on this line, +% you need to use \rtfsp to generate a space in Windows Help. \rtfsp is ignored +% in all other formats. +% +% Julian Smart +% Artificial Intelligence Applications Institute +% +% +% ============== C++/CLIPS Documentation Facilities ============== +% +% Each class definition should be typeset with e.g. +% +% \section{\class{Name}: Parent} +% +% followed by a description of the class. +% Each member should follow: +% +% \membersection{wxName::Member} +% +% with a description of what this member does. +% Then, one (or more if overloaded) member (function) in detail: +% +% \func{return type}{name}{args} +% or +% \member{type}{name} +% +% where args is a list of \param{type}{name}, ... + +% Function, e.g. +% e.g. to typeset +% +% void DoIt(char *string); +% +% write: +% +% \func{void}{DoIt}{\param{char *}{string}} +% + +\newcommand{\func}[3]{\hangafter=1\noindent\hangindent=10mm +{{\it #1} {\bf #2}\index{#2}}(#3)} + +% For function/type definition where the name is a pointer, +% e.g. to typeset +% +% typedef void (*wxFunction)(wxObject&) +% +% write: +% +% \pfunc{typedef void}{wxFunction}{param{wxObject&}} + +\newcommand{\pfunc}[3]{\hangafter=1\noindent\hangindent=10mm +{{\it #1} ({\bf *#2})\index{#2}}(#3)} + +% Use an ordinary \section command for class name definitions. + +% This is used for a member, such as wxBitmap: GetDepth +\newcommand{\membersection}[1]{\subsection*{#1}\index{#1}} + +% CLIPS function +\newcommand{\clipsfunc}[3]{\hangafter=1\noindent\hangindent=10mm +{{\bf #1} ({\bf #2}\index{#2}}#3)} + +\newcommand{\clipssection}[1]{\chapter{#1}} + +% This is used for a CLIPS function name +\newcommand{\functionsection}[1]{\subsection*{#1}} + +% Member: a type and a name +\newcommand{\member}[2]{{\bf #1 \it #2}} + +% C++ Parameter: a type and a name (no intervening space) +\newcommand{\param}[2]{{\it #1}{\bf #2}} + +% CLIPS Parameter: a type and a name (one intervening space) +\newcommand{\cparam}[2]{{\bf #1} {\it #2}} + +% Class: puts in index +\newcommand{\class}[1]{#1\index{#1}} + +%\newcommand{\docparam}[2]{\parskip=0pt {\it #1}\par\parskip=10pt\begin{indented}{1cm}{#2}\end{indented}} + +% Void type +\newcommand{\void}{{\it void}} + +% Typeset destructor +\newcommand{\destruct}[1]{{$\sim$}#1} + +% Typeset insert/extract operators +\newcommand{\cinsert}{$<<$} +\newcommand{\cextract}{$>>$} + + +% =================== Hypertext facilities =================== +% +% To insert hyperlinks (or references, in Latex), \label the sections +% or membersections \label{ref-label} immediately after the section, on the same line, +% and use \helpref{text-to-show}{ref-label} to make a reference. +% + +% Type text with section reference +\newcommand{\helpref}[2]{{\it #1} (p.\ \pageref{#2}) } + +% Type text with URL in verbatim mode +\newcommand{\urlref}[2]{#1 (\verb$#2$)} + +% Don't typeset section number in LaTeX +\newcommand{\helprefn}[2]{{\it #1}} + +% Like helpref, but popup text in WinHelp instead of hyperlinked +\newcommand{\popref}[2]{{\it #1}} + +% Like footnote, but popup text. +\newcommand{\footnotepopup}[2]{{\it #1}\footnote{#2}} + +% =================== On-line help specific macros =================== +% + +% Global document font size/family, help only. +\newcommand{\helpfontsize}[1]{} +\newcommand{\helpfontfamily}[1]{} + +% Ignore in all on-line help +\newcommand{\helpignore}[1]{#1} +% Only print in all on-line help +\newcommand{\helponly}[1]{} + +% Ignore in LaTeX +\newcommand{\latexignore}[1]{} +% Only print in LaTeX +\newcommand{\latexonly}[1]{#1} + +% Ignore in linear RTF +\newcommand{\rtfignore}[1]{#1} +% Only print in linear RTF +\newcommand{\rtfonly}[1]{} + +% Ignore in WinHelp RTF +\newcommand{\winhelpignore}[1]{#1} +% Only print in WinHelp RTF +\newcommand{\winhelponly}[1]{} + +% Ignore in wxHelp +\newcommand{\xlpignore}[1]{#1} +% Only print in wxHelp +\newcommand{\xlponly}[1]{} + +% Ignore in HTML +\newcommand{\htmlignore}[1]{#1} +% Only print in HTML +\newcommand{\htmlonly}[1]{} + +% Input a file only for help system (binder thickness is not a limitation +% in help systems!) +\newcommand{\helpinput}[1]{} + +\newcommand{\rtfsp}{ } % Force a space in RTF, ignore in Latex + +% =================== Miscellaneous macros =================== +% +% Headings consistent with generated ones +\newcommand{\myheading}[1]{\vspace*{25pt} +\begin{flushleft} +{\LARGE \bf #1} +\end{flushleft} +\vskip 20pt +} + +% Heading with entry in contents page. +\newcommand{\chapterheading}[1]{\myheading{#1} +\addcontentsline{toc}{chapter}{#1}} + +\newcommand{\sectionheading}[1]{\myheading{#1} +\addcontentsline{toc}{section}{#1}} + +% Glossary environment +\newenvironment{helpglossary}{\newpage\chapterheading{Glossary}\begin{description}}{\end{description}} + +% Glossary entry +\newcommand{\gloss}[1]{\item[#1]\index{#1}} + +% Image: EPS in Latex, BMP or MF (whatever's available) in RTF. Requires psbox. +\newcommand{\image}[2]{\psboxto(#1){#2}} + +% Image, left aligned (HTML) +\newcommand{\imager}[2]{\psboxto(#1){#2}} + +% Image, right aligned (HTML) +\newcommand{\imagel}[2]{\psboxto(#1){#2}} + +% Imagemap: principally for HTML only. In Latex, +% acts like \image. +\newcommand{\imagemap}[3]{\psboxto(#1){#2}} + +% Headers and footers +% \setheader{EvenPageLeft}{EvenPageCentre}{EvenPageRight} +% {OddPageLeft}{OddPageCentre}{OddPageRight} +\newcommand{\setheader}[6]{ +\lhead[\fancyplain{}{#1}]{\fancyplain{}{#4}} +\chead[\fancyplain{}{#2}]{\fancyplain{}{#5}} +\rhead[\fancyplain{}{#3}]{\fancyplain{}{#6}} +} + +% \setfooter{EvenPageLeft}{EvenPageCentre}{EvenPageRight} +% {OddPageLeft}{OddPageCentre}{OddPageRight} +\newcommand{\setfooter}[6]{ +\lfoot[\fancyplain{#1}{#1}]{\fancyplain{#4}{#4}} +\cfoot[\fancyplain{#2}{#2}]{\fancyplain{#5}{#5}} +\rfoot[\fancyplain{#3}{#3}]{\fancyplain{#6}{#6}} +} + +% Needed for telling RTF where margin paragraph should go +% in mirrored margins mode. +\newcommand{\marginpareven}[1]{\hspace*{0pt}\marginpar{#1}} +\newcommand{\marginparodd}[1]{\hspace*{0pt}\marginpar{#1}} + +% Environment for two-column table popular in WinHelp and manuals. +\newcommand{\twocolwidtha}[1]{\def\twocolwidthaval{#1}} +\newcommand{\twocolwidthb}[1]{\def\twocolwidthbval{#1}} +\newcommand{\twocolspacing}[1]{\def\twocolspacingval{#1}} + +\twocolwidtha{3cm} +\twocolwidthb{8.5cm} +\twocolspacing{2} + +\newcommand{\twocolitem}[2]{#1 & #2\\} +\newcommand{\twocolitemruled}[2]{#1 & #2\\\hline} + +\newenvironment{twocollist}{\renewcommand{\arraystretch}{\twocolspacingval}\begin{tabular}{lp{\twocolwidthbval}}}% +{\end{tabular}\renewcommand{\arraystretch}{1}} + +% Specifying table rows for RTF compatibility +\newcommand{\row}[1]{#1\\} + +% Use for the last ruled row for correct RTF generation. +\newcommand{\ruledrow}[1]{#1\\\hline} + +% Indentation environment. Arg1 is left margin size +\newenvironment{indented}[1]{\begin{list}{}{\leftmargin=#1}\item[]}% +{\end{list}} + +% Framed box of text, normal formatting. +\newcommand{\normalbox}[1]{\fbox{\vbox{#1}}} +% Double-framed box of text. +\newcommand{\normalboxd}[1]{\fbox{\fbox{\vbox{#1}}}} + +% WITHDRAWN -- can't do in RTF, easily. +% Framed box of text, horizontally centred. Ragged right within box. +% \newcommand{\centeredbox}[2]{\begin{center}\fbox{\parbox{#1}{\raggedright#2}}\end{center}} +% Double-framed box of text, horizontally centred. Ragged right within box. +% \newcommand{\centeredboxd}[2]{\begin{center}\fbox{\fbox{\parbox{#1}{\raggedright#2}}}\end{center}} + +% toocomplex environment: simply prints the argument in LaTeX, +% comes out verbatim in all generated formats. +\newenvironment{toocomplex}{}{} + +% Colour: dummy commands since LaTeX doesn't support colour. +% \definecolour{name}{red}{blue}{green} +% \fcol{name}{text} ; Foreground +% \bcol{name}{text} ; Background +\newcommand{\definecolour}[4]{} +\newcommand{\definecolor}[4]{} +\newcommand{\fcol}[2]{#2} +\newcommand{\bcol}[2]{#2} +\newcommand{\sethotspotcolour}[1]{} +\newcommand{\sethotspotunderline}[1]{} +\newcommand{\settransparency}[1]{} +\newcommand{\backslashraw}[0]{} +\newcommand{\lbraceraw}[0]{} +\newcommand{\rbraceraw}[0]{} +\newcommand{\registered}[0]{(r)} +\newcommand{\background}[1]{} +\newcommand{\textcolour}[1]{} +\newcommand{\overview}[2]{See \helpref{#1}{#2}.} +\newcommand{\docparam}[2]{{\it #1}\begin{list}{}{\leftmargin=1cm}\item[] +#2% +\end{list}} +\newcommand{\wxheading}[1]{{\bf #1}} +\newcommand{\const}[0]{{\bf const}} +\newcommand{\constfunc}[3]{{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}} +\newcommand{\windowstyle}[1]{{\bf #1}\index{#1}} + +\addtolength{\textwidth}{1in} +\addtolength{\oddsidemargin}{-0.5in} +\addtolength{\topmargin}{-0.5in} +\addtolength{\textheight}{1in} +\sloppy + diff --git a/doc/verbatim.sty b/doc/verbatim.sty new file mode 100644 index 0000000..462c329 --- /dev/null +++ b/doc/verbatim.sty @@ -0,0 +1,212 @@ +%% +%% This is file `verbatim.sty' generated +%% on <1991/9/3> with the docstrip utility (v1.1l test). +%% +%% The original source file was `verbatim.doc'. +%% +%% +%% Copyright (C) 1989,1990,1991 by Rainer Schoepf. All rights reserved. +%% +%% IMPORTANT NOTICE: +%% +%% You are not allowed to change this file. You may however copy this file +%% to a different name and then change this copy. +%% +%% You are allowed to distribute this file under the condition that it is +%% distributed together with all files mentioned in readme.mz4. If you +%% receive only some of these files from someone, complain! +%% +%% You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED +%% to take money for the distribution or use of this file (or a changed +%% version) except for some nominal charge for copying etc. +%% +%% Error Reports in case of UNCHANGED versions to +%% +%% Rainer Schoepf +%% Konrad-Zuse-Zentrum fuer Informationstechnik Berlin +%% Heilbronner Str. 10 +%% W-1000 Berlin 31 +%% Federal Republic of Germany +%% Internet: +%% +\def\fileversion{v1.4f} +\def\filedate{91/08/05} +\def\docdate{91/08/05} + +%% \CheckSum{439} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +%% Style-option `verbatim' to use with LaTeX v2.09 +%% Copyright (C) 1989, 1990, 1991 by Rainer Sch\"opf, all rights reserved. +\@ifundefined{verbatim@@@}{}{\endinput} +\typeout{Style-Option: `verbatim' + \fileversion \space <\filedate> (RmS)} +\typeout{English Documentation + \@spaces \@spaces \space <\docdate> (RmS)} +\def\addto@hook#1#2{#1\expandafter{\the#1#2}} +\newtoks\every@verbatim +\every@verbatim={} +\def\@makeother#1{\catcode`#112\relax} +\begingroup + \catcode`\ =\active% +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}% +\endgroup +\def\@xobeysp{\leavevmode\penalty\@M\ } +\newtoks\verbatim@line +\def\verbatim@startline{\verbatim@line{}} +\def\verbatim@addtoline#1{% + \verbatim@line\expandafter{\the\verbatim@line#1}} +\def\verbatim@processline{\the\verbatim@line\par} +\def\verbatim@finish{\ifcat$\the\verbatim@line$\else + \verbatim@processline\fi} +\begingroup + \catcode`\`=\active + \gdef\verbatim@font{\tt \catcode96\active + \def`{\leavevmode\kern\z@\char96 }} +\endgroup +\def\@verbatim{\the\every@verbatim + \trivlist \item[]% + \leftskip\@totalleftmargin\rightskip\z@ + \parindent\z@\parfillskip\@flushglue\parskip\z@ + \@@par + \def\par{\leavevmode\null\@@par\penalty\interlinepenalty}% + \obeylines + \verbatim@font + \let\do\@makeother \dospecials} +\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces\verbatim@start} +\@namedef{verbatim*}{\@verbatim\verbatim@start} +\let\endverbatim=\endtrivlist +\expandafter\let\csname endverbatim*\endcsname =\endtrivlist +\def\comment{\@bsphack + \let\do\@makeother\dospecials\catcode`\^^M\active + \let\verbatim@startline\relax + \let\verbatim@addtoline\@gobble + \let\verbatim@processline\relax + \let\verbatim@finish\relax + \verbatim@} +\let\endcomment=\@esphack +\@ifundefined{vrb@catcodes}% + {\def\vrb@catcodes{% + \catcode`\!12\catcode`\[12\catcode`\]12}}{} +\begingroup + \vrb@catcodes + \lccode`\!=`\\ \lccode`\[=`\{ \lccode`\]=`\} + \catcode`\~=\active \lccode`\~=`\^^M + \lccode`\C=`\C + \lowercase{% + \gdef\verbatim@start#1{% + \verbatim@startline + \if\noexpand#1\noexpand~% + \let\next\verbatim@ + \else \def\next{\verbatim@#1}\fi + \next}% + \gdef\verbatim@#1~{\verbatim@@#1!end\@nil}% + \gdef\verbatim@@#1!end{% + \verbatim@addtoline{#1}% + \futurelet\next\verbatim@@@}% + \gdef\verbatim@@@#1\@nil{% + \ifx\next\@nil + \verbatim@processline + \verbatim@startline + \let\next\verbatim@ + \else + \def\@tempa##1!end\@nil{\toks@{##1}}% + \@tempa#1\@nil + \@temptokena{!end}% + \edef\next{\noexpand\verbatim@test\the\toks@\noexpand~}% + \fi \next}% + \gdef\verbatim@test#1{% + \let\next\verbatim@test + \if\noexpand#1\noexpand~% + \expandafter\verbatim@addtoline + \expandafter{\the\@temptokena}% + \verbatim@processline + \verbatim@startline + \let\next\verbatim@ + \else \if\noexpand#1 + \@temptokena\expandafter{\the\@temptokena#1}% + \else \if\noexpand#1\noexpand[% + \let\@tempc\@empty + \let\next\verbatim@testend + \else + \expandafter\verbatim@addtoline + \expandafter{\the\@temptokena}% + \def\next{\verbatim@#1}% + \fi\fi\fi + \next}% + \gdef\verbatim@testend#1{% + \if\noexpand#1\noexpand~% + \expandafter\verbatim@addtoline + \expandafter{\the\@temptokena[}% + \expandafter\verbatim@addtoline + \expandafter{\@tempc}% + \verbatim@processline + \verbatim@startline + \let\next\verbatim@ + \else\if\noexpand#1\noexpand]% + \let\next\verbatim@@testend + \else\if\noexpand#1\noexpand!% + \expandafter\verbatim@addtoline + \expandafter{\the\@temptokena[}% + \expandafter\verbatim@addtoline + \expandafter{\@tempc}% + \def\next{\verbatim@!}% + \else \expandafter\def\expandafter\@tempc\expandafter + {\@tempc#1}\fi\fi\fi + \next}% + \gdef\verbatim@@testend{% + \ifx\@tempc\@currenvir + \verbatim@finish + \edef\next{\noexpand\end{\@currenvir}% + \noexpand\verbatim@rescan{\@currenvir}}% + \else + \expandafter\verbatim@addtoline + \expandafter{\the\@temptokena[}% + \expandafter\verbatim@addtoline + \expandafter{\@tempc]}% + \let\next\verbatim@ + \fi + \next}% + \gdef\verbatim@rescan#1#2~{\if\noexpand~\noexpand#2~\else + \@warning{Characters dropped after `\string\end{#1}'}\fi}} +\endgroup +\def\verbatiminput{\begingroup + \@ifstar\sverbatim@input\verbatim@input} +\def\sverbatim@input#1{\@verbatim + \@input{#1}\endtrivlist\endgroup\@doendpe} +\def\verbatim@input#1{\@verbatim + \frenchspacing \@vobeyspaces + \@input{#1}\endtrivlist\endgroup\@doendpe} +\begingroup + \lccode`\~=`\^^M + \lowercase{% + \gdef\verb{\begingroup + \verbatim@font + \catcode`\^^M\active + \def~{\endgroup\@latexerr{\string\verb\space command ended by + end of line.}\@ehc}% + \let\do\@makeother \dospecials + \@ifstar\@sverb{\@vobeyspaces \frenchspacing \@sverb}}} +\endgroup +\def\@sverb#1{% + \catcode`#1\active + \lccode`\~`#1% + \lowercase{\let~\endgroup}% + \leavevmode\null} +\endinput +%% +%% End of file `verbatim.sty'. -- 2.34.1