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  indenta-
       tion,  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	infor-
       mation 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	 ordi-
       narily  the  same as the	name of	the input file (but on the current di-
       rectory)	with the extension .tex.  If you just want to change the  out-
       put  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 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.	 More-
       over, 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 defini-
       tions  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  conclu-
       sions  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.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 pro-
	 duction 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 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 CTAN
	 <https://ctan.org/pkg/cweb>.

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		       January 1, 2025.			     CTWILL(1)

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

home | help