Provided by: texlive-binaries_2024.20240313.70630+ds-6_amd64 bug

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 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 argument.

       ctwill  is exactly like cweave except that it produces much better documentation, 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  identifier  (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 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 production 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 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 environment 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 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 Silvio 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/dev                                   March 10, 2024                                        CTWILL(1)