% \iffalse meta-comment % % Author: Peter Wilson (CUA) (now at: peter.r.wilson@boeing.com) % % This system is released under the LaTeX Project Public License. % % This system is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % %<*driver> \documentclass{ltxdoc} \usepackage{url} \newcommand{\makecolonletter}{\catcode`\:11\relax} \renewcommand{\MakePrivateLetters}{\makeatletter\makecolonletter} \EnableCrossrefs \CodelineIndex \setcounter{StandardModuleDepth}{1} \begin{document} \DocInput{step4ht.dtx} \end{document} % % % \fi % % \CheckSum{503} % % \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@} % \DoNotIndex{\HCode} % % \changes{v0.1}{2000/01/20}{First public release} % % \def\fileversion{v0.1} % \def\filedate{2000/01/20} % \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 % \newcommand*{\texht}{\Lpack{TeX4ht}} ^^A typeset TeX4ht % % \title{The \Lpack{step4ht} \texht{} 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{step4ht} package, in conjunction with \texht{} % can be used to convert \LaTeX{} % STEP documents into HTML tagged documents. % \end{abstract} % \tableofcontents % % \StopEventually{} % % % % \section{Introduction} % % The \Lpack{step4ht} package can be used in conjunction with % the \texht{} system to convert \LaTeX{} ISO~10303 (STEP) documents % into HTML tagged documents. % % Section~\ref{sec:usc} describes the package and % commented source code for the package is in Section~\ref{sec:code}. % % 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}. % % \subsection{Acknowledgement} % % Development of the \Lpack{step4ht} package would not have been possible % without the help and expertise of Eitan Gurari, and in particular his % willingness to put up with the many questions I asked. % % % \section{The \Lpack{step4ht} package} \label{sec:usc} % % The \texht{} system has been developed by Eitan Gurari (see Chapter~4 % and Appendix~B in~\cite{GOOSSENS99}). It is a general purpose conversion % system to convert \LaTeX{} tagged documents into HTML (or other *ML) % tagged documents. \texht{} can be obtained from % \url{http://www.cis.ohio-state.edu/~gurari/TeX4ht/mn.html}. % The \Lpack{step4ht} % package is not guaranteed to work with versions of \texht{} earlier % than mid-January 2000. At the time of writing, the default \texht{} % distribution was dated mid-1999. The latest version of \texht{} is obtainable % from \url{http://www.cis.ohio-state.edu/~gurari/TeX4ht/bugfixes.html}. % % To use the \Lpack{step4ht} package, just process the \LaTeX{} document % as you would any other under \texht. That is, either call the |ht| script % on a document starting like: % \begin{verbatim} % \documentclass[...]{isov2} % \usepackage[...]{tex4ht} % \usepackage{isov13} % ... % \end{verbatim} % or call the |htlatex| script on a document without the % |\usepackage[...]{tex4ht}| line. % % % \section{The package code} \label{sec:code} % % The following code is based on \Lpack{html0.4ht}, % \Lpack{html32.4ht} and \Lpack{html4.4ht}, all written by Eitan Gurari, % together with code in the \Lpack{iso4ht} package. % % Most of the necessary work already exists in \Lpack{latex.4ht}, which % sets up the \LaTeX{} kernel code and the \Lpack{iso4ht} package % which provides the setup and configuration for the % \Lpack{iso} class, together with \Lpack{html0.4ht}, % \Lpack{html32.4ht} and \Lpack{html4.4ht} provide the HTML option-related % configurations for the kernel code. % The HTML option-related configurations are % embedded in \Lpack{stepv13.4ht} instead of being supplied as % seperate files. % % \changes{v0.1}{2000/01/20}{First public release} % % Announce the name and version of the package. % \begin{macrocode} %<*usc> \typeout{[stepv13.4ht 2000/01/20 version v0.1]} % \end{macrocode} % % \subsection{Setup and hooks} % % The first major part of the code deals with setting up for configuring % the \LaTeX{} commands and environments, which forms the second major % portion of the code. % % Setting up may involve adding hooks into commands, either by redefining % them or, in simpler cases prepending and/or appending code before and/or % after the original code. It can also involve specifying that commands % are configurable. % % % \subsubsection{The STEP cover page} % % The |\STEPcover| command is implemented as a |picture| environment. % \LaTeX{} pictures are usually presented as \file{.gif} images in \texht, % so some major surgery is done to avoid pictures in this case. % % First, we redefine the commands that correspond to the |\STEPcover| % picture placement commands. % % \DescribeMacro{\wg} % The Working Group. % \begin{macrocode} \renewcommand{\wg}[1]{\def\@wg{/#1}} % \end{macrocode} % % \DescribeMacro{\oldwg} % The old Working Group. % \begin{macrocode} \renewcommand{\oldwg}[1]{\def\@oldwg{/#1}} % \end{macrocode} % % \DescribeMacro{\@docnumber} % \DescribeMacro{\docnumber} % \DescribeMacro{\donumber} % The document number, where |\donumber| has hooks and typesets the number. % \begin{macrocode} \renewcommand{\@docnumber}{/N} \renewcommand{\docnumber}[1]{\def\@docnumber{/N#1}} \def\donumber{\a:donumber ISO TC 184/SC4\@wg\@docnumber \b:donumber} \NewConfigure{donumber}{2} % \end{macrocode} % % \DescribeMacro{\@docdate} % \DescribeMacro{\docdate} % \DescribeMacro{\dodocdate} % The document date, where |dodocdate| has hooks and typesets the date. % \begin{macrocode} \renewcommand{\@docdate}{Date: } \renewcommand{\docdate}[1]{\def\@docdate{\textbf{Date: #1}}} \def\dodocdate{\a:dodocdate \@docdate \b:dodocdate} \NewConfigure{dodocdate}{2} % \end{macrocode} % % \DescribeMacro{\@olddocnumber} % \DescribeMacro{\olddocnumber} % \DescribeMacro{\doolddocnumber} % The previous document number, where |\dooldnumber| has hooks and % typesets the number. % \begin{macrocode} \renewcommand{\@olddocnumber}{/N} \renewcommand{\olddocnumber}[1]{\def\@olddocnumber{/N#1}} \def\dooldnumber{\a:dooldnumber Supersedes ISO TC 184/SC4\@oldwg\@olddocnumber \b:dooldnumber} \NewConfigure{dooldnumber}{2} % \end{macrocode} % % \DescribeMacro{\dopartno} % Typeset the Part number (and ballot cycle). % \begin{macrocode} \newcommand{\dopartno}{% \ifnum\value{b@cyc} < 2\relax {\bf ISO\thest@tus\ 10303-\thespartno} \else {\bf ISO\thest@tus\ 10303-\thespartno.\theb@cyc} \fi} \pend:def\dopartno{\a:dopartno} \append:def\dopartno{\b:dopartno} \NewConfigure{dopartno}{2} % \end{macrocode} % % \DescribeMacro{\doptitle} % Typeset the Part title. % \begin{macrocode} \newcommand{\doptitle}{% {\bf \st@pn@me : \thes@ries : \thed@ctitle} } \pend:def\doptitle{\a:doptitle} \append:def\doptitle{\b:doptitle} \NewConfigure{doptitle}{2} % \end{macrocode} % % \DescribeMacro{\cpnotice} % Typeset the title COPYRIGHT NOTICE. % \begin{macrocode} \newcommand{\cpnotice}{\a:cpnotice COPYRIGHT NOTICE \b:cpnotice} \NewConfigure{cpnotice}{2} % \end{macrocode} % % \DescribeMacro{\@abstract} % \DescribeMacro{\abstract} % \DescribeMacro{\doabstract} % The abstract, where |\doabstract| has hooks and typesets the abstract. % \begin{macrocode} \renewcommand{\@abstract}{\textbf{ABSTRACT}: } \renewcommand{\abstract}[1]{\def\@abstract{\textbf{ABSTRACT}: #1}} \def\doabstract{\a:doabstract \@abstract \b:doabstract} \NewConfigure{doabstract}{2} % \end{macrocode} % % \DescribeMacro{\@keywords} % \DescribeMacro{\keywords} % \DescribeMacro{\dokeywords} % The KEYWORDS, where |\dokeywords| has hooks and typesets the keywords. % \begin{macrocode} \renewcommand{\@keywords}{\textbf{KEYWORDS}: } \renewcommand{\keywords}[1]{\def\@keywords{\textbf{KEYWORDS}: #1}} \def\dokeywords{\a:dokeywords \@keywords \b:dokeywords} \NewConfigure{dokeywords}{2} % \end{macrocode} % % \DescribeMacro{\@comread} % \DescribeMacro{\comread} % \DescribeMacro{\docomread} % The COMMENTS TO READERS, where |\docomread| has hooks and typesets the % comments. % \begin{macrocode} \renewcommand{\@comread}{\textbf{COMMENTS TO READER}: } \renewcommand{\comread}[1]{\def\@comread{\textbf{COMMENTS TO READER}: #1}} \def\docomread{\a:docomread \@comread \b:docomread} \NewConfigure{docomread}{2} % \end{macrocode} % % \DescribeMacro{\owner} % \DescribeMacro{\address} % \DescribeMacro{\telephone} % \DescribeMacro{\fax} % \DescribeMacro{\email} % Contact information for the project leader. % \begin{macrocode} \renewcommand{\owner}[1]{\def\@owner{#1}} \renewcommand{\address}[1]{\def\@address{#1}} \renewcommand{\telephone}[1]{\def\@telephone{#1}} \renewcommand{\fax}[1]{\def\@fax{#1}} \renewcommand{\email}[1]{\def\@email{#1}} % \end{macrocode} % % \DescribeMacro{\altowner} % \DescribeMacro{\altaddress} % \DescribeMacro{\alttelephone} % \DescribeMacro{\altfax} % \DescribeMacro{\altemail} % Contact information for the document editor. % \begin{macrocode} \renewcommand{\altowner}[1]{\def\@altowner{#1}} \renewcommand{\altaddress}[1]{\def\@altaddress{#1}} \renewcommand{\alttelephone}[1]{\def\@alttelephone{#1}} \renewcommand{\altfax}[1]{\def\@altfax{#1}} \renewcommand{\altemail}[1]{\def\@altemail{#1}} % \end{macrocode} % % % \DescribeMacro{\STEPcover} % The |\STEPcover| command is redefined to add hooks at the start and end. % \begin{macrocode} \renewcommand{\STEPcover}[1]{ \a:STEPcover #1 \drawcoversheet \b:STEPcover } \NewConfigure{STEPcover}{2} % \end{macrocode} % % \DescribeMacro{\drawcoversheet} % |\drawcoversheet| is redefined to typeset the cover instead of drawing it. % \begin{macrocode} \renewcommand{\drawcoversheet}{ \donumber \\ \dodocdate \\ \dooldnumber \\ \dopartno \\ \doptitle \\ \ifc@pyrightopt \ifisst@ndard \input{bpfsX} \fi % IS \iffdisst@ndard \input{bpfs2} \fi % FDIS \ifdisst@ndard \input{bpfs3} \fi % DIS \ifcdst@ndard \input{bpfs4} \fi % CD \ifwdst@ndard \input{bpfs4} \fi % WD \ift@chrep \input{bpfsX} \fi % Tech Report \fi \doabstract \\ \dokeywords \\ \docomread \\ \begin{tabular}{|l|p{0.3\textwidth}|p{0.3\textwidth}|} \hline & Project Leader & Project Editor \\ \hline Name & \@owner & \@altowner \\ Address & \@address & \@altaddress \\ Telephone & \@telephone & \@alttelephone \\ TeleFacsimile & \@fax & \@altfax \\ Email & \@email & \@altemail \\ \hline \end{tabular} % \end{macrocode} % And, as before, clear out the cover commands which are no longer needed. % \begin{macrocode} \undef@covercmds } % \end{macrocode} % % % \subsubsection{Miscellaneous} % % \DescribeMacro{\@presteptitle} % \DescribeMacro{\stepparttitle} % The |\stepparttitle| is redefined to use the |\titleclause*| command % as defined in the \Lpack{iso4ht} package. The |\@presteptitle| command % is just a helper. The configuration of |\titleclause*| is defined % in \Lpack{iso4ht}. % \begin{macrocode} \newcommand{\@presteptitle}{\scivm@in \stepc@mp \thisp@rtno{\thespartno}} \renewcommand{\stepparttitle}[1]{% \gdef\thestepparttitle{{\@presteptitle \sptitle{#1}}} \titleclause*{\thestepparttitle} } % \end{macrocode} % % % \subsection{Configuration} % % All, or nearly all, configurations depend on the HTML level option chosen. % Typically, html0 results in empty or null values of the hooks; % the |\NewConfigure| command provides empty configurations. html32 has % some simple hook values, while html4 are the most complex. % % % \subsubsection{STEP cover page} % % \begin{macro}{\STEPcover} % \begin{macro}{\donumber} % \begin{macro}{\dodocdate} % \begin{macro}{\dooldnumber} % \begin{macro}{\dopartno} % \begin{macro}{\doptitle} % \begin{macro}{\cpnotice} % \begin{macro}{\doabstract} % \begin{macro}{\dokeywords} % \begin{macro}{\docomread} % \begin{macrocode} \:CheckOption{0.0} \if:Option %%%% html0.0 \else \:CheckOption{3.2} \if:Option %%%% html3.2 \Configure{STEPcover}{\HCode{
}}{\HCode{
}} \Configure{donumber}{\HCode{

}}{\HCode{

}} \Configure{dodocdate}{\HCode{
}}{\HCode{
}} \Configure{dooldnumber}{\HCode{

}}{\HCode{

}} \Configure{dopartno}{\HCode{

}}{} \Configure{doptitle}{}{\HCode{

}} \Configure{cpnotice}{\HCode{
}}{\HCode{
}} \Configure{doabstract}{\HCode{
}}{\HCode{
}} \Configure{dokeywords}{\HCode{
}}{\HCode{
}} \Configure{docomread}{\HCode{
}}{\HCode{
}} \else %%%% html4.0 \Configure{STEPcover}{\HCode{
}}{\HCode{
}} \Configure{STEPcover}{\HCode{
}}{\HCode{
}} \Configure{donumber}{\HCode{

}}{\HCode{

}} \Configure{dodocdate}{\HCode{
}}{\HCode{
}} \Configure{dooldnumber}{\HCode{

}}{\HCode{

}} \Configure{dopartno}{\HCode{

}}{} \Configure{doptitle}{}{\HCode{

}} \Configure{cpnotice}{\HCode{
}}{\HCode{
}} \Configure{doabstract}{\HCode{
}}{\HCode{
}} \Configure{dokeywords}{\HCode{
}}{\HCode{
}} \Configure{docomread}{\HCode{
}}{\HCode{
}} \fi \fi % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Miscellaneous} % % \begin{macro}{\start:env} % \begin{macro}{\end:env} % Currently these are defined in the \file{html*.4ht} files but they might % dissapear in future, so make sure they are defined. % \begin{macrocode} \:CheckOption{0.0} \if:Option %%%% html0.0 \def\start:env#1{} \def\end:env{} \else \CheckOption{3.2} \if:Option %%%% html3.2 \def\start:env#1{\IgnorePar\HCode{<\tbl:XV{#1}><\tbl:XV{#1}>}} \def\end:env{\IgnorePar \end:TTT\HCode{}\ShowPar} \fi \fi % \end{macrocode} % \end{macro} % \end{macro} % % \begin{environment}{espec} % \begin{environment}{fspec} % \begin{environment}{rspec} % \begin{environment}{sspec} % \begin{environment}{tspec} % \begin{environment}{dtext} % \begin{environment}{attrlist} % \begin{environment}{fproplist} % \begin{environment}{iproplist} % \begin{environment}{enumlist} % \begin{environment}{arglist} % \begin{environment}{majorsublist} % These are all simple environments, except for |majorsublist| which is % a wrapper for |itemize|. % \begin{macrocode} \:CheckOption{0.0} \if:Option %%%% html0.0 \ConfigureEnv{espec}{}{}{}{} \ConfigureEnv{fspec}{}{}{}{} \ConfigureEnv{rspec}{}{}{}{} \ConfigureEnv{sspec}{}{}{}{} \ConfigureEnv{tspec}{}{}{}{} \ConfigureEnv{dtext}{}{}{}{} \ConfigureEnv{attrlist}{}{}{}{} \ConfigureEnv{fproplist}{}{}{}{} \ConfigureEnv{iproplist}{}{}{}{} \ConfigureEnv{enumlist}{}{}{}{} \ConfigureEnv{arglist}{}{}{}{} \ConfigureEnv{majorsublist}{}{}{}{} \else \:CheckOption{3.2} \if:Option %%%% html3.2 \ConfigureEnv{espec}{\start:env{espec}}{\end:env}{}{} \ConfigureEnv{fspec}{\start:env{fspec}}{\end:env}{}{} \ConfigureEnv{rspec}{\start:env{rspec}}{\end:env}{}{} \ConfigureEnv{sspec}{\start:env{sspec}}{\end:env}{}{} \ConfigureEnv{tspec}{\start:env{tspec}}{\end:env}{}{} \ConfigureEnv{dtext}{\start:env{dtext}}{\end:env}{}{} \ConfigureEnv{attrlist}{\start:env{attrlist}}{\end:env}{}{} \ConfigureEnv{fproplist}{\start:env{fproplist}}{\end:env}{}{} \ConfigureEnv{iproplist}{\start:env{iproplist}}{\end:env}{}{} \ConfigureEnv{enumlist}{\start:env{enumlist}}{\end:env}{}{} \ConfigureEnv{arglist}{\start:env{arglist}}{\end:env}{}{} \ConfigureEnv{majorsublist}{\start:env{majorsublist}}{\end:env}{}{} \else %%%% html4.0 \ConfigureEnv{espec}{\start:env{espec}}{\end:env}{}{} \ConfigureEnv{fspec}{\start:env{fspec}}{\end:env}{}{} \ConfigureEnv{rspec}{\start:env{rspec}}{\end:env}{}{} \ConfigureEnv{sspec}{\start:env{sspec}}{\end:env}{}{} \ConfigureEnv{tspec}{\start:env{tspec}}{\end:env}{}{} \ConfigureEnv{dtext}{\start:env{dtext}}{\end:env}{}{} \ConfigureEnv{attrlist}{\start:env{attrlist}}{\end:env}{}{} \ConfigureEnv{fproplist}{\start:env{fproplist}}{\end:env}{}{} \ConfigureEnv{iproplist}{\start:env{iproplist}}{\end:env}{}{} \ConfigureEnv{enumlist}{\start:env{enumlist}}{\end:env}{}{} \ConfigureEnv{arglist}{\start:env{arglist}}{\end:env}{}{} \ConfigureEnv{majorsublist}{\start:env{majorsublist}}{\end:env}{}{} \fi \fi % \end{macrocode} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % % \begin{environment}{expdesc} % This is a list environment, similar to the |description| environment, % except that there is a colon after the label. % It is called from within the |...list| environments after a local heading. % \begin{macrocode} \:CheckOption{0.0} \if:Option %%%% html0.0 \ConfigureList{expdesc}{}{}{}{} \else \:CheckOption{3.2} \if:Option %%%% html3.2 \ConfigureList{expdesc}% {\HCode{
}} {\HCode{
}\ShowPar} {\HCode{
\bgroup \bf} {: \egroup\HCode{}} \else %%%% html4.0 \ConfigureList{expdesc}% {\EndP\HCode{
}\let\end:itm=\empty} {\EndP\HCode{
}\ShowPar} {\end:itm\def\end:itm{\EndP\Tg} \HCode{
}\bgroup \bf} {: \egroup\EndP\HCode{
}} \fi \fi % \end{macrocode} % \end{environment} % % \begin{macrocode} \endinput % \end{macrocode} % % The end of the package % \begin{macrocode} % % \end{macrocode} % % \subsection{Observations} % % There are three main aspects to developing \texht{} code and % configurations for a new package: % \begin{enumerate} % \item Finding out what hooks and configurations are already available. % \item Determining what additional hooks, and where they should be put, for % the new package. % \item Configuring all the hooks. % \end{enumerate} % % \texht{} has added many hooks to the \LaTeX{} kernel and packages % based on kernel code inherit those hooks. I found it advisable to run % a test document with the new package(s) through \texht{} to see what % the result looked like. Depending on the package it may be that % the inherited hooks and configuration are sufficient and nothing needs % to be done. % % For this particular package, only a few new hooks were required, % but it was % necessary in some cases to drastically revamp some of the package code --- % most noticeably for the |\STEPcover| command. Actually, as I am also the % author of the \Lpack{step} package I did have the luxury of being able to % change some of the internal package code to make a better match between the % \LaTeX{} typesetting view of the world and the \texht{} world view. % % There are other packages that, in their turn, use the \Lpack{step} % package and it turned % out that they required no new hooks or changes to the existing % configurations. % % The rest of this section is concerned with item~2, namely % adding hooks. % % \subsubsection{Colon is a letter} % % Within the \texht{} `environment', that is the \file{*.4ht} % files, the colon character (|:|) acts as a letter in a similar manner % as the at character (|@|) does in class and package files; |@| is also % treated as a letter in the environment. Normally, something like % |\start:env{myenv}| would be treated as the command |\start| followed by % the text |:env{myenv}|. In the \texht{} environment it is the command % |\start:env| with the argument |{myenv}|. If any commands like this % occur in the preamble to a \LaTeX{} document, then they must be surrounded % by |\makecolonletter| and |\restorecolon|, which may be defined % as:\footnote{Note that a package may redefine the category code for % the colon, which is why the old value is saved.} % \begin{verbatim} % \chardef\oldcolon=\thecatcode`\: % \newcommand{\makecolonletter}{\catcode`\:11\relax} % \newcommand{\restorecolon}{\catcode`\:=\oldcolon\relax} % \end{verbatim} % % The fact that command names can include a colon means that you have % to be careful in code that includes any colon characters. In \LaTeX, % code like like |{footnote \thefootnote:}| will print the footnote number % immediately followed by a colon (e.g., |footnote 3:|). In the \texht{} % environment you are more likely to get an error message saying that % |\thefootnote:| is undefined! Instead, this needs to be coded as % |{footnote \thefootnote :}|, so that the |\thefootnote| command is ended % by the space before the colon. % % \subsubsection{Adding code and hooks} % % A \LaTeX{} idiom for adding code at the start and/or end of % an existing macro which takes no arguments called, say |\foo|, is: % \begin{verbatim} % \let\oldfoo\foo % \renewcommand{\foo}{new-start-code \oldfoo new-end-code} % \end{verbatim} % Similarly for commands |\baz| and |\biz| which take one and two arguments % respectively: % \begin{verbatim} % \let\oldbaz\baz % \renewcommand{\baz}[1]{new-start-code \oldbaz{#1} new-end-code} % \let\oldbiz\biz % \renewcommand{\biz}[2]{new-start-code \oldbiz{#1}{#2} new-end-code} % \end{verbatim} % % As these kinds of redefinitions are a common occurrence % \file{tex4ht.sty} provides commands that encapsulate the above idiom. % These are |\pend:def\foo{new-start-code}| and % |\append:def\foo{new-end-code}| for when |\foo| is a macro without % arguments, and there are similar commands for prepending and appending % to macros with up to three arguments. Repeating and extending % the \LaTeX{} example, % in the \texht{} environment it could be coded as: % \begin{verbatim} % \pend:def\foo{new-start-code} % \foo has no arguments % \append:def\foo{new-end-code} % \pend:defI\baz{new-start-code} % \baz has one argument % \append:defI\baz{new-end-code} % \pend:defII\biz{new-start-code} % \biz has two arguments % \append:defII\biz{new-end-code} % \pend:defIII\boz{new-start-code} % \boz has three arguments % \append:defIII\boz{new-end-code} % \end{verbatim} % % The definition of a hook in a macro called, say |\buz|, takes % the form |\X:buz| where X is a single letter. For example, adding a % configurable hook % at the start and end of the macro |\baz| can be done like this: % \begin{verbatim} % \pend:defI\baz{\a:baz} % hook at start % \append:defI\baz{\b:baz} % hook at end % \NewConfigure{baz}{2} % declare \baz has two configurable hooks % \end{verbatim} % Note that by default a |\NewConfigure{baz}{2}| command expects the hook % corresponding to the first argument to be |\a:baz| and the hook % corresponding to the second argument to be |\b:baz|. Extending the % example, |\NewConfigure{foo}{9}| will expect the hook corresponding to % the ninth argument to be |\i:foo| (`i' is the ninth letter of the % alphabet). This default setting for |\NewConfigure| has been created via: \\ % |\Configure{NewConfigure}{a:}{b:}{c:}{d:}{e:}{f:}{g:}{h:}{i:}| \\ % in \file{tex4ht.sty}. % % % As an example for hook insertion, assume a macro defined like: \\ % |\newcommand{\mac}[1]{START #1 END}| \\ % in which there are four potential places for hooks (call them h1 to h4): \\ % |{h1 START h2 #1 h3 END h4}|. Hooks h1 and h4 can be added via |\pend:defI| % and |\append:defI|, but these are not sufficient by themselves. Other % methods are required for inserting all four hooks. Two of these are: % \begin{itemize} % \item Redefine the whole macro from scratch: % \begin{verbatim} % \renewcommand{\mac}[1]{\a:mac START \c:mac #1 \d:mac END \b:mac} % \NewConfigure{mac}{4} % \end{verbatim} % % \item Reuse parts of the original macro % (similar to the \LaTeX{} ap/pre-pending idiom): % \begin{verbatim} % \let\oldmac\mac % \renewcommand{\mac}[1]{\a:mac\oldmac{\c:mac #1 \d:mac}\b:mac} % \NewConfigure{mac}{4} % \end{verbatim} % \end{itemize} % Either of these examples can be configured via: % \begin{verbatim} % \Configure{mac}% % {first arg for a hook} % \a:mac at the start of the command % {second arg for a hook} % \b:mac at the end of the command % {third arg for a hook} % \c:mac immediately before the argument % {fourth arg for a hook} % \d:mac immediately after the argument % \end{verbatim} % Note that the hooks do not have to be placed in the |\mac| command in % alphabetical order. % % % % % \bibliographystyle{alpha} % % \begin{thebibliography}{GMS94} % % \bibitem[GMS94]{GOOSSENS94} % Michel Goossens, Frank Mittelbach, and Alexander Samarin. % \newblock \textit{The LaTeX Companion}. % \newblock Addison-Wesley Publishing Company, 1994. % % \bibitem[GR99]{GOOSSENS99} % Michel Goossens and Sebastian Rahtz % (with Eitan Gurari, Ross Moore, and Robert Sutor). % \newblock \textit{The LaTeX Web Companion --- Integrating TeX, HTML, and XML}. % \newblock Addison-Wesley Publishing Company, 1999. % % \bibitem[Wil96]{PRW96i} % Peter~R. Wilson. % \newblock \textit{{LaTeX for standards: The LaTeX package files user manual}}. % \newblock NIST Report NISTIR, June 1996. % % \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 \~}