From 25837b12ef3d7b2d15b51948cf5f98f2d1c037fd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 11 Jan 2006 23:55:31 +0000 Subject: trunk/Master/texmf-dist/source/latex/newfile git-svn-id: svn://tug.org/texlive/trunk@410 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/newfile/newfile.dtx | 958 +++++++++++++++++++++ Master/texmf-dist/source/latex/newfile/newfile.ins | 61 ++ 2 files changed, 1019 insertions(+) create mode 100644 Master/texmf-dist/source/latex/newfile/newfile.dtx create mode 100644 Master/texmf-dist/source/latex/newfile/newfile.ins (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/source/latex/newfile/newfile.dtx b/Master/texmf-dist/source/latex/newfile/newfile.dtx new file mode 100644 index 00000000000..49f7ac687ce --- /dev/null +++ b/Master/texmf-dist/source/latex/newfile/newfile.dtx @@ -0,0 +1,958 @@ +% \iffalse meta-comment +% +% newfile.dtx +% Copyright 2002 Peter R. Wilson +% +% This program is provided under the terms of the +% LaTeX Project Public License distributed from CTAN +% archives in directory macros/latex/base/lppl.txt. +% +% Author: Peter Wilson (CUA) (now at: peter.r.wilson@boeing.com) +% +%<*driver> +\documentclass{ltxdoc} +\EnableCrossrefs +\CodelineIndex +\setcounter{StandardModuleDepth}{1} +\begin{document} + \DocInput{newfile.dtx} +\end{document} +% +% +% \fi +% +% \CheckSum{329} +% +% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} +% \DoNotIndex{\@centercr,\@cite} +% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} +% \DoNotIndex{\@input,\@ixpt,\@m} +% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint} +% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} +% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} +% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} +% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} +% \DoNotIndex{\advance,\Alph,\alph} +% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} +% \DoNotIndex{\bullet} +% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} +% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} +% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} +% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} +% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} +% \DoNotIndex{\fbox} +% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} +% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} +% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} +% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} +% \DoNotIndex{\input} +% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} +% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} +% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} +% \DoNotIndex{\NeedsTeXFormat,\newdimen} +% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} +% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} +% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} +% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} +% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} +% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} +% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman} +% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength} +% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} +% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} +% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} +% \DoNotIndex{\viipt,\vipt,\vskip,\vspace} +% \DoNotIndex{\wd,\xiipt,\year,\z@} +% +% \changes{v1.0}{2002/06/22}{First public release} +% \changes{v1.0a}{2002/07/07}{Corrected documentation} +% +% \def\fileversion{v1.0} +% \def\filedate{2002/06/22} +% \def\fileversion{v1.0a} +% \def\filedate{2002/07/07} +% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package +% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option +% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file +% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter +% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle +% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment +% +% \title{The \Lpack{newfile} package\thanks{This +% file has version number \fileversion, last revised +% \filedate.}} +% +% \author{% +% Peter Wilson\\ +% Catholic University of America \\ +% Now at \texttt{peter.r.wilson@boeing.com} +% } +% \date{\filedate} +% \maketitle +% \begin{abstract} +% The \Lpack{newfile} package provides convenient user level commands +% for reading and writing new files during a LaTeX run. +% \end{abstract} +% \tableofcontents +% +% +% \section{Introduction} +% +% TeX has a maximum of 16 input and 16 output \emph{streams} +% for reading and writing +% files. The \Lpack{newfile} package provides means of associating +% several different files with a particular stream. +% +% The \Lpack{newfile} package requires the \Lpack{verbatim} +% package~\cite{VERBATIM}, which is one of the required packages in +% a LaTeX distribution. +% +% This manual is typeset according to the conventions of the +% \LaTeX{} \textsc{docstrip} utility which enables the automatic +% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}. +% +% Section~\ref{sec:usc} describes the usage of the package. +% Commented source code for the package is in Section~\ref{sec:code}. +% +% \section{The \Lpack{newfile} package} \label{sec:usc} +% +% +% \DescribeMacro{\newoutputstream} +% \DescribeMacro{\newinputstream} +% The command |\newoutputstream|\marg{stream} creates a new stream +% called \meta{stream} for writing out text and commands. The \meta{stream} +% should be just alphabetic characters with no spaces; for example |myout|. +% The command |\newinputstream|\marg{stream} creates a new stream for +% reading from a file. The \meta{stream} names must be unique --- you cannot +% use the same name for both an input and an output stream. +% +% If you try and create too many streams, TeX will tell you via an error +% message. +% +% These two commands also attempt to create two other new commands, +% called respectively +% |\atstreamopen| and |\atstreamclose|. If these commands +% already exist then they are left untouched, otherwise they are +% created (like using |\providecommand{\atstreamopen|. Any pre-existing contents of \meta{filname} +% are deleted. +% +% \DescribeMacro{\closeoutputstream} +% The macro |\closeoutputstream|\marg{stream} calls the macro +% |\atstreamclose|, closes the output stream +% \meta{stream} and closes whatever file +% is currently attached to \meta{stream}. It then detaches the file from +% the stream. +% +% \DescribeEnv{writeverbatim} +% The |writeverbatim| environment takes one argument, the name of an output +% stream, which must be open. The contents of the environment are written +% out verbatim to the file currently attached to the stream. +% +% \DescribeMacro{\addtostream} +% The command |\addtostream|\marg{stream}\marg{text} writes \meta{text} +% to the file currently attached to the output stream \meta{stream}, which +% must be open. Any commands within \meta{text} will be processed before +% being written. To prevent this, put |\protect| before any command that +% you do not want expanding. +% +% \DescribeMacro{\openinputfile} +% The macro |\openinputfile|\marg{filename}\marg{stream} opens the +% file called \meta{filename} and the input stream \meta{stream}. It +% then attaches the file to the stream for reading and calls the macro +% |\atstreamopen|. It is an error if \meta{filename} can not be found. +% +% \DescribeMacro{\closeinputstream} +% The macro |\closeinputstream|\marg{stream} calls the macro +% |\atstreamclose|, closes the input stream +% \meta{stream} and closes whatever file +% is currently attached to \meta{stream}. It then detaches the file from +% the stream. +% +% \DescribeMacro{\readstream} +% The macro |\readstream|\marg{stream} reads the contents of the file that +% is currently associated with the input stream \meta{stream}. This provides +% the same functionality as |\input|\marg{filename} does. +% +% \DescribeMacro{\readaline} +% The macro |\readaline|\marg{stream} reads what TeX considers to be +% one line from the file that +% is currently associated with the input stream \meta{stream}. Multiple lines +% can be read by calling |\readaline| multiple times. A warning is issued +% if there are no more lines to be read (i.e., the end of the file has +% been reached). +% +% +% \DescribeMacro{\readverbatim} +% The macro |\readverbatim|\marg{stream} reads the contents of the file that +% is currently associated with the input stream \meta{stream} as |verbatim| +% text. This provides +% the same functionality as the \Lpack{verbatim} package's +% |\verbatiminput|\marg{filename} command does. +% +% \DescribeMacro{\streamvfont} +% Text read in verbatim is typeset using the font specified by +% |\streamvfont|\marg{font}. The default is +% |\streamvfont{\normalfont\ttfamily}|. To typeset in a smaller font, try +% for example, +% |\streamvfont{\small\ttfamily}|. +% +% +% \DescribeMacro{\numbervstream} +% \DescribeMacro{\marginnumbervstream} +% \DescribeMacro{\streamvnumfont} +% The declaration |\numbervstream| causes |\readverbatim| to number each +% line it reads. +% The declaration |\marginnumbervstream| is similar to |\numbervstream| +% except it puts the numbers in the margin. +% The |streamvline| counter is used for the line numbering. Both +% the numbering declarations (re)set it to zero. The numbers are +% typeset in the font specified by |\streamvnumfont|\marg{font}. +% The default is |\streamvnumfont{\footnotesize}|. +% +% \DescribeMacro{\plainvstream} +% The declaration |\plainvstream| stops any numbering. The default +% is |\plainvstream|. +% +% \DescribeEnv{comment} +% The |comment| environment, which is part of the \Lpack{verbatim} +% package, throws away everything inside the environment. +% +% The \Lpack{verbatim} package~\cite{VERBATIM} provides some other +% facilities, apart from +% the |comment| environment, and its documentation explains them. +% +% \section{Examples} +% +% \subsection{Output stream} +% +% This example is inspired by the \Lpack{endfloat} package~\cite{ENDFLOAT} +% which provides a more sophisticated approach than shown below. The +% example demonstrates the use of an output stream. +% +% Suppose that in an \Lpack{article} class document you want all the +% figures to be collected at the end, but to specify them at the appropriate +% places in the body of the text. +% +% \begin{macrocode} +%<*ex> +% \end{macrocode} +% \begin{macrocode} +\documentclass{article} +\usepackage{newfile} +... +% \end{macrocode} +% Create a new output stream called |figs| and open it to write to file +% |figures.tex|. +% \begin{macrocode} +\newoutputstream{figs} +\openoutputfile{figures.out}{figs} +... +% \end{macrocode} +% Write out verbatim the first |figure| environment to the |figs| stream. +% \begin{macrocode} +\begin{writeverbatim}{figs} +\begin{figure} +... +\end{figure} +\end{writeverbatim} +... +% \end{macrocode} +% After the last |figure| is written to |figs|, close the |figs| output +% stream, which also closes the |figures.out| file. +% \begin{macrocode} +\begin{writeverbatim}{figs} +\begin{figure} +... +\end{figure} +\end{writeverbatim} +\closeoutputstream{figs} +... +% \end{macrocode} +% At the end |\input| |figures.out| to typeset the figures. +% \begin{macrocode} +\input{figures.out} +\end{document} +% \end{macrocode} +% +% \subsection{An output and input stream} +% +% This example is the kind of thing that the \Lpack{answers} +% package~\cite{ANSWERS} does rather better. The example illustrates +% the use of an output and an input stream. +% +% Suppose you are writing a document that includes questions and answers +% and you want all the answers at the end. It is most convenient if you +% can write the answer to each question as it is posed, and then only +% print them at the end. +% +% \setcounter{CodelineNo}{0} +% \begin{macrocode} +\documentclass{article} +\usepackage{newfile} +... +% \end{macrocode} +% Create new output and input streams called |ans| and |ansin|. Just to +% demonstrate the use of the |\atstreamopen...| command, redefine +% |\atstreamopenansin| so that it will start a section called +% `Answers to all the questions'. Then open the |ans| stream to write to +% a file called |answers.all|. +% \begin{macrocode} +\newoutputstream{ans} +\newinputstream{ansin} +\renewcommand{\atstreamopenansin}{\section{Answers to all the questions}} +\openoutputfile{answers.all}{ans} +... +% \end{macrocode} +% For each question, write out the answer verbatim to the |ans| stream. +% \begin{macrocode} +This is a question. +\begin{writeverbatim}{ans} +This is the answer to a question. +\end{writeverbatim} +... +% \end{macrocode} +% At the end, close the |ans| stream and open the |ansin| stream to read from +% the file |answers.all|. Opening the stream will also start the new +% `Answers to all the questions' section (from |\atstreamopenansin|). Then +% read from the |ansin| stream. +% \begin{macrocode} +\closeoutputstream{ans} +\openinputfile{answers.all}{ansin} +\readstream{ansin} +% \end{macrocode} +% Finally, close the |ansin| stream, and we are done. +% \begin{macrocode} +\closeinputstream{ansin} +\end{document} +% \end{macrocode} +% +% If desired, instead of inserting the answers at the end of the question +% document, |answers.all| could have been |\input| into a seperate +% answer document. +% +% Along the same lines as above, perhaps the original document is +% a \Lpack{book} class, with questions (and answers) at the end of each +% chapter. A seperate answer file could be produced for each chapter, like: +% \setcounter{CodelineNo}{0} +% \begin{macrocode} +... +\newoutputstream{ansout} +\newinputstream{ansin} +... +\chapter{First chapter} % chapter 1 +\openoutputfile{\jobname\thechapter.ans}{ansout} +% \end{macrocode} +% The |\jobname| is the name of the main LaTeX document file, without +% the |.tex| extension, so if the name of the LaTeX source file is +% |mybook.tex| the above line creates a file called |mybook1.ans|. +% \begin{macrocode} +... +\begin{writeverbatim}{ansout} +An answer +\end{writeverbatim} +... +\closeoutputstream{ansout} +\chapter{Another chapter} % chapter N +\openoutputfile{\jobname\thechapter.ans}{ansout} +... +\closeoutputstream{ansout} + +\chapter{Answers} + +\section{Chapter 1} +\openinputstream{\jobname1.ans}{ansin} +\readstream{ansin} +\closestream{ansin} +... +\section{Chapter N} +\openinputstream{\jobnameN.ans}{ansin} +\readstream{ansin} +\closestream{ansin} +... +% \end{macrocode} +% +% The above example shows how you can associate different files with a single +% stream. +% +% \subsection{Multiple streams} +% +% This is a more complex example, again inspired by the \Lpack{endfloat} +% package. In a \Lpack{book} class document you want +% all the +% figures and tables to be collected at the end, +% but to specify them at the appropriate +% places in the body of the text. +% +% \setcounter{CodelineNo}{0} +% \begin{macrocode} +\documentclass{book} +\usepackage{newfile} +... +% \end{macrocode} +% Create and open two new output streams, one for figures (|figs|) and the +% other (|tabs|) for tables. +% For demonstration purposes, also create a new input stream called figtab. +% \begin{macrocode} +\newoutputstream{figs} +\openoutputfile{figures.out}{figs} +\newoutputstream{tabs} +\openoutputfile{tables.out}{tabs} +\newinputstream{figtab} +... +% \end{macrocode} +% There is a slight difficulty with this example, as in the \Lpack{book} +% class, figures and table numbers start anew with each chapter and the +% chapter number is preprended to the sequence number. We can make a +% start on solving this by creating a new pseudo chapter number and changing +% the default definitions of the figure and table numbers (which are +% |\renewcommand{\thefigure}{\thechapter.\arabic{figure}}| and similarly +% for tables). +% \begin{macrocode} +\newcounter{pseudochapter} +\renewcommand{\thepseudochapter}{\arabic{pseudochapter}} +\renewcommand{\thefigure}{\thepseudochapter.\arabic{figure}} +\renewcommand{\thetable}{\thepseudochapter.\arabic{table}} +... +% \end{macrocode} +% Do the usual things at the start of the document. +% \begin{macrocode} +\begin{document} +\maketitle +\tableofcontents +\listoffigures +.. +% \end{macrocode} +% At the start of each chapter we need to set the |pseudochapter| counter +% to the chapter number, and write this to the output streams so +% that there is a record of which chapters the figures and tables came from +% Normally, each chapter resets the figure and table numbers, but as +% these will now be at the end, we have to fake the start of chapters +% in the output files. We can do all of this by the |\addtostream| macro. +% \begin{macrocode} +\chapter{First} +% \end{macrocode} +% The next bit of code will result in \\ +% |\setcounter{pseudochapter}{N}| \\ +% where |N| is the number of this chapter, appearing in the output files. +% \begin{macrocode} +\addtostream{figs}{\protect\setcounter{pseudochapter}{\thechapter}} +\addtostream{tabs}{\protect\setcounter{pseudochapter}{\thechapter}} +% \end{macrocode} +% The next bit of code results in the following two lines in the output files:\\ +% |\refstepcounter{chapter}| \\ +% |\addtocounter{chapter}{-1}| \\ +% The first of these has the effect of resetting the figure and table +% counters by increasing the chapter counter by one. The second line resets +% the chapter counter back to its original value. +% \begin{macrocode} +\addtostream{figs}{\protect\refstepcounter{chapter}} +\addtostream{figs}{\protect\addtocounter{chapter}{-1}} +\addtostream{tabs}{\protect\refstepcounter{chapter}} +\addtostream{tabs}{\protect\addtocounter{chapter}{-1}} +% \end{macrocode} +% Write out verbatim each figure to the |figs| stream. +% \begin{macrocode} +\begin{writeverbatim}{figs} +\begin{figure} +... +\end{figure} +\end{writeverbatim} +... +% \end{macrocode} +% and write each table verbatim to the |tabs| stream. +% \begin{macrocode} +\begin{writeverbatim}{tabs} +\begin{table} +... +\end{table} +\end{writeverbatim} +... +% \end{macrocode} +% When we have done all the chapters, figures and tables, +% close the two output streams. +% \begin{macrocode} +\closeoutputstream{figs} +\closeoutputstream{tabs} +% \end{macrocode} +% Then if we want the figures to be typeset before the tables, open +% the |figtab| stream to read from |figures.out|, read the stream and +% close it. +% \begin{macrocode} +\openinputfile{figures.out}{figtab} +\readstream{figtab} +\closestream{figtab} +% \end{macrocode} +% We can use the same |figtab| stream for reading the tables. +% \begin{macrocode} +\openinputfile{tables.out}{figtab} +\readstream{figtab} +\closestream{figtab} +\end{document} +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +% +% Note that the \Lpack{endfloat} package~\cite{ENDFLOAT} will produce the +% same effect as the previous example, but much simply. +% +% +% \StopEventually{} +% +% +% \section{The package code} \label{sec:code} +% +% This package can only be used with LaTeX2e, and requires the +% \Lpack{verbatim} package~\cite{VERBATIM}, which is one of the required +% packages for a LaTeX distribution. +% \setcounter{CodelineNo}{0} +% \begin{macrocode} +%<*outin> +\NeedsTeXFormat{LaTeX2e}[1996/06/01] +\ProvidesPackage{newfile}[2002/06/21 v1.0 Output and input files] +\RequirePackage{verbatim} +% \end{macrocode} +% +% To try and avoid name clashes with other packages, each internal macro +% in this package includes the character string `|stre@m|'. +% +% \begin{macro}{\newoutputstream} +% |\newoutputstream|\marg{stream} creates a new output stream called \meta{stream}. +% Different files may be associated with the \meta{stream}. Note that +% TeX permits no more than 16 output streams. +% \begin{macrocode} +\newcommand{\newoutputstream}[1]{% + \@ifundefined{#1outstre@m}% + {\expandafter\newwrite\csname #1outstre@m\endcsname + \csname newif\expandafter\endcsname + \csname ifstre@m#1open\endcsname + \global\csname stre@m#1openfalse\endcsname + \expandafter\ifx\csname atstreamopen#1\endcsname\relax + \global\@namedef{atstreamopen#1}{}% + \fi + \expandafter\ifx\csname atstreamclose#1\endcsname\relax + \global\@namedef{atstreamclose#1}{}% + \fi + }% + {\PackageError{newfile}{Output stream #1 is already defined}{\@ehc}}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newinputstream} +% |\newinputstream|\marg{stream} creates a new input stream called \meta{stream}. +% Different files may be associated with the \meta{stream}. Note that +% TeX permits no more than 16 input streams. +% \begin{macrocode} +\newcommand{\newinputstream}[1]{% + \@ifundefined{#1instre@m}% + {\expandafter\newread\csname #1instre@m\endcsname + \csname newif\expandafter\endcsname + \csname ifstre@m#1open\endcsname + \global\csname stre@m#1openfalse\endcsname + \expandafter\ifx\csname atstreamopen#1\endcsname\relax + \global\@namedef{atstreamopen#1}{}% + \fi + \expandafter\ifx\csname atstreamclose#1\endcsname\relax + \global\@namedef{atstreamclose#1}{}% + \fi + }% + {\PackageError{newfile}{Input stream #1 is already defined}{\@ehc}}} + +% \end{macrocode} +% \end{macro} +% +% Some checking macros will be useful as some of the checks occur in +% multiple places. +% +% \begin{macro}{\@ifstre@mopen} +% |\@ifstre@mopen|\marg{stream}\marg{TRUE code}\marg{FALSE code} +% checks if stream \meta{stream} is currently open. +% \begin{macrocode} +\newcommand{\@ifstre@mopen}[3]{% + \csname ifstre@m#1open\endcsname#2\else#3\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\instre@mandopen} +% |\instre@mandopen|\marg{stream}\marg{TRUE code} checks if \meta{stream} +% is an input stream and is open. If so, it executes \meta{TRUE code}. +% \begin{macrocode} +\newcommand{\instre@mandopen}[2]{% + \@ifundefined{#1instre@m}{% + \PackageError{newfile}{#1\space is not an input stream}{\@ehc}}% + {\@ifstre@mopen{#1}{#2}{% + \PackageError{newfile}{Input stream #1\space is not open}{\@ehc}}}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\instre@mandclosed} +% |\instre@mandclosed|\marg{stream}\marg{TRUE code} checks if \meta{stream} +% is an input stream and is closed (not open). +% If so, it executes \meta{TRUE code}. +% \begin{macrocode} +\newcommand{\instre@mandclosed}[2]{% + \@ifundefined{#1instre@m}{% + \PackageError{newfile}{#1\space is not an input stream}{\@ehc}}% + {\@ifstre@mopen{#1}{% + \PackageError{newfile}{Input stream #1\space is open}{\@ehc}}{#2}}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\outstre@mandopen} +% |\outstre@mandopen|\marg{stream}\marg{TRUE code} checks if \meta{stream} +% is an output stream and is open. If so, it executes \meta{TRUE code}. +% \begin{macrocode} +\newcommand{\outstre@mandopen}[2]{% + \@ifundefined{#1outstre@m}{% + \PackageError{newfile}{#1\space is not an output stream}{\@ehc}}% + {\@ifstre@mopen{#1}{#2}{% + \PackageError{newfile}{Output stream #1\space is not open}{\@ehc}}}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\outstre@mandclosed} +% |\outtre@mandclosed|\marg{stream}\marg{TRUE code} checks if \meta{stream} +% is an output stream and is closed (not open). +% If so, it executes \meta{TRUE code}. +% \begin{macrocode} +\newcommand{\outstre@mandclosed}[2]{% + \@ifundefined{#1outstre@m}{% + \PackageError{newfile}{#1\space is not an output stream}{\@ehc}}% + {\@ifstre@mopen{#1}{% + \PackageError{newfile}{Output stream #1\space is open}{\@ehc}}{#2}}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\openoutputfile} +% |\openoutputfile|\marg{filename}\marg{stream} opens the file called +% \meta{filename} and attaches it to the stream \meta{stream} for +% writing. However, if the |\nofiles| command has been given the +% file is \emph{not} attached to the stream. No more than one file can be +% attached to a stream at any given time. +% \begin{macrocode} +\newcommand{\openoutputfile}[2]{% + \outstre@mandclosed{#2}{% + \global\@namedef{#1@filename}{#1}% + \if@filesw + \immediate\openout\@nameuse{#2outstre@m}=\@nameuse{#1@filename}% + \fi + \global\csname stre@m#2opentrue\endcsname% + \@nameuse{atstreamopen#2}% + }% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closeoutputstream} +% |\closeoutputstream|\marg{stream} closes the stream \meta{stream}. +% \begin{macrocode} +\newcommand{\closeoutputstream}[1]{% + \outstre@mandopen{#1}{% + \@nameuse{atstreamclose#1}% + \immediate\closeout\@nameuse{#1outstre@m}% + \global\csname stre@m#1openfalse\endcsname}% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\openinputfile} +% |\openinputfile|\marg{filename}\marg{stream} opens the file called +% \meta{filename} and attaches it to the stream \meta{stream} for +% reading. The file is added to the list of files. +% No more than one file can be attached to a stream at +% any given time. +% \begin{macrocode} +\newcommand{\openinputfile}[2]{% + \IfFileExists{#1}{% file exists + \instre@mandclosed{#2}{% + \@addtofilelist{#1}% + \global\@namedef{#1@filename}{#1}% + \immediate\openin\@nameuse{#2instre@m}=\@nameuse{#1@filename}% + \global\csname stre@m#2opentrue\endcsname% + \@nameuse{atstreamopen#2}}}% + {% file not found + \PackageError{newfile}{Can't find file #1}{\@ehc}% + }% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closeinputstream} +% |\closeinputstream|\marg{stream} closes the stream \meta{stream}. +% \begin{macrocode} +\newcommand{\closeinputstream}[1]{% + \instre@mandopen{#1}{% + \@nameuse{atstreamclose#1}% + \immediate\closein\@nameuse{#1instre@m}% + \global\csname stre@m#1openfalse\endcsname}% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{writeverbatim} +% |\begin{writeverbatim}|\marg{stream} writes the contents of +% the environment as verbatim text to the given \meta{stream}. +% \begin{macrocode} +\def\writeverbatim#1{% + \@bsphack + \let\do\@makeother\dospecials + \catcode`\^^M\active + \verbatim@startline + \verbatim@addtoline + \verbatim@finish + \def\verbatim@processline{% + \immediate\write\@nameuse{#1outstre@m}{\the\verbatim@line}}% + \verbatim@start} +\def\endwriteverbatim{\@esphack} + +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\addtostream} +% |\addtostream|\marg{stream}\marg{text} writes \meta{text} to the +% given \meta{stream}. +% \begin{macrocode} +\newcommand{\addtostream}[2]{% + \@bsphack + \outstre@mandopen{#1}{% + {\let\protect\string + \immediate\write\@nameuse{#1outstre@m}{#2}% + }}% + \@esphack +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifstre@mnoteof} +% \begin{macro}{\checkstre@mnoteof} +% |\checkstre@mnoteof|\marg{stream} sets |\ifstre@mnoteof| to TRUE if +% \meta{stream} is not at the end of the file (i.e., it is the opposite +% of |\ifeof|). +% \begin{macrocode} +\newif\ifstre@mnoteof +\newcommand{\checkstre@meof}[1]{% + \stre@mnoteoftrue\ifeof\@nameuse{#1instre@m}\stre@mnoteoffalse\fi} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\readstream} +% |\readstream|\marg{stream} reads the contents of +% the given \meta{stream} as |\input| text. +% \begin{macrocode} +\def\readstream#1{ + \instre@mandopen{#1}{% + \loop \checkstre@meof{#1} \ifstre@mnoteof + \read\@nameuse{#1instre@m} to\temptokstre@m + \temptokstre@m + \repeat + }% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\readaline} +% |\readaline|\marg{stream} reads what TeX considers to be one line +% from the given \meta{stream} as |\input| text. +% \begin{macrocode} +\def\readaline#1{ + \instre@mandopen{#1}{% + \ifeof\@nameuse{#1instre@m} + \PackageWarning{newfile}{No more to read from stream #1} + \else + \read\@nameuse{#1instre@m} to\temptokstre@m + \temptokstre@m + \fi + }% +} + +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\readverbatim} +% \begin{macro}{\stre@mverbatim@input} +% \begin{macro}{\verbatim@readstre@m} +% |\readverbatim|\marg{stream} reads the contents of +% the given \meta{stream} as verbatim text. +% +% The read verbatim code is a slight variation on code from the +% \Lpack{verbatim} package. Most of the setup is done by the macros +% |\stre@mverbatim@input|\marg{setup}\marg{stream} and +% |\verbatim@readstre@m|\marg{stream}. Finally, |\verbatim@read@file| +% is a \Lpack{verbatim} package macro. +% \begin{macrocode} +\def\readverbatim{\begingroup + \@ifstar{\stre@mverbatim@input\relax}% + {\stre@mverbatim@input{\frenchspacing\@vobeyspaces}}} + +\def\stre@mverbatim@input#1#2{% + \@ifstre@mopen{#2}% + {\@verbatim #1\relax + \def\verbatim@in@stream{\@nameuse{#2instre@m}} + \verbatim@readstre@m{#2}\endtrivlist\endgroup\@doendpe}% + {\PackageError{newfile}{Stream #2 is not open}{\@ehc}\endgroup}% +} + +\def\verbatim@readstre@m#1{% + \verbatim@startline + \expandafter\endlinechar\expandafter\m@ne + \expandafter\verbatim@read@file + \expandafter\endlinechar\the\endlinechar\relax + \verbatim@finish +} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\plainvstream} +% A macro that sets |\verbatim@processline| to its default definition. +% \begin{macrocode} +\newcommand{\plainvstream}{% + \def\verbatim@processline{\the\verbatim@line\par}% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\streamvnumfont} +% \begin{macro}{\stre@mvnfont} +% We need a counter for numbering lines read in verbatim. +% +% |\streamvnumfont|\marg{font} defines |\stre@mvnfont| to be \meta{font}. +% \begin{macrocode} +\newcounter{streamvline} +\newcommand{\streamvnumfont}[1]{\def\stre@mvnfont{#1}} +\streamvnumfont{\footnotesize} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\streamvfont} +% \begin{macro}{\verbatim@font} +% |\streamvfont|\marg{font} defines |\verbatim@font| to use \meta{font}. +% \begin{macrocode} +\newcommand{\verbatimfont}[1]{% + \def\verbatim@font{#1% + \hyphenchar\font\m@ne + \let\do\do@noligs + \verbatim@nolig@list}} +\verbatimfont{\normalfont\ttfamily} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\numbervstream} +% |\numbervstream| puts numbers at the start of each line read verbatim. +% \begin{macrocode} +\newcommand{\numbervstream}{% + \setcounter{streamvline}{0}% + \def\verbatim@processline{% + \addtocounter{streamvline}{1}% + \leavevmode + {\stre@mvnfont \thestreamvline}\space + \the\verbatim@line\par}% +} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\marginnumbervstream} +% |\marginnumbervstream| puts numbers in the margin at the start of +% each line read verbatim. +% \begin{macrocode} +\newcommand{\marginnumbervstream}{% + \setcounter{streamvline}{0}% + \def\verbatim@processline{% + \addtocounter{streamvline}{1}% + \leavevmode + \llap{{\stre@mvnfont \thestreamvline} \hskip\@totalleftmargin} + \the\verbatim@line\par}% +} + +% \end{macrocode} +% \end{macro} +% +% The end of the \Lpack{newfile} package. +% \begin{macrocode} +% +% \end{macrocode} +% +% +% +% \bibliographystyle{alpha} +% +% \begin{thebibliography}{GMS94} +% +% \bibitem[GMS94]{GOOSSENS94} +% Michel Goossens, Frank Mittelbach, and Alexander Samarin. +% \newblock \emph{The LaTeX Companion}. +% \newblock Addison-Wesley Publishing Company, 1994. +% +% \bibitem[MG95]{ENDFLOAT} +% James Darrell McCauley and Jeff Goldberg. +% \newblock `The \texttt{endfloat} package'. +% \newblock October, 1995. +% +% \bibitem[Pif96]{ANSWERS} +% Mike Piff. +% \newblock `Production of solution sheets in LaTeX2e'. +% \newblock July, 1996. +% +% \bibitem[SRR99]{VERBATIM} +% Rainer Sch\"{o}pf, Bernd Raichle, and Chris Rowley. +% \newblock `A New Implementation of LaTeX's \texttt{verbatim} and +% \texttt{verbatim*} Environments'. +% \newblock December, 1999. +% +% \end{thebibliography} +% +% +% \Finale +% \PrintIndex +% +\endinput + +%% \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 \~} + diff --git a/Master/texmf-dist/source/latex/newfile/newfile.ins b/Master/texmf-dist/source/latex/newfile/newfile.ins new file mode 100644 index 00000000000..ba21c320bca --- /dev/null +++ b/Master/texmf-dist/source/latex/newfile/newfile.ins @@ -0,0 +1,61 @@ +%% +%% newfile.ins +%% +%% This program is provided under the terms of the +%% LaTeX Project Public License distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Author: Peter Wilson (CUA) +%% now at: peter.r.wilson@boeing.com +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{newfile.ins} +\input docstrip.tex +\preamble + + This program is provided under the terms of the + LaTeX Project Public License distributed from CTAN + archives in directory macros/latex/base/lppl.txt. + + Author: Peter Wilson (CUA) + now at: peter.r.wilson@boeing.com + +\endpreamble + +\keepsilent + +%% \Msg{*** Generating the driver file ***} + +%% \generateFile{newfile.drv}{t}{\from{newfile.dtx}{driver}} + +\Msg{*** Generating the LaTeX2e package files ***} + +\generateFile{newfile.sty}{t}{\from{newfile.dtx}{outin}} + + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by LaTeX. See the FAQ on} +\Msg{* CTAN at /help/uk-tex-faq for more on this.} +\Msg{*} +\Msg{* \space\space newfile.sty} +\Msg{*} +\Msg{*} +\Msg{* To produce the documented source run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{* For an index process any name.idx file by:} +\Msg{* \space\space\space\space makeindex -s gind.ist name} +\Msg{* Process any name.glo file by:} +\Msg{* \space\space\space\space makeindex -s gglo.ist -o name.gls name.glo} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + +\endinput -- cgit v1.2.3