Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CTWILL(1)		     General Commands Manual		       CTWILL(1)

NAME
     ctwill,  ctwill-proofsort, ctwill-refsort, ctwill-twinx - translate CWEB to
     TeX with mini-indexes

SYNOPSIS
     ctwill [options] webfile[.w] [{changefile[.ch]|-} [outfile[.tex]]]
     ( ctwill-proofsort < texfile.tex ) 1<> texfile.tex
     ctwill-refsort < indexfile.ref > indexfile.sref
     ctwill-twinx outfile.tex [outfile.tex ...]  > index.tex

DESCRIPTION
     The ctwill program converts a CWEB source document into a TeX file that may
     be formatted and printed in the usual way.  It takes  appropriate	care  of
     typographic  details  like page layout and the use of indentation, italics,
     boldface, etc., and it supplies extensive cross-index information	that  it
     gathers automatically.

     CWEB allows you to prepare a single document containing all the information
     that  is needed both to produce a compilable C/C++ program and to produce a
     well-formatted document describing the program in as  much  detail  as  the
     writer  may desire.  The user of CWEB ought to be familiar with TeX as well
     as C/C++.

USAGE
     The command line should have one, two, or three names on it.  The first  is
     taken  as	the  CWEB input file (and .w is added if there is no extension).
     If there is a second name, it is a change file (and .ch is added  if  there
     is no extension).	The change file overrides parts of the CWEB file, as de-
     scribed  in  the documentation.  If there is a third name, it overrides the
     default name of the output file, which is ordinarily the same as  the  name
     of  the  input file (but on the current directory) with the extension .tex.
     If you just want to change the output file name, but don't  have  a  change
     file to apply, you can use `-' as the second argument.

     ctwill  is exactly like cweave except that it produces much better documen-
     tation, for which you must work much harder.  You should run ctwill  twice,
     once  to prime the pump and once to get decent answers.  Moreover, you must
     run the output twice through TeX.

     After tex foo you will have output that looks like final pages except  that
     the  entries of mini-indexes won't be alphabetized.  The first run produces
     a weird file called foo.ref.  Say ctwill-refsort < foo.ref >  foo.sref  and
     then another tex foo will produce alphabetized output.

     The  ctwill-twinx program compiles a master index for a set of related pro-
     grams that have been processed by ctwill (not by cweave, mind  you!).   The
     individual  programs  should  define  their  names  with a line of the form
     \def\title{NAME}.	For  your  convenience,  ctwill-twinx  grabs  the  first
     "word"  in  \title and turns it into uppercase form.  You should adapt file
     twinx-startup.tex for the first page of the master index.

     The mini-indexes list identifiers that are used but  not  defined	on  each
     two-page  spread.	 At  the end of each section, ctwill gives TeX a list of
     identifiers used in that section and information about where they	are  de-
     fined.

     The  current meaning of every identifier is initially \uninitialized.  Then
     ctwill reads the .aux file for your job, if any.

     Before reading the .aux file, ctwill actually looks for a file called  sys-
     tem.bux,  which will be read if present.  And after foo.aux, a third possi-
     bility is foo.bux.  The general convention is to put definitions of  system
     procedures  such as printf into system.bux, and to put definitions found in
     specifically foo-ish header files into foo.bux.  Like the .aux files,  .bux
     files should contain only @$ specifications.

     The  meaning specified by @$...@> generally has four components: an identi-
     fier (followed by space), a program name (enclosed in  braces),  a  section
     number (followed by space), and a TeX part.

     A	special proofmode is provided so that you can check ctwill's conclusions
     about cross-references.  Run ctwill with the flag +P, and TeX will  produce
     a	specially formatted document with mini-indexes for each section, so that
     you can check that your specifications are correct.

     This proofmode format is used in conjunction  with  pdfctproofmac.tex  that
     creates  active  hyperlinks  in  PDF  and HINT output.  You can use ctwill-
     proofsort to get the index entries in alphabetical order; just invoke

     ( ctwill-proofsort < texfile.tex ) 1<> texfile.tex

     after invoking ctwill (twice), but before invoking TeX (once).

     More details how to use ctwill can be found in the first  sections  of  its
     source  code, respectively the change file cweav-twill.ch applicable to the
     cweave.w source.  A complete example with all bells  and  whistles  is  de-
     scribed  in  Mini-Indexes	for  Literate Programs, pages 225-245 of Knuth's
     Digital Typography (CSLI, 1999).

DIFFERENCES TO ORIGINAL CTWILL
     The present incarnation of ctwill and its utilities  tries  hard  to  be  a
     drop-in  replacement  for	the original package.  There are, however, a few
     differences worth noting:

     * This version is based on the most recent version of CWEB (4.12.1).

     * In TeX Live the utility programs are prefixed with ctwill- and the  macro
       files with ct for technical reasons.

     * Options	--help, --quiet, --verbose, --version, and flags +c, -i, -o, and
       +lX are new in CWEBbin and TeX Live.

     * Option +lX is accompanied by example wrapper files  for	ctwimac.tex  and
       ctproofmac.tex with translated captions for German (+ld).

     * Option  +lX is also accompanied by an extended pdfctwimac.tex for produc-
       tion of PDF and HINT output with active hyperlinks (+lpdf).

     * ctwill in TeX Live operates silently by default; use the --verbose option
       to get the original behavior.

     * File lookup with the environment variable CWEBINPUTS is extended to  per-
       mit several, colon-separated, paths; see ENVIRONMENT below.

     * If  properly  configured,  the  main program ctwill is localized with the
       "GNU gettext utilities".

OPTIONS
     Options on the command line may be either turned off with `-' (if they  are
     on  by  default)  or  turned  on with `+' (if they are off by default).  In
     fact, the options are processed from left to  right,  so  a  sequence  like
     --verbose	-h  will  only show the banner line (+b) and the progress report
     (+p), but leave out the happy message (-h).

     * +b: print banner line on terminal

     * +h: print success message on completion

     * +p: print progress report messages

     * +q/-q: shortcut for -bhp; also --quiet (default)

     * +v/-v: shortcut for +bhp; also --verbose

     * +c: check temporary output for changes

     * -e: do not enclose C/C++ material in \PB{...}

     * -f: do not force a newline after every C/C++ statement in output

     * -F: do not force a compound statement to start on a new line

     * -i: suppress indentation of parameter declarations

     * -o: suppress separation of declarations and statements

     * -x: omit indices, section names, table of contents

     * +P: \input ctproofmac.tex instead of ctwimac.tex

     * +lX/-lX: use macros for language X as of X{ctwimac|ctproofmac}.tex

     * +s: print usage statistics

     * +t: treat typename in a template like typedef

     * --help: display help message and exit

     * --version: output version information and exit

ENVIRONMENT
     The environment variable CWEBINPUTS is used to search for the input  files,
     or the system default if CWEBINPUTS is not set.  See tex(1) for the details
     of the searching.	To avoid conflicts with other programs that also use the
     CWEBINPUTS  environment,  you  can be more specific and use CWEBINPUTS_cweb
     for special requirements in CWEB.

     If prepared for NLS support, ctwill like ctangle and cweave uses the  envi-
     ronment variable TEXMFLOCALEDIR to configure the parent directory where the
     "GNU gettext utilities" search for translation catalogs.

     These variables are preconfigured in TeX Live's texmf.cnf.

FILES
     The  location  of	the  files mentioned below varies from system to system.
     Use the kpsewhich utility to find their locations.

     * ctwimac.tex: The default TeX macros \input in the first line of the  out-
       put file.

     * ctproofmac.tex:	If  ctwill is invoked with the +P option, it will change
       the first line of the output file to \input ctproofmac.tex.

     In both cases you can request some prefix X with the +lX option, e.g.,  +ld
     will  \input  dctwimac.tex and +Pld will \input dctproofmac.tex.  A special
     application is the use of option +lpdf that will \input  pdfctwimac.tex  or
     \input  pdfctproofmac.tex for production of PDF and HINT output with active
     hyperlinks.

     * webfile.bux: Reference definitions to resolve from other modules.

     * system.bux: Reference definitions to resolve from C/C++ standard  library
       header files like <stdio.h>.

     Other  auxiliary  files with references are created automatically by ctwill
     and the actual index files are created by TeX.

     * cwebman.tex: The CWEB user manual, available in PDF from CTAN.

SEE ALSO
     * The CWEB System of Structured Documentation: by Donald E. Knuth and  Sil-
       vio Levy (hardcopy version of cwebman.tex and the source code listings of
       common.w, ctangle.w, and cweave.w).

     * Digital Typography: by D. E. Knuth (CSLI, 1999).

     * Literate Programming: by D. E. Knuth (CSLI, 1992).

     * Weaving a Program: by Wayne Sewell.

     cweb(1), tex(1), cc(1)

AUTHORS
     Don Knuth wrote ctwill based on cweave by Silvio Levy and Knuth.
     Contemporary development on https://github.com/ascherer/cwebbin.

Web2c 2025			January 1, 2025.		       CTWILL(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ctwill-refsort&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help