dwww Home | Manual pages | Find package

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  informa-
       tion that it gathers automatically.

       CWEB allows you to prepare a single document containing all the informa-
       tion  that  is  needed both to produce a compilable C/C++ program and to
       produce a well-formatted document describing the program in as much  de-
       tail  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 exten-
       sion).  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  described 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 ar-
       gument.

       ctwill  is exactly like cweave except that it produces much better docu-
       mentation, 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
       programs  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
       defined.

       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
       system.bux,  which  will be read if present.  And after foo.aux, a third
       possibility 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 iden-
       tifier  (followed by space), a program name (enclosed in braces), a sec-
       tion number (followed by space), and a TeX part.

       A special proofmode is provided so that you can check  ctwill’s  conclu-
       sions about cross-references.  Run ctwill with the flag +P, and TeX will
       produce  a  specially formatted document with mini-indexes for each sec-
       tion, 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
       described  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.11).

       • 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 pro-
         duction of PDF and HINT output with active hyperlinks (+lpdf).

       • ctwill in TeX Live operates silently by default; use the --verbose op-
         tion to get the original behavior.

       • File lookup with the environment variable CWEBINPUTS  is  extended  to
         permit 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 en-
       vironment 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
         output 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  li-
         brary 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 ]8;;https://ctan.org/pkg/cweb\CTAN]8;;\.

SEE ALSO
       • The CWEB System of Structured Documentation: by  Donald  E. Knuth  and
         Silvio Levy (hardcopy version of cwebman.tex and the source code list-
         ings 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/dev                   March 10, 2024                       CTWILL(1)

Generated by dwww version 1.16 on Tue Dec 16 06:00:35 CET 2025.