TUG Unix CD: HTML documentation

Joachim Schrod TWG-TDS@SHSU.edu
Mon, 26 Feb 1996 14:53:42 +0100


>>>>> "UV" == Ulrik Vieth <vieth@thphy.uni-duesseldorf.de> writes:

UV> Sebastian wrote:
>> QUESTION

>> i am getting very confused over texmf/source and texmf/doc for .dtx
>> files. if you take a package with his
>> x.ins
>> x.dtx
>> sample.tex
>> readme

>> what files do you put in which directory in a really nice working TDS?

UV> I usually start by putting all these files as they come from CTAN
UV> into texmf/source/latex/<package>.  Then I procede as follows:

I do almost the same, but would like to add my changes, FYI,

UV> 2. Run latex x.dtx to produce the documentation (it usually takes
UV>    several latex runs) and move/copy the resulting *.{dvi,ps} files 
UV>    to ../../../doc/latex/<package>

Use tex-it for getting fully TeXed documents, a script posted
infrequently by me. I append it below.

UV> The remaining question is whether step 2. should be done using 
UV> a ltxdoc.cfg file containg \OnlyDescription or whether you want
UV> full source documentation (including index and change history).

Yes. For my convenience, I have globally installed the following
ltxdoc.cfg:

================ snip snap ========================================
% ltxdoc.cfg					11 Jan 95
%------------------------------------------------------------

%
% Configuration for LaTeX standard class `ltxdoc'
% (Program documentation for LaTeX)
%


% A4 paper is used almost everywhere, except in the US; make that the
% default.

\PassOptionsToClass{a4paper}{article}

% If a file `OnlyDesc' exists in the input path, we just typeset the
% description (i.e., everything until \StopEventually). That's a
% convenient way to get only the user documentation from style files
% that use the ltxdoc class for documentation.

\InputIfFileExists{OnlyDesc}{%
	\AtBeginDocument{\OnlyDescription}%
    }{}


\endinput
================ snip snap ========================================

i.e., if a file `OnlyDesc' exists in the current directory, only the
description of a .dtx files is typeset. That allows me to `touch
OnlyDesc' instead of creating a package specific ltxdoc.cfg that would
override my global one.


And here is tex-it:
================ snip snap ========================================
#!/bin/sh
# $ITI: tex-it,v 1.3 1995/06/14 10:49:12 schrod Exp $
#----------------------------------------------------------------------

#
# tex-it  ---  transform a TeX document to a final DVI file
#
# (history at end)


# SYNOPSIS
#
#	tex-it [-bi] tex-cmd file
#
# tex-it runs 'tex-cmd' on 'file' as often as necessary to produce a
# DVI file where all cross references are resolved. That convergence
# is reached by analyzing auxilliary files:
#  -- If file.toc has changed, the table of contents is not up to date.
#  -- If file.idx has changed, the index is not up to date.
#     MakeIndex is assumed to be used for creating the index.
#  -- If file.aux has changed, cross references are not up to date.
#  -- If file.aux contains a "\bibdata" tag and if the set of
#     "\citation" tags have changed, then BibTeX is run.
#
# No other auxilliary files are handled. No subdocuments (via
# "\include") are supported.
#
# 'tex-cmd' may be more than one word.
#
#
# OPTIONS
#   `-b'	skip test for BibTeX
#   `-i'	skip test for MakeIndex

# NOTE: On HP-UX this script is not functional, you have to substitute
# /bin/sh by /bin/ksh in the first line. (/bin/sh doesn't have the
# getopts builtin.)


cmd=`basename $0`
usage()
{
	echo "usage: $cmd [-bi] tex-cmd file" >&2
	exit 1
}


# Normalize and check arguments.

do_bibtex=true
do_makeindex=true
while getopts 'bi' option
   do	case "$option" in
	    b)	do_bibtex=''
		;;
	    i)	do_makeindex=''
		;;
	    *)	usage
		;;
	esac
   done

shift `expr $OPTIND - 1`
test $# -gt 0  ||  usage


# Get file name (last argument), discard extension if necessary.

file=`eval "echo \\$$#"`
file=`echo $file | sed 's/\.[^.]*//'`


# Create temporary directory for auxilliary files to compare. Discard
# that directory if the script is terminated. Note that trap handler
# for 0 is executed at the end of the trap handler for the other
# signals.

tmp=/tmp/tex$$
trap "/bin/rm -rf $tmp" 0
trap "exit 4" 1 2 3 15
mkdir $tmp


# ------------------------------------------------------------
#
# Set up functions that save auxilliary information and check if they
# have changed. Save functions are called `save_<type>', check
# functions are called `check_<type>'. Check functions set $run_tex to
# "true" if TeX must be run anew. Check functions may run programs to
# create other auxilliary files.


# aux: table of contents & cross references
#
# We don't check for *.toc files. LaTeX stores the information in the
# AUX file anyhow, and plain-based macros typically produce the table
# of contents at the end of the document, when it's guaranteed to be
# OK.

save_aux()
{
	if [ -f "$file.aux" ]
	   then	cp "$file.aux" $tmp
	   else	touch "$tmp/$file.aux"
	fi
}

check_aux()
{
	test -f "$file.aux"  ||  return 0
	cmp -s "$file.aux" "$tmp/$file.aux"  ||  run_tex=true
}


# bibtex: Citations

save_bibtex()
{
	if [ -f "$file.aux" ]
	   then	egrep '^\\(citation|bibdata)' "$file.aux"  |
			sort >"$tmp/$file.bib"
	   else	touch "$tmp/$file.bib"
	fi
}


check_bibtex()
{
	test "$do_bibtex" -a -f "$file.aux"  ||  return 0
	egrep '^\\(citation|bibdata)' "$file.aux"  |  sort >$tmp/bib.new
	if grep '^\\bibdata' $tmp/bib.new >/dev/null
	   then	if cmp -s "$tmp/$file.bib" $tmp/bib.new
		   then	: do nothing
		   else	bibtex "$file"
			run_tex=true
		fi
	fi
}


# idx: raw index data

save_idx()
{
	if [ -f "$file.idx" ]
	   then	cp "$file.idx" $tmp
	   else	touch "$tmp/$file.idx"
	fi
}

check_idx()
{
	test "$do_makeindex" -a -f "$file.idx"  ||  return 0
	if cmp -s "$file.idx" "$tmp/$file.idx"
	   then	: do nothing
	   else	makeindex "$file"
		run_tex=true
	fi
}


# Two functions that collect the functions above.

save_aux_info()
{
	save_aux
	save_bibtex
	save_idx
}

check_aux_info()
{
	check_aux
	check_bibtex
	check_idx
}


# Process the document by TeX. Determine if TeX must be run anew by
# the functions realized above.

run_tex=true
while [ "$run_tex" ]
   do	save_aux_info
	"$@"
	run_tex=''
	check_aux_info
   done



#======================================================================
#
# $ITIlog: tex-it,v $
# Revision 1.3  1995/06/14  10:49:12  schrod
#     HP-UX /bin/sh doesn't grok getopts, use ksh instead.
#
# Revision 1.2  1995/04/19  14:31:06  schrod
#     Support MakeIndex call, too.
#
# Revision 1.1  1995/03/14  17:07:26  schrod
#     Added script to process a TeX document.
#
================ snip snap ========================================


Shall I make a package out of this script? (I'll leave for a
conference RSN, where I will be the rest of the week, don't expect
stuff from me before the next weekend.)

Cheers,
	Joachim

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Joachim Schrod					Email: jschrod@acm.org
Roedermark, Germany
Net & publication consultant