10133 lines
307 KiB
Plaintext
10133 lines
307 KiB
Plaintext
\input texinfo @c -*-texinfo-*-
|
|
|
|
@c
|
|
@c Please convert this manual with `texi2dvi -e groff.texinfo' due to a bug
|
|
@c in texinfo regarding expansion of user-defined macros.
|
|
@c
|
|
|
|
@c %**start of header (This is for running Texinfo on a region.)
|
|
@setfilename groff
|
|
@settitle The GNU Troff Manual
|
|
@setchapternewpage odd
|
|
@footnotestyle separate
|
|
@c %**end of header (This is for running Texinfo on a region.)
|
|
|
|
|
|
@c We use the following indices:
|
|
@c
|
|
@c cindex: concepts
|
|
@c rqindex: requests
|
|
@c esindex: escapes
|
|
@c vindex: registers
|
|
@c kindex: commands in font files
|
|
@c pindex: programs and files
|
|
@c tindex: environment variables
|
|
@c maindex: macros
|
|
@c stindex: strings
|
|
@c glindex: glyph names
|
|
@c opindex: operators
|
|
@c
|
|
@c tindex and cindex are merged.
|
|
|
|
@defcodeindex rq
|
|
@defcodeindex es
|
|
@defcodeindex ma
|
|
@defcodeindex st
|
|
@defcodeindex gl
|
|
@defcodeindex op
|
|
@syncodeindex tp cp
|
|
|
|
|
|
@c to avoid uppercasing in @deffn while converting to info, we define
|
|
@c our special @Var{}
|
|
@c
|
|
@c due to a (not officially documented) `feature' in makeinfo 4.0,
|
|
@c macros are not expanded in @deffn (but the macro definition is
|
|
@c properly removed), so we have to define @Var{} directly in TeX also
|
|
|
|
@macro Var{arg}
|
|
\arg\
|
|
@end macro
|
|
@tex
|
|
\gdef\Var#1{\var{#1}}
|
|
@end tex
|
|
|
|
|
|
@c definition of requests
|
|
|
|
@macro Defreq{name, arg}
|
|
@rqindex \name\
|
|
@deffn Request @t{.\name\} \arg\
|
|
@end macro
|
|
|
|
@macro Defreqx{name, arg}
|
|
@rqindex \name\
|
|
@deffnx Request @t{.\name\} \arg\
|
|
@end macro
|
|
|
|
@macro endDefreq
|
|
@end deffn
|
|
@end macro
|
|
|
|
|
|
@c definition of escapes
|
|
|
|
@macro Defesc{name, delimI, arg, delimII}
|
|
@esindex \name\
|
|
@deffn Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
|
|
@end macro
|
|
|
|
@macro Defescx{name, delimI, arg, delimII}
|
|
@esindex \name\
|
|
@deffnx Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
|
|
@end macro
|
|
|
|
@macro endDefesc
|
|
@end deffn
|
|
@end macro
|
|
|
|
|
|
@c definition of registers
|
|
|
|
@macro Defreg{name}
|
|
@vindex \name\
|
|
@deffn Register @t{\\n[\name\]}
|
|
@end macro
|
|
|
|
@macro Defregx{name}
|
|
@vindex \name\
|
|
@deffnx Register @t{\\n[\name\]}
|
|
@end macro
|
|
|
|
@macro endDefreg
|
|
@end deffn
|
|
@end macro
|
|
|
|
|
|
@c definition of macros
|
|
|
|
@macro Defmac{name, arg}
|
|
@maindex \name\
|
|
@defmac @t{.\name\} \arg\
|
|
@end macro
|
|
|
|
@macro Defmacx{name, arg}
|
|
@maindex \name\
|
|
@defmacx @t{.\name\} \arg\
|
|
@end macro
|
|
|
|
@macro endDefmac
|
|
@end defmac
|
|
@end macro
|
|
|
|
|
|
@c definition of strings
|
|
|
|
@macro Defstr{name, arg}
|
|
@stindex \name\
|
|
@deffn String @t{\name\} \arg\
|
|
@end macro
|
|
|
|
@macro Defstrx{name, arg}
|
|
@stindex \name\
|
|
@deffnx String @t{\name\} \arg\
|
|
@end macro
|
|
|
|
@macro endDefstr
|
|
@end deffn
|
|
@end macro
|
|
|
|
|
|
@c our example macro
|
|
|
|
@macro Example
|
|
@example
|
|
@group
|
|
@end macro
|
|
|
|
@macro endExample
|
|
@end group
|
|
@end example
|
|
@end macro
|
|
|
|
|
|
@c We need special parentheses and brackets:
|
|
@c
|
|
@c . Real parentheses in @deffn produce an error while compiling with
|
|
@c TeX
|
|
@c . Real brackets use the wrong font in @deffn, overriding @t{}.
|
|
@c
|
|
@c This is true for texinfo 4.0.
|
|
|
|
@ifnottex
|
|
@macro lparen
|
|
(
|
|
@end macro
|
|
@macro rparen
|
|
)
|
|
@end macro
|
|
@macro lbrack
|
|
[
|
|
@end macro
|
|
@macro rbrack
|
|
]
|
|
@end macro
|
|
@end ifnottex
|
|
|
|
@iftex
|
|
@macro lparen
|
|
@@lparen
|
|
@end macro
|
|
@macro rparen
|
|
@@rparen
|
|
@end macro
|
|
@macro lbrack
|
|
@@lbrack
|
|
@end macro
|
|
@macro rbrack
|
|
@@rbrack
|
|
@end macro
|
|
@end iftex
|
|
|
|
|
|
@c Note: We say `Roman numerals' but `roman font'.
|
|
|
|
|
|
@c XXX comment all examples
|
|
|
|
|
|
@dircategory Miscellaneous
|
|
@direntry
|
|
* Groff: (groff). The GNU troff document formatting system.
|
|
@end direntry
|
|
|
|
|
|
@smallbook
|
|
|
|
|
|
@iftex
|
|
@finalout
|
|
@end iftex
|
|
|
|
|
|
@ifinfo
|
|
This Info file documents GNU troff version 1.16.
|
|
|
|
Published by the Free Software Foundation
|
|
59 Temple Place, Suite 330
|
|
Boston, MA 02111-1307 USA
|
|
|
|
Copyright (C) 1994-2000 Free Software Foundation, Inc.
|
|
|
|
Permission is granted to make and distribute verbatim copies of this
|
|
manual provided the copyright notice and this permission notice are
|
|
preserved on all copies.
|
|
|
|
@ignore
|
|
Permission is granted to process this file through TeX and print the
|
|
results, provided the printed document carries copying permission notice
|
|
identical to this one except for the removal of this paragraph (this
|
|
paragraph not being relevant to the printed manual).
|
|
|
|
@end ignore
|
|
Permission is granted to copy and distribute modified versions of this
|
|
manual under the conditions for verbatim copying, provided that the
|
|
entire resulting derived work is distributed under the terms of a
|
|
permission notice identical to this one.
|
|
|
|
Permission is granted to copy and distribute translations of this manual
|
|
into another language, under the above conditions for modified versions,
|
|
except that this permission notice may be stated in a translation
|
|
approved by the Foundation.
|
|
|
|
Permission is granted to copy and distribute modified versions of this
|
|
manual under the conditions for verbatim copying, provided also that the
|
|
section entitled ``GNU General Public License'' is included exactly as
|
|
in the original, and provided that the entire resulting derived work is
|
|
distributed under the terms of a permission notice identical to this
|
|
one.
|
|
|
|
Permission is granted to copy and distribute translations of this manual
|
|
into another language, under the above conditions for modified versions,
|
|
except that the section entitled ``GNU General Public License'' may be
|
|
included in a translation approved by the Free Software Foundation
|
|
instead of in the original English.
|
|
@end ifinfo
|
|
|
|
|
|
@titlepage
|
|
@title groff
|
|
@subtitle The GNU implementation of @code{troff}
|
|
@subtitle Edition 1.16
|
|
@subtitle Spring 2000
|
|
@author by Trent A.@w{ }Fisher
|
|
@author and Werner Lemberg
|
|
|
|
@c Include the Distribution inside the titlepage environment so
|
|
@c that headings are turned off. Headings on and off do not work.
|
|
|
|
@page
|
|
@vskip 0pt plus 1filll
|
|
Copyright @copyright@w{ }1994-2000 Free Software Foundation,@w{ }Inc.
|
|
@sp 2
|
|
Version 1.16 of @code{groff}, @*
|
|
Spring 2000
|
|
@sp 2
|
|
Published by the Free Software Foundation @*
|
|
59 Temple Place, Suite 330 @*
|
|
Boston, MA 02111-1307 USA
|
|
|
|
|
|
Permission is granted to make and distribute verbatim copies of this
|
|
manual provided the copyright notice and this permission notice are
|
|
preserved on all copies.
|
|
|
|
Permission is granted to copy and distribute modified versions of this
|
|
manual under the conditions for verbatim copying, provided also that the
|
|
section entitled ``GNU General Public License'' is included exactly as
|
|
in the original, and provided that the entire resulting derived work is
|
|
distributed under the terms of a permission notice identical to this
|
|
one.
|
|
|
|
Permission is granted to copy and distribute translations of this manual
|
|
into another language, under the above conditions for modified versions,
|
|
except that the section entitled ``GNU General Public License'' may be
|
|
included in a translation approved by the Free Software Foundation
|
|
instead of in the original English.
|
|
|
|
Cover art by Etienne Suvasa.
|
|
@end titlepage
|
|
@page
|
|
|
|
|
|
|
|
@node Top, Copying, (dir), (dir)
|
|
|
|
@ifinfo
|
|
This Info file documents groff version 1.16, the GNU implementation of
|
|
the troff typesetting system.
|
|
|
|
This is an in-progress document; contributions, comments, or
|
|
contributions are welcome. Send them to bug-groff@@gnu.org.
|
|
@end ifinfo
|
|
|
|
@menu
|
|
* Copying::
|
|
* Introduction::
|
|
* Invoking groff::
|
|
* Tutorial for Macro Users::
|
|
* Macro Packages::
|
|
* gtroff Reference::
|
|
* Preprocessors::
|
|
* Output Devices::
|
|
* File formats::
|
|
* Installation::
|
|
* Request Index::
|
|
* Escape Index::
|
|
* Operator Index::
|
|
* Register Index::
|
|
* Macro Index::
|
|
* String Index::
|
|
* Glyph Name Index::
|
|
* Font File Keyword Index::
|
|
* Program and File Index::
|
|
* Concept Index::
|
|
@end menu
|
|
|
|
|
|
|
|
@node Copying, Introduction, Top, Top
|
|
@cindex copying
|
|
@unnumbered GNU GENERAL PUBLIC LICENSE
|
|
@center Version 2, June 1991
|
|
|
|
@display
|
|
Copyright @copyright{}@w{ }1989, 1991 Free Software Foundation, Inc.
|
|
59@w{ }Temple Place, Suite@w{ }330, Boston, MA@w{ }02111, USA
|
|
|
|
Everyone is permitted to copy and distribute verbatim copies of this
|
|
license document, but changing it is not allowed.
|
|
@end display
|
|
|
|
@unnumberedsec Preamble
|
|
|
|
The licenses for most software are designed to take away your freedom to
|
|
share and change it. By contrast, the GNU General Public License is
|
|
intended to guarantee your freedom to share and change free software --
|
|
to make sure the software is free for all its users. This General
|
|
Public License applies to most of the Free Software Foundation's
|
|
software and to any other program whose authors commit to using it.
|
|
(Some other Free Software Foundation software is covered by the GNU
|
|
Library General Public License instead.) You can apply it to your
|
|
programs, too.
|
|
|
|
When we speak of free software, we are referring to freedom, not price.
|
|
Our General Public Licenses are designed to make sure that you have the
|
|
freedom to distribute copies of free software (and charge for this
|
|
service if you wish), that you receive source code or can get it if you
|
|
want it, that you can change the software or use pieces of it in new
|
|
free programs; and that you know you can do these things.
|
|
|
|
To protect your rights, we need to make restrictions that forbid anyone
|
|
to deny you these rights or to ask you to surrender the rights. These
|
|
restrictions translate to certain responsibilities for you if you
|
|
distribute copies of the software, or if you modify it.
|
|
|
|
For example, if you distribute copies of such a program, whether gratis
|
|
or for a fee, you must give the recipients all the rights that you have.
|
|
You must make sure that they, too, receive or can get the source code.
|
|
And you must show them these terms so they know their rights.
|
|
|
|
We protect your rights with two steps: (1)@w{ }copyright the software,
|
|
and (2)@w{ }offer you this license which gives you legal permission to
|
|
copy, distribute and/or modify the software.
|
|
|
|
Also, for each author's protection and ours, we want to make certain
|
|
that everyone understands that there is no warranty for this free
|
|
software. If the software is modified by someone else and passed on, we
|
|
want its recipients to know that what they have is not the original, so
|
|
that any problems introduced by others will not reflect on the original
|
|
authors' reputations.
|
|
|
|
Finally, any free program is threatened constantly by software patents.
|
|
We wish to avoid the danger that redistributors of a free program will
|
|
individually obtain patent licenses, in effect making the program
|
|
proprietary. To prevent this, we have made it clear that any patent
|
|
must be licensed for everyone's free use or not licensed at all.
|
|
|
|
The precise terms and conditions for copying, distribution and
|
|
modification follow.
|
|
|
|
@iftex
|
|
@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
@end iftex
|
|
@ifinfo
|
|
@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
@end ifinfo
|
|
|
|
@enumerate 0
|
|
@item
|
|
This License applies to any program or other work which contains a
|
|
notice placed by the copyright holder saying it may be distributed under
|
|
the terms of this General Public License. The ``Program'', below,
|
|
refers to any such program or work, and a ``work based on the Program''
|
|
means either the Program or any derivative work under copyright law:
|
|
that is to say, a work containing the Program or a portion of it, either
|
|
verbatim or with modifications and/or translated into another language.
|
|
(Hereinafter, translation is included without limitation in the term
|
|
``modification''.) Each licensee is addressed as ``you''.
|
|
|
|
Activities other than copying, distribution and modification are not
|
|
covered by this License; they are outside its scope. The act of running
|
|
the Program is not restricted, and the output from the Program is
|
|
covered only if its contents constitute a work based on the Program
|
|
(independent of having been made by running the Program). Whether that
|
|
is true depends on what the Program does.
|
|
|
|
@item
|
|
You may copy and distribute verbatim copies of the Program's source code
|
|
as you receive it, in any medium, provided that you conspicuously and
|
|
appropriately publish on each copy an appropriate copyright notice and
|
|
disclaimer of warranty; keep intact all the notices that refer to this
|
|
License and to the absence of any warranty; and give any other
|
|
recipients of the Program a copy of this License along with the Program.
|
|
|
|
You may charge a fee for the physical act of transferring a copy, and
|
|
you may at your option offer warranty protection in exchange for a fee.
|
|
|
|
@item
|
|
You may modify your copy or copies of the Program or any portion of it,
|
|
thus forming a work based on the Program, and copy and distribute such
|
|
modifications or work under the terms of Section@w{ }1 above, provided
|
|
that you also meet all of these conditions:
|
|
|
|
@enumerate a
|
|
@item
|
|
You must cause the modified files to carry prominent notices stating
|
|
that you changed the files and the date of any change.
|
|
|
|
@item
|
|
You must cause any work that you distribute or publish, that in whole or
|
|
in part contains or is derived from the Program or any part thereof, to
|
|
be licensed as a whole at no charge to all third parties under the terms
|
|
of this License.
|
|
|
|
@item
|
|
If the modified program normally reads commands interactively when run,
|
|
you must cause it, when started running for such interactive use in the
|
|
most ordinary way, to print or display an announcement including an
|
|
appropriate copyright notice and a notice that there is no warranty (or
|
|
else, saying that you provide a warranty) and that users may
|
|
redistribute the program under these conditions, and telling the user
|
|
how to view a copy of this License. (Exception: if the Program itself
|
|
is interactive but does not normally print such an announcement, your
|
|
work based on the Program is not required to print an announcement.)
|
|
@end enumerate
|
|
|
|
These requirements apply to the modified work as a whole. If
|
|
identifiable sections of that work are not derived from the Program, and
|
|
can be reasonably considered independent and separate works in
|
|
themselves, then this License, and its terms, do not apply to those
|
|
sections when you distribute them as separate works. But when you
|
|
distribute the same sections as part of a whole which is a work based on
|
|
the Program, the distribution of the whole must be on the terms of this
|
|
License, whose permissions for other licensees extend to the entire
|
|
whole, and thus to each and every part regardless of who wrote it.
|
|
|
|
Thus, it is not the intent of this section to claim rights or contest
|
|
your rights to work written entirely by you; rather, the intent is to
|
|
exercise the right to control the distribution of derivative or
|
|
collective works based on the Program.
|
|
|
|
In addition, mere aggregation of another work not based on the Program
|
|
with the Program (or with a work based on the Program) on a volume of a
|
|
storage or distribution medium does not bring the other work under the
|
|
scope of this License.
|
|
|
|
@item
|
|
You may copy and distribute the Program (or a work based on it, under
|
|
Section@w{ }2) in object code or executable form under the terms of
|
|
Sections@w{ }1 and@w{ }2 above provided that you also do one of the
|
|
following:
|
|
|
|
@enumerate a
|
|
@item
|
|
Accompany it with the complete corresponding machine-readable source
|
|
code, which must be distributed under the terms of Sections@w{ }1 and@w{
|
|
}2 above on a medium customarily used for software interchange; or,
|
|
|
|
@item
|
|
Accompany it with a written offer, valid for at least three years, to
|
|
give any third party, for a charge no more than your cost of physically
|
|
performing source distribution, a complete machine-readable copy of the
|
|
corresponding source code, to be distributed under the terms of
|
|
Sections@w{ }1 and@w{ }2 above on a medium customarily used for software
|
|
interchange; or,
|
|
|
|
@item
|
|
Accompany it with the information you received as to the offer to
|
|
distribute corresponding source code. (This alternative is allowed only
|
|
for noncommercial distribution and only if you received the program in
|
|
object code or executable form with such an offer, in accord with
|
|
Subsection@w{ }b above.)
|
|
@end enumerate
|
|
|
|
The source code for a work means the preferred form of the work for
|
|
making modifications to it. For an executable work, complete source
|
|
code means all the source code for all modules it contains, plus any
|
|
associated interface definition files, plus the scripts used to control
|
|
compilation and installation of the executable. However, as a special
|
|
exception, the source code distributed need not include anything that is
|
|
normally distributed (in either source or binary form) with the major
|
|
components (compiler, kernel, and so on) of the operating system on
|
|
which the executable runs, unless that component itself accompanies the
|
|
executable.
|
|
|
|
If distribution of executable or object code is made by offering access
|
|
to copy from a designated place, then offering equivalent access to copy
|
|
the source code from the same place counts as distribution of the source
|
|
code, even though third parties are not compelled to copy the source
|
|
along with the object code.
|
|
|
|
@item
|
|
You may not copy, modify, sublicense, or distribute the Program except
|
|
as expressly provided under this License. Any attempt otherwise to
|
|
copy, modify, sublicense or distribute the Program is void, and will
|
|
automatically terminate your rights under this License. However,
|
|
parties who have received copies, or rights, from you under this License
|
|
will not have their licenses terminated so long as such parties remain
|
|
in full compliance.
|
|
|
|
@item
|
|
You are not required to accept this License, since you have not signed
|
|
it. However, nothing else grants you permission to modify or distribute
|
|
the Program or its derivative works. These actions are prohibited by
|
|
law if you do not accept this License. Therefore, by modifying or
|
|
distributing the Program (or any work based on the Program), you
|
|
indicate your acceptance of this License to do so, and all its terms and
|
|
conditions for copying, distributing or modifying the Program or works
|
|
based on it.
|
|
|
|
@item
|
|
Each time you redistribute the Program (or any work based on the
|
|
Program), the recipient automatically receives a license from the
|
|
original licensor to copy, distribute or modify the Program subject to
|
|
these terms and conditions. You may not impose any further restrictions
|
|
on the recipients' exercise of the rights granted herein. You are not
|
|
responsible for enforcing compliance by third parties to this License.
|
|
|
|
@item
|
|
If, as a consequence of a court judgment or allegation of patent
|
|
infringement or for any other reason (not limited to patent issues),
|
|
conditions are imposed on you (whether by court order, agreement or
|
|
otherwise) that contradict the conditions of this License, they do not
|
|
excuse you from the conditions of this License. If you cannot
|
|
distribute so as to satisfy simultaneously your obligations under this
|
|
License and any other pertinent obligations, then as a consequence you
|
|
may not distribute the Program at all. For example, if a patent license
|
|
would not permit royalty-free redistribution of the Program by all those
|
|
who receive copies directly or indirectly through you, then the only way
|
|
you could satisfy both it and this License would be to refrain entirely
|
|
from distribution of the Program.
|
|
|
|
If any portion of this section is held invalid or unenforceable under
|
|
any particular circumstance, the balance of the section is intended to
|
|
apply and the section as a whole is intended to apply in other
|
|
circumstances.
|
|
|
|
It is not the purpose of this section to induce you to infringe any
|
|
patents or other property right claims or to contest validity of any
|
|
such claims; this section has the sole purpose of protecting the
|
|
integrity of the free software distribution system, which is implemented
|
|
by public license practices. Many people have made generous
|
|
contributions to the wide range of software distributed through that
|
|
system in reliance on consistent application of that system; it is up to
|
|
the author/donor to decide if he or she is willing to distribute
|
|
software through any other system and a licensee cannot impose that
|
|
choice.
|
|
|
|
This section is intended to make thoroughly clear what is believed to be
|
|
a consequence of the rest of this License.
|
|
|
|
@item
|
|
If the distribution and/or use of the Program is restricted in certain
|
|
countries either by patents or by copyrighted interfaces, the original
|
|
copyright holder who places the Program under this License may add an
|
|
explicit geographical distribution limitation excluding those countries,
|
|
so that distribution is permitted only in or among countries not thus
|
|
excluded. In such case, this License incorporates the limitation as if
|
|
written in the body of this License.
|
|
|
|
@item
|
|
The Free Software Foundation may publish revised and/or new versions of
|
|
the General Public License from time to time. Such new versions will be
|
|
similar in spirit to the present version, but may differ in detail to
|
|
address new problems or concerns.
|
|
|
|
Each version is given a distinguishing version number. If the Program
|
|
specifies a version number of this License which applies to it and ``any
|
|
later version'', you have the option of following the terms and
|
|
conditions either of that version or of any later version published by
|
|
the Free Software Foundation. If the Program does not specify a version
|
|
number of this License, you may choose any version ever published by the
|
|
Free Software Foundation.
|
|
|
|
@item
|
|
If you wish to incorporate parts of the Program into other free programs
|
|
whose distribution conditions are different, write to the author to ask
|
|
for permission. For software which is copyrighted by the Free Software
|
|
Foundation, write to the Free Software Foundation; we sometimes make
|
|
exceptions for this. Our decision will be guided by the two goals of
|
|
preserving the free status of all derivatives of our free software and
|
|
of promoting the sharing and reuse of software generally.
|
|
|
|
@iftex
|
|
@heading NO WARRANTY
|
|
@end iftex
|
|
@ifinfo
|
|
@center NO WARRANTY
|
|
@end ifinfo
|
|
|
|
@item
|
|
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
|
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN
|
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER
|
|
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@.
|
|
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
|
|
YOU@. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
|
|
NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
|
|
@item
|
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
|
|
DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
|
|
DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
|
|
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
|
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
|
|
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
|
|
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
@end enumerate
|
|
|
|
@iftex
|
|
@heading END OF TERMS AND CONDITIONS
|
|
@end iftex
|
|
@ifinfo
|
|
@center END OF TERMS AND CONDITIONS
|
|
@end ifinfo
|
|
|
|
|
|
@page
|
|
@unnumberedsec How to Apply These Terms to Your New Programs
|
|
|
|
If you develop a new program, and you want it to be of the greatest
|
|
possible use to the public, the best way to achieve this is to make it
|
|
free software which everyone can redistribute and change under these
|
|
terms.
|
|
|
|
To do so, attach the following notices to the program. It is safest to
|
|
attach them to the start of each source file to most effectively convey
|
|
the exclusion of warranty; and each file should have at least the
|
|
``copyright'' line and a pointer to where the full notice is found.
|
|
|
|
@smallexample
|
|
@var{one line to give the program's name and an idea of what it does.}
|
|
Copyright (C) 19@var{yy} @var{name of author}
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or (at
|
|
your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
|
|
@end smallexample
|
|
|
|
Also add information on how to contact you by electronic and paper mail.
|
|
|
|
If the program is interactive, make it output a short notice like this
|
|
when it starts in an interactive mode:
|
|
|
|
@smallexample
|
|
Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
|
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type
|
|
`show w'. This is free software, and you are welcome to redistribute
|
|
it under certain conditions; type `show c' for details.
|
|
@end smallexample
|
|
|
|
The hypothetical commands @samp{show@w{ }w} and @samp{show@w{ }c} should
|
|
show the appropriate parts of the General Public License. Of course,
|
|
the commands you use may be called something other than @samp{show@w{
|
|
}w} and @samp{show@w{ }c}; they could even be mouse-clicks or menu items
|
|
-- whatever suits your program.
|
|
|
|
You should also get your employer (if you work as a programmer) or your
|
|
school, if any, to sign a ``copyright disclaimer'' for the program, if
|
|
necessary. Here is a sample; alter the names:
|
|
|
|
@smallexample
|
|
@group
|
|
Yoyodyne, Inc., hereby disclaims all copyright interest
|
|
in the program `Gnomovision' (which makes passes at compilers)
|
|
written by James Hacker.
|
|
|
|
@var{signature of Ty Coon}, 1 April 1989
|
|
Ty Coon, President of Vice
|
|
@end group
|
|
@end smallexample
|
|
|
|
This General Public License does not permit incorporating your program
|
|
into proprietary programs. If your program is a subroutine library, you
|
|
may consider it more useful to permit linking proprietary applications
|
|
with the library. If this is what you want to do, use the GNU Library
|
|
General Public License instead of this License.
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Introduction, Invoking groff, Copying, Top
|
|
@chapter Introduction
|
|
@cindex introduction
|
|
|
|
GNU @code{troff} (or @code{groff}) is a system for typesetting
|
|
documents. @code{troff} is very flexible and has been in existence (and
|
|
use) for about 3@w{ }decades. It is quite widespread and firmly
|
|
entrenched in the @acronym{UNIX} community.
|
|
|
|
@menu
|
|
* What Is groff?::
|
|
* History::
|
|
* groff Capabilities::
|
|
* Macro Package Intro::
|
|
* Preprocessor Intro::
|
|
* Output device intro::
|
|
* Credits::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node What Is groff?, History, Introduction, Introduction
|
|
@section What Is @code{groff}?
|
|
@cindex what is @code{groff}?
|
|
@cindex @code{groff} -- what is it?
|
|
|
|
@code{groff} belongs to an older generation of document preparation
|
|
systems, which operate more like compilers than the more recent
|
|
interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
|
|
systems. @code{groff} and its contemporary counterpart, @TeX{}, both
|
|
work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
|
|
normal text files with embedded formatting commands. These files can
|
|
then be processed by @code{groff} to produce a typeset document on a
|
|
variety of devices.
|
|
|
|
Likewise, @code{groff} should not be confused with a @dfn{word
|
|
processor}, since that term connotes an integrated system that includes
|
|
an editor and a text formatter. Also, many word processors follow the
|
|
@acronym{WYSIWYG} paradigm discussed earlier.
|
|
|
|
Although @acronym{WYSIWYG} systems may be easier to use, they have a
|
|
number of disadvantages compared to @code{troff}:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
They must be used on a graphics display to work on a document.
|
|
|
|
@item
|
|
Most of the @acronym{WYSIWYG} systems are either non-free or are not
|
|
very portable.
|
|
|
|
@item
|
|
@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
|
|
|
|
@item
|
|
It is difficult to have a wide range of capabilities available within
|
|
the confines of a GUI/window system.
|
|
|
|
@item
|
|
It is more difficult to make global changes to a document.
|
|
@end itemize
|
|
|
|
@quotation
|
|
``GUIs normally make it simple to accomplish simple actions and
|
|
impossible to accomplish complex actions.'' --Doug Gwyn (22/Jun/91 in
|
|
@code{comp.unix.wizards})
|
|
@end quotation
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node History, groff Capabilities, What Is groff?, Introduction
|
|
@section History
|
|
@cindex history
|
|
|
|
@cindex @code{runoff}
|
|
@cindex @code{rf}
|
|
@code{troff} can trace its origins back to a formatting program called
|
|
@code{runoff}, written by J.@w{ }E.@w{ }Saltzer, which ran on MIT's CTSS
|
|
operating system in the mid-sixties. This name came from the common
|
|
phrase of the time ``I'll run off a document.'' Bob Morris ported it to
|
|
the 635 architecture and called the program @code{roff} (an abbreviation
|
|
of @code{runoff}). It was rewritten as @code{rf} for the @w{PDP-7}
|
|
(before having @acronym{UNIX}), and at the same time (1969), Doug
|
|
McIllroy rewrote an extended and simplified version of @code{roff} in
|
|
the @acronym{BCPL} programming language.
|
|
|
|
@cindex @code{roff}
|
|
The first version of @acronym{UNIX} was developed on a @w{PDP-7} which
|
|
was sitting around Bell Labs. In 1971 the developers wanted to get a
|
|
@w{PDP-11} for further work on the operating system. In order to
|
|
justify the cost for this system, they proposed that they would
|
|
implement a document formatting system for the AT&T patents division.
|
|
This first formatting program was a reimplementation of McIllroy's
|
|
@code{roff}, written by J.@w{ }F.@w{ }Ossanna.
|
|
|
|
@cindex @code{nroff}
|
|
When they needed a more flexible language, a new version of @code{roff}
|
|
called @code{nroff} (``Newer @code{roff}'') was written. It had a much
|
|
more complicated syntax, but provided the basis for all future versions.
|
|
When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
|
|
version of @code{nroff} that would drive it. It was dubbed
|
|
@code{troff}, for ``typesetter @code{roff}'', although many people have
|
|
speculated that it actually means ``Times @code{roff}'' because of the
|
|
use of the Times font family in @code{troff} by default. As such, the
|
|
name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
|
|
|
|
With @code{troff} came @code{nroff} (they were actually the same program
|
|
except for some @samp{#ifdef}s), which was for producing output for line
|
|
printers and character terminals. It understood everything @code{troff}
|
|
did, and ignored the commands which were not applicable (e.g.@: font
|
|
changes).
|
|
|
|
Since there are several things which cannot be done easily in
|
|
@code{troff}, work on several preprocessors began. These programs would
|
|
transform certain parts of a document into @code{troff}, which made a
|
|
very natural use of pipes in @acronym{UNIX}.
|
|
|
|
The @code{eqn} preprocessor allowed mathematical formul@ae{} to be
|
|
specified in a much simpler and more intuitive manner. @code{tbl} is a
|
|
preprocessor for formatting tables. The @code{refer} preprocessor (and
|
|
the similar program, @code{bib}) processes citations in a document
|
|
according to a bibliographic database.
|
|
|
|
Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
|
|
language and produced output specifically for the CAT phototypesetter.
|
|
He rewrote it in C, although it was now 7000@w{ }lines of uncommented
|
|
code and still dependent on the CAT. As the CAT became less common, and
|
|
was no longer supported by the manufacturer, the need to make it support
|
|
other devices became a priority. However, before this could be done,
|
|
Ossanna was killed in an auto accident.
|
|
|
|
@pindex ditroff
|
|
@cindex @code{ditroff}
|
|
So, Brian Kernighan took on the task of rewriting @code{troff}. The
|
|
newly rewritten version produced a device independent code which was
|
|
very easy for postprocessors to read and translate to the appropriate
|
|
printer codes. Also, this new version of @code{troff} (called
|
|
@code{ditroff} for ``device independent @code{troff}'') had several
|
|
extensions, which included drawing functions.
|
|
|
|
Due to the additional abilities of the new version of @code{troff},
|
|
several new preprocessors appeared. The @code{pic} preprocessor
|
|
provides a wide range of drawing functions. Likewise the @code{ideal}
|
|
preprocessor did the same, although via a much different paradigm. The
|
|
@code{grap} preprocessor took specifications for graphs, but, unlike
|
|
other preprocessors, produced @code{pic} code.
|
|
|
|
James Clark began work on a GNU implementation of @code{ditroff} in
|
|
early@w{ }1989. The first version, @code{groff}@w{ }0.3.1, was released
|
|
June@w{ }1990. @code{groff} included:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
A replacement for @code{ditroff} with many extensions.
|
|
|
|
@item
|
|
The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
|
|
|
|
@item
|
|
Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
|
|
X@w{ }windows. GNU @code{troff} also eliminated the need for a
|
|
separate @code{nroff} program with a postprocessor which would produce
|
|
@acronym{ASCII} output.
|
|
|
|
@item
|
|
A version of the @file{me} macros and an implementation of the
|
|
@file{man} macros.
|
|
@end itemize
|
|
|
|
Also, a front-end was included which could construct the, sometimes
|
|
painfully long, pipelines required for all the post- and preprocessors.
|
|
|
|
Development of GNU @code{troff} progressed rapidly, and saw the
|
|
additions of a replacement for @code{refer}, an implementation of the
|
|
@file{ms} and @file{mm} macros, and a program to deduce how to format a
|
|
document (@code{grog}).
|
|
|
|
It was declared a stable (i.e.@: non-beta) package with the release of
|
|
version@w{ }1.04 around November@w{ }1991.
|
|
|
|
Beginning in@w{ }1999, @code{groff} has new maintainers (the package was
|
|
an orphan for a few years). As a result, new features and programs like
|
|
@code{grn}, a preprocessor for gremlin images, and an output device to
|
|
produce @acronym{HTML} output have been added.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node groff Capabilities, Macro Package Intro, History, Introduction
|
|
@section @code{groff} Capabilities
|
|
@cindex @code{groff} capabilities
|
|
@cindex capabilities of @code{groff}
|
|
|
|
So what exactly is @code{groff} capable of doing? @code{groff} provides
|
|
a wide range of low-level text formatting operations. Using these, it
|
|
is possible to perform a wide range of formatting tasks, such as
|
|
footnotes, table of contents, multiple columns, etc. Here's a list of
|
|
the most important operations supported by @code{groff}:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
text filling, adjusting, and centering
|
|
|
|
@item
|
|
hyphenation
|
|
|
|
@item
|
|
page control
|
|
|
|
@item
|
|
font and character size control
|
|
|
|
@item
|
|
vertical spacing (i.e.@: double spacing)
|
|
|
|
@item
|
|
line length and indenting
|
|
|
|
@item
|
|
macros, strings, diversions, and traps
|
|
|
|
@item
|
|
number registers
|
|
|
|
@item
|
|
tabs, leaders, and fields
|
|
|
|
@item
|
|
input and output conventions and character translation
|
|
|
|
@item
|
|
overstrike, bracket, line drawing, and zero-width functions
|
|
|
|
@item
|
|
local horizontal and vertical motions and the width function
|
|
|
|
@item
|
|
three-part titles
|
|
|
|
@item
|
|
output line numbering
|
|
|
|
@item
|
|
conditional acceptance of input
|
|
|
|
@item
|
|
environment switching
|
|
|
|
@item
|
|
insertions from the standard input
|
|
|
|
@item
|
|
input/output file switching
|
|
|
|
@item
|
|
output and error messages
|
|
@end itemize
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
|
|
@section Macro Packages
|
|
@cindex macro packages
|
|
|
|
Since @code{groff} provides such low-level facilities, it can be quite
|
|
difficult to use by itself. However, @code{groff} provides a
|
|
@dfn{macro} facility to specify how certain routine operations (e.g.@w{
|
|
}starting paragraphs, printing headers and footers, etc.)@: should be
|
|
done. These macros can be collected together into a @dfn{macro
|
|
package}. There are a number of macro packages available; the most
|
|
common (and the ones described in this manual) are @file{man},
|
|
@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
|
|
@section Preprocessors
|
|
@cindex preprocessors
|
|
|
|
Although @code{groff} provides most functions needed to format a
|
|
document, some operations would be unwieldy (e.g.@: to draw pictures).
|
|
Therefore, programs called preprocessors were written which understand
|
|
their own language and produce the necessary @code{groff} operations.
|
|
These preprocessors are able to differentiate their own input from the
|
|
rest of the document via markers.
|
|
|
|
To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
|
|
from the preprocessor into @code{groff}. Any number of preprocessors
|
|
may be used on a given document; in this case, the preprocessors are
|
|
linked together into one pipeline. However, in @code{groff}, the user
|
|
does not need to construct the pipe, but only tell @code{groff} what
|
|
preprocessors to use.
|
|
|
|
@code{groff} currently has preprocessors for producing tables
|
|
(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
|
|
(@code{pic} and @code{grn}), and for processing bibliographies
|
|
(@code{refer}). An associated program which is useful when dealing with
|
|
preprocessors is @code{soelim}.
|
|
|
|
A free implementation of @code{grap}, a preprocessor for drawing graphs,
|
|
can be obtained as an extra package; @code{groff} can use @code{grap}
|
|
also.
|
|
|
|
There are other preprocessors in existence, but, unfortunately, no free
|
|
implementations are available. Among them are preprocessors for drawing
|
|
mathematical pictures (@code{ideal}) and chemical structures
|
|
(@code{chem}).
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Output device intro, Credits, Preprocessor Intro, Introduction
|
|
@section Output Devices
|
|
@cindex postprocessors
|
|
@cindex output devices
|
|
@cindex devices for output
|
|
|
|
@code{groff} actually produces device independent code which may be
|
|
fed into a postprocessor to produce output for a particular device.
|
|
Currently, @code{groff} has postprocessors for @sc{PostScript}
|
|
devices, character terminals, X@w{ }Windows (for previewing), @TeX{}
|
|
DVI format, HP LaserJet@w{ }4 and Canon LBP printers (which use
|
|
@acronym{CAPSL}), and @acronym{HTML}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Credits, , Output device intro, Introduction
|
|
@section Credits
|
|
@cindex credits
|
|
|
|
Large portions of this manual were taken from existing documents, most
|
|
notably, the manual pages for the @code{groff} package by James Clark,
|
|
and Eric Allman's papers on the @file{me} macro package.
|
|
|
|
The section on the @file{man} macro package is partly based on Susan@w{
|
|
}G.@: Kleinmann's @file{groff_man} manual page written for the Debian
|
|
GNU/Linux system.
|
|
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Invoking groff, Tutorial for Macro Users, Introduction, Top
|
|
@chapter Invoking @code{groff}
|
|
@cindex invoking @code{groff}
|
|
@cindex @code{groff} invocation
|
|
|
|
This section focuses on how to invoke the @code{groff} front end. This
|
|
front end takes care of the details of constructing the pipeline among
|
|
the preprocessors, @code{gtroff} and the postprocessor.
|
|
|
|
It has become a tradition that GNU programs get the prefix @samp{g} to
|
|
distinguish it from its original counterparts provided by the host (see
|
|
@ref{Environment}, for more details). Thus, for example, @code{geqn} is
|
|
GNU @code{eqn}. On operating systems like Linux or the Hurd, which
|
|
don't contain proprietary software, and on MS-DOS/MS-Windows, where
|
|
@code{troff} and associated programs are not available at all, this
|
|
prefix is omitted since GNU @code{troff} is the only used incarnation of
|
|
@code{troff}. Exception: @code{groff} is never replaced by @code{roff}.
|
|
|
|
@menu
|
|
* Groff Options::
|
|
* Environment::
|
|
* Invocation Examples::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Groff Options, Environment, Invoking groff, Invoking groff
|
|
@section Options
|
|
@cindex options
|
|
|
|
@pindex groff
|
|
@pindex gtroff
|
|
@pindex gpic
|
|
@pindex geqn
|
|
@pindex ggrn
|
|
@pindex grap
|
|
@pindex gtbl
|
|
@pindex grefer
|
|
@pindex gsoelim
|
|
@code{groff} normally runs the @code{gtroff} program and a postprocessor
|
|
appropriate for the selected device. The default device is @samp{ps}
|
|
(but it can be changed when @code{groff} is configured and built). It
|
|
can optionally preprocess with any of @code{gpic}, @code{geqn},
|
|
@code{gtbl}, @code{ggrn}, @code{grap}, @code{grefer}, or @code{gsoelim}.
|
|
|
|
This section only documents options to the @code{groff} front end. Many
|
|
of the arguments to @code{groff} are passed on to @code{gtroff},
|
|
therefore those are also included. Arguments to pre- or postprocessors
|
|
can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
|
|
gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking
|
|
gsoelim}, @ref{Invoking grotty}, @ref{Invoking grops}, @ref{Invoking
|
|
grohtml}, @ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking
|
|
grolbp}, and @ref{Invoking gxditview}.
|
|
|
|
The command line format for @code{groff} is:
|
|
|
|
@Example
|
|
groff [ -abeghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
|
|
[ -T@var{def} ] [ -f@var{fam} ] [ -w@var{name} ] [ -W@var{name} ]
|
|
[ -M@var{dir} ] [ -d@var{cs} ] [ -r@var{cn} ] [ -n@var{num} ]
|
|
[ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ] [ -I@var{dir} ]
|
|
[ @var{files}@dots{} ]
|
|
@endExample
|
|
|
|
The command line format for @code{gtroff} is as follows.
|
|
|
|
@Example
|
|
gtroff [ -abivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
|
|
[ -f@var{fam} ] [ -m@var{name} ] [ -n@var{num} ]
|
|
[ -o@var{list} ] [ -r@var{cn} ] [ -T@var{name} ]
|
|
[ -F@var{dir} ] [ -M@var{dir} ] [ @var{files}@dots{} ]
|
|
@endExample
|
|
|
|
@noindent
|
|
Obviously, many of the options to @code{groff} are actually passed on to
|
|
@code{gtroff}.
|
|
|
|
Options without an argument can be grouped behind a single @option{-}.
|
|
A filename of @file{-} denotes the standard input. It is possible to
|
|
have whitespace between an option and its parameter.
|
|
|
|
The @code{grog} command can be used to guess the correct @code{groff}
|
|
command to format a file.
|
|
|
|
Here's the description of the command-line options:
|
|
|
|
@cindex command-line options
|
|
@table @samp
|
|
@item -h
|
|
Print a help message.
|
|
|
|
@item -e
|
|
Preprocess with @code{geqn}.
|
|
|
|
@item -t
|
|
Preprocess with @code{gtbl}.
|
|
|
|
@item -g
|
|
Preprocess with @code{ggrn}.
|
|
|
|
@item -G
|
|
Preprocess with @code{grap}.
|
|
|
|
@item -p
|
|
Preprocess with @code{gpic}.
|
|
|
|
@item -s
|
|
Preprocess with @code{gsoelim}.
|
|
|
|
@item -R
|
|
Preprocess with @code{grefer}. No mechanism is provided for passing
|
|
arguments to @code{grefer} because most @code{grefer} options have
|
|
equivalent commands which can be included in the file. @xref{grefer},
|
|
for more details.
|
|
|
|
@pindex troffrc
|
|
@pindex troffrc-end
|
|
Note that @code{gtroff} also accepts a @option{-R} option, which is not
|
|
accessible via @code{groff}. This option prevents the loading of the
|
|
@file{troffrc} and @file{troffrc-end} files.
|
|
|
|
@item -v
|
|
Make programs run by @code{groff} print out their version number.
|
|
|
|
@item -V
|
|
Print the pipeline on @code{stdout} instead of executing it.
|
|
|
|
@item -z
|
|
Suppress output from @code{gtroff}. Only error messages are printed.
|
|
|
|
@item -Z
|
|
Do not postprocess the output of @code{gtroff}. Normally @code{groff}
|
|
automatically runs the appropriate postprocessor.
|
|
|
|
@item -P@var{arg}
|
|
Pass @var{arg} to the postprocessor. Each argument should be passed
|
|
with a separate @option{-P} option. Note that @code{groff} does not
|
|
prepend @samp{-} to @var{arg} before passing it to the postprocessor.
|
|
|
|
@item -l
|
|
Send the output to a spooler for printing. The command used for this is
|
|
specified by the @code{print} command in the device description file
|
|
(see @ref{Font Files}, for more info). If not present, @option{-l} is
|
|
ignored.
|
|
|
|
@item -L@var{arg}
|
|
Pass @var{arg} to the spooler. Each argument should be passed with a
|
|
separate @option{-L} option. Note that @code{groff} does not prepend a
|
|
@samp{-} to @var{arg} before passing it to the postprocessor. If the
|
|
@code{print} keyword in the device description file is missing,
|
|
@option{-L} is ignored.
|
|
|
|
@item -T@var{dev}
|
|
Prepare output for device @var{dev}. The default device is @samp{ps},
|
|
unless changed when @code{groff} was configured and built. The
|
|
following are the output devices currently available:
|
|
|
|
@table @code
|
|
@item ps
|
|
For @sc{PostScript} printers and previewers.
|
|
|
|
@item dvi
|
|
For @TeX{} DVI format.
|
|
|
|
@item X75
|
|
For a 75@dmn{dpi} X11 previewer.
|
|
|
|
@item X100
|
|
For a 100@dmn{dpi} X11 previewer.
|
|
|
|
@item ascii
|
|
For typewriter-like devices.
|
|
|
|
@item latin1
|
|
For typewriter-like devices that support the @w{Latin-1} (@w{ISO
|
|
8859-1}) character set.
|
|
|
|
@item utf8
|
|
For typewriter-like devices which use the Unicode (@w{ISO 10646})
|
|
character set with @w{UTF-8} encoding.
|
|
|
|
@item cp1047
|
|
@cindex @acronym{EBCDIC} encoding
|
|
@cindex cp1047
|
|
@cindex IBM cp1047
|
|
For typewriter-like devices which use the @acronym{EBCDIC} encoding IBM
|
|
cp1047.
|
|
|
|
@item lj4
|
|
For an HP LaserJet4-compatible (or other PCL5-compatible) printer.
|
|
|
|
@item lbp
|
|
For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
|
|
printers).
|
|
|
|
@pindex pre-grohtml
|
|
@pindex post-grohtml
|
|
@cindex @code{grohtml}
|
|
@item html
|
|
To produce @acronym{HTML} output. Note that the @acronym{HTML} driver
|
|
consists of two parts, a preprocessor (@code{pre-grohtml}) and a
|
|
postprocessor (@code{post-grohtml}).
|
|
@end table
|
|
|
|
@vindex .T
|
|
@stindex .T
|
|
The predefined @code{gtroff} string register @code{.T} contains the
|
|
current output device; the read-only number register @code{.T} is set
|
|
to@w{ }1 if this option is used (which is always true if @code{groff} is
|
|
used to call @code{gtroff}). @xref{Built-in Registers}.
|
|
|
|
The postprocessor to be used for a device is specified by the
|
|
@code{postpro} command in the device description file. (@xref{Font
|
|
Files}, for more info.) This can be overridden with the @option{-X}
|
|
option.
|
|
|
|
@item -X
|
|
Preview with @code{gxditview} instead of using the usual postprocessor.
|
|
This is unlikely to produce good results except with @option{-Tps}.
|
|
|
|
Note that this is not the same as using @option{-TX75} or
|
|
@option{-TX100} to view a document with @code{gxditview}: The former
|
|
uses the metrics of the specified device, whereas the latter uses
|
|
X-specific fonts and metrics.
|
|
|
|
@item -N
|
|
Don't allow newlines with @code{eqn} delimiters. This is the same as
|
|
the @option{-N} option in @code{geqn}.
|
|
|
|
@item -S
|
|
Safer mode. Pass the @option{-S} option to @code{gpic} and disable the
|
|
@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
|
|
requests. For security reasons, this is enabled by default.
|
|
|
|
@item -U
|
|
Unsafe mode. Reverts to the old unsafe behaviour.
|
|
|
|
@item -a
|
|
@vindex .A
|
|
Generate an @acronym{ASCII} approximation of the typeset output. The
|
|
read-only register @code{.A} is then set to@w{ }1. @xref{Built-in
|
|
Registers}. A typical example is
|
|
|
|
@Example
|
|
groff -a -man -Tdvi troff.man | less
|
|
@endExample
|
|
|
|
@noindent
|
|
which shows how lines are broken for the DVI device. Note that this
|
|
option is rather useless today since graphic output devices are
|
|
available virtually everywhere.
|
|
|
|
@item -b
|
|
Print a backtrace with each warning or error message. This backtrace
|
|
should help track down the cause of the error. The line numbers given
|
|
in the backtrace may not always be correct: @code{gtroff} can get
|
|
confused by @code{as} or @code{am} requests while counting line numbers.
|
|
|
|
@item -i
|
|
Read the standard input after all the named input files have been
|
|
processed.
|
|
|
|
@item -w@var{name}
|
|
Enable warning @var{name}. Available warnings are described in
|
|
@ref{Debugging}. Multiple @option{-w} options are allowed.
|
|
|
|
@item -W@var{name}
|
|
Inhibit warning @var{name}. Multiple @option{-W} options are allowed.
|
|
|
|
@item -E
|
|
Inhibit all error messages.
|
|
|
|
@item -C
|
|
Enable compatibility mode. @xref{Implementation Differences}, for the
|
|
list of incompatibilities between @code{groff} and traditional Unix
|
|
@code{troff}.
|
|
|
|
@item -d@var{cs}
|
|
@itemx -d@var{name}=s
|
|
Define @var{c} or @var{name} to be a string @var{s}. @var{c} must be a
|
|
one-letter name; @var{name} can be of arbitrary length. All string
|
|
assignments happen before loading any macro file (including the start-up
|
|
file).
|
|
|
|
@item -f@var{fam}
|
|
Use @var{fam} as the default font family. @xref{Font Families}.
|
|
|
|
@item -m@var{name}
|
|
Read in the file @file{@var{name}.tmac}. Normally @code{groff} searches
|
|
for this in its macro directories. If it isn't found, it tries
|
|
@file{tmac.@var{name}} (and searches in the same directories).
|
|
|
|
@c XXX document local and system macro dirs
|
|
|
|
@item -n@var{num}
|
|
Number the first page @var{num}.
|
|
|
|
@item -o@var{list}
|
|
@vindex .P
|
|
Output only pages in @var{list}, which is a comma-separated list of page
|
|
ranges; @samp{@var{n}} means print page @var{n}, @samp{@var{m}-@var{n}}
|
|
means print every page between @var{m} and @var{n}, @samp{-@var{n}}
|
|
means print every page up to @var{n}, @samp{@var{n}-} means print every
|
|
page beginning with @var{n}. @code{gtroff} exits after printing the
|
|
last page in the list. All the ranges are inclusive on both ends.
|
|
|
|
Within @code{gtroff}, this information can be extracted with the
|
|
@samp{.P} register. @xref{Built-in Registers}.
|
|
|
|
If your document restarts page numbering at the beginning of each
|
|
chapter, then @code{gtroff} prints the specified page range for each
|
|
chapter.
|
|
|
|
@item -r@var{cn}
|
|
@itemx -r@var{name}=@var{n}
|
|
Set number register @var{c} or @var{name} to the value @var{n}. @var{c}
|
|
must be a one-letter name; @var{name} can be of arbitrary length.
|
|
@var{n} can be any @code{gtroff} numeric expression. All register
|
|
assignments happen before loading any macro file (including the start-up
|
|
file).
|
|
|
|
@item -F@var{dir}
|
|
Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
|
|
(@var{name} is the name of the device), for the @file{DESC} file, and
|
|
for font files before looking in the standard directories.
|
|
|
|
@item -M@var{dir}
|
|
Search directory @file{@var{dir}} for macro files before the standard
|
|
directories.
|
|
|
|
@item -I@var{dir}
|
|
This option is as described in @ref{gsoelim}. It implies the
|
|
@option{-s} option.
|
|
@end table
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Environment, Invocation Examples, Groff Options, Invoking groff
|
|
@section Environment
|
|
@cindex environment variables
|
|
@cindex variables in environment
|
|
|
|
There are also several environment variables (of the operating system,
|
|
not within @code{gtroff}) which can modify the behavior of @code{groff}.
|
|
|
|
@table @code
|
|
@item GROFF_COMMAND_PREFIX
|
|
@tindex GROFF_COMMAND_PREFIX, environment variable
|
|
If this is set to @var{X}, then @code{groff} runs @code{@var{X}troff}
|
|
instead of @code{gtroff}. This also applies to @code{tbl}, @code{pic},
|
|
@code{eqn}, @code{grn}, @code{refer}, and @code{soelim}. It does not
|
|
apply to @code{grops}, @code{grodvi}, @code{grotty}, @code{pre-grohtml},
|
|
@code{post-grohtml}, @code{grolj4}, and @code{gxditview}.
|
|
|
|
@c XXX document default values
|
|
|
|
@item GROFF_TMAC_PATH
|
|
@tindex GROFF_TMAC_PATH, environment variable
|
|
A colon-separated list of directories in which to search for macro files
|
|
(before the default directories are tried).
|
|
|
|
@c XXX document local and system macro dirs
|
|
|
|
@item GROFF_TYPESETTER
|
|
@tindex GROFF_TYPESETTER, environment variable
|
|
The default output device.
|
|
|
|
@item GROFF_FONT_PATH
|
|
@tindex GROFF_FONT_PATH, environment variable
|
|
A colon-separated list of directories in which to search for the
|
|
@code{dev}@var{name} directory (before the default directories are
|
|
tried).
|
|
|
|
@item GROFF_BIN_PATH
|
|
@tindex GROFF_BIN_PATH, environment variable
|
|
This search path, followed by @code{PATH}, is used for commands executed
|
|
by @code{groff}.
|
|
|
|
@item GROFF_TMPDIR
|
|
@tindex GROFF_TMPDIR, environment variable
|
|
@tindex TMPDIR, environment variable
|
|
The directory in which @code{groff} creates temporary files. If this is
|
|
not set and @env{TMPDIR} is set, temporary files are created in that
|
|
directory. Otherwise temporary files are created in a system-dependent
|
|
default directory (on Unix and GNU/Linux systems, this is usually
|
|
@file{/tmp}). @code{grops}, @code{grefer}, @code{pre-grohtml}, and
|
|
@code{post-grohtml} can create temporary files in this directory.
|
|
@end table
|
|
|
|
Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
|
|
rather than colons, to separate the directories in the lists described
|
|
above.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Invocation Examples, , Environment, Invoking groff
|
|
@section Invocation Examples
|
|
@cindex invocation examples
|
|
@cindex examples of invocation
|
|
|
|
This section lists several common uses of @code{groff} and the
|
|
corresponding command lines.
|
|
|
|
@Example
|
|
groff file
|
|
@endExample
|
|
|
|
@noindent
|
|
This command processes @file{file} without a macro package or a
|
|
preprocessor. The output device is the default, @samp{ps}, and the
|
|
output is sent to @code{stdout}.
|
|
|
|
@Example
|
|
groff -t -mandoc -Tascii file | less
|
|
@endExample
|
|
|
|
@noindent
|
|
This is basically what a call to the @code{man} program does.
|
|
@code{gtroff} processes the manual page @file{file} with the
|
|
@file{mandoc} macro file (which in turn either calls the @file{man} or
|
|
the @file{mdoc} macro package), using the @code{tbl} preprocessor and
|
|
the @acronym{ASCII} output device. Finally, the @code{less} pager
|
|
displays the result.
|
|
|
|
@Example
|
|
groff -X -m me file
|
|
@endExample
|
|
|
|
@noindent
|
|
Preview @file{file} with @code{gxditview}, using the @file{me} macro
|
|
package. Since no @option{-T} option is specified, use the default
|
|
device (@samp{ps}). Note that you can either say @w{@samp{-m me}} or
|
|
@w{@samp{-me}}; the latter is an anachronism from the early days of
|
|
@acronym{UNIX}.@footnote{The same is true for the other main macro
|
|
packages that come with @code{groff}: @file{man}, @file{mdoc},
|
|
@file{ms}, @file{mm}, and @file{mandoc}. This won't work in general;
|
|
for example, to load @file{trace.tmac}, either @samp{-mtrace} or
|
|
@w{@samp{-m trace}} must be used.}
|
|
|
|
@Example
|
|
groff -man -rD1 -z file
|
|
@endExample
|
|
|
|
@noindent
|
|
Check @file{file} with the @file{man} macro package, forcing
|
|
double-sided printing -- don't produce any output.
|
|
|
|
@menu
|
|
* grog::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node grog, , Invocation Examples, Invocation Examples
|
|
@subsection @code{grog}
|
|
|
|
@pindex grog
|
|
@code{grog} reads files, guesses which of the @code{groff} preprocessors
|
|
and/or macro packages are required for formatting them, and prints the
|
|
@code{groff} command including those options on the standard output. It
|
|
generates one or more of the options @option{-e}, @option{-man},
|
|
@option{-me}, @option{-mm}, @option{-ms}, @option{-mdoc},
|
|
@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
|
|
@option{-s}, and @option{-t}.
|
|
|
|
A special file name @file{-} refers to the standard input. Specifying
|
|
no files also means to read the standard input. Any specified options
|
|
are included in the printed command. No space is allowed between
|
|
options and their arguments. The only options recognized are
|
|
@option{-C} (which is also passed on) to enable compatibility mode, and
|
|
@option{-v} (if it is the only parameter) to print the version number.
|
|
|
|
For example,
|
|
|
|
@Example
|
|
grog -Tdvi paper.ms
|
|
@endExample
|
|
|
|
@noindent
|
|
guesses the appropriate command to print @file{paper.ms} and then prints
|
|
it to the command line after adding the @option{-Tdvi} option. For
|
|
direct execution, enclose the call to @code{grog} in backquotes at the
|
|
@acronym{UNIX} shell prompt:
|
|
|
|
@Example
|
|
`grog -Tdvi paper.ms` > paper.dvi
|
|
@endExample
|
|
|
|
@noindent
|
|
As seen in the example, it is still necessary to redirect the output to
|
|
something meaningful (i.e.@: either a file or a pager program like
|
|
@code{less}).
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
|
|
@chapter Tutorial for Macro Users
|
|
@cindex tutorial for macro users
|
|
@cindex macros, tutorial for users
|
|
@cindex user's tutorial for macros
|
|
@cindex user's macro tutorial
|
|
|
|
Most users tend to use a macro package to format their papers. This
|
|
means that the whole breadth of @code{groff} is not necessary for most
|
|
people. This chapter covers the material needed to efficiently use a
|
|
macro package.
|
|
|
|
@menu
|
|
* Basics::
|
|
* Common Features::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
|
|
@section Basics
|
|
@cindex basics of macros
|
|
@cindex macro basics
|
|
|
|
This section covers some of the basic concepts necessary to understand
|
|
how to use a macro package.@footnote{This section is derived from
|
|
@cite{Writing Papers with nroff using -me} by Eric P.@w{ }Allman.}
|
|
References are made throughout to more detailed information, if desired.
|
|
|
|
@code{gtroff} reads an input file prepared by the user and outputs a
|
|
formatted document suitable for publication or framing. The input
|
|
consists of text, or words to be printed, and embedded commands
|
|
(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
|
|
format the output. For more detail on this, see @ref{Embedded
|
|
Commands}.
|
|
|
|
The word @dfn{argument} is used in this chapter to mean a word or number
|
|
which appears on the same line as a request, and which modifies the
|
|
meaning of that request. For example, the request
|
|
|
|
@Example
|
|
.sp
|
|
@endExample
|
|
|
|
@noindent
|
|
spaces one line, but
|
|
|
|
@Example
|
|
.sp 4
|
|
@endExample
|
|
|
|
@noindent
|
|
spaces four lines. The number@w{ }4 is an argument to the @code{sp}
|
|
request which says to space four lines instead of one. Arguments are
|
|
separated from the request and from each other by spaces (@emph{no}
|
|
tabs). More details on this can be found in @ref{Request Arguments}.
|
|
|
|
The primary function of @code{gtroff} is to collect words from input
|
|
lines, fill output lines with those words, justify the right-hand margin
|
|
by inserting extra spaces in the line, and output the result. For
|
|
example, the input:
|
|
|
|
@Example
|
|
Now is the time
|
|
for all good men
|
|
to come to the aid
|
|
of their party.
|
|
Four score and seven
|
|
years ago,...
|
|
@endExample
|
|
|
|
@noindent
|
|
is read, packed onto output lines, and justified to produce:
|
|
|
|
@quotation
|
|
Now is the time for all good men to come to the aid of their party.
|
|
Four score and seven years ago,...
|
|
@end quotation
|
|
|
|
@cindex break
|
|
@cindex line break
|
|
Sometimes a new output line should be started even though the current
|
|
line is not yet full; for example, at the end of a paragraph. To do
|
|
this it is possible to cause a @dfn{break}, which starts a new output
|
|
line. Some requests cause a break automatically, as normally do blank
|
|
input lines and input lines beginning with a space.
|
|
|
|
Not all input lines are text to be formatted. Some input lines are
|
|
requests which describe how to format the text. Requests always have a
|
|
period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
|
|
the input line.
|
|
|
|
The text formatter also does more complex things, such as automatically
|
|
numbering pages, skipping over page boundaries, putting footnotes in the
|
|
correct place, and so forth.
|
|
|
|
Here are a few hints for preparing text for input to @code{gtroff}.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
First, keep the input lines short. Short input lines are easier to
|
|
edit, and @code{gtroff} packs words onto longer lines anyhow.
|
|
|
|
@item
|
|
In keeping with this, it is helpful to begin a new line after every
|
|
comma or phrase, since common corrections are to add or delete sentences
|
|
or phrases.
|
|
|
|
@item
|
|
End each sentence with two spaces -- or better, start each sentence on a
|
|
new line. @code{gtroff} recognizes characters that usually end a
|
|
sentence, and inserts sentence space accordingly.
|
|
|
|
@item
|
|
Do not hyphenate words at the end of lines -- @code{gtroff} is smart
|
|
enough to hyphenate words as needed, but is not smart enough to take
|
|
hyphens out and join a word back together. Also, words such as
|
|
``mother-in-law'' should not be broken over a line, since then a space
|
|
can occur where not wanted, such as ``@w{mother- in}-law''.
|
|
@end itemize
|
|
|
|
@rqindex ls
|
|
@cindex double spacing
|
|
@cindex spacing
|
|
@code{gtroff} double spaces output text automatically if you use the
|
|
request @w{@samp{.ls 2}}. Reactivate single spaced mode by typing
|
|
@w{@samp{.ls 1}}.
|
|
|
|
A number of requests allow to change the way the output looks,
|
|
sometimes called the @dfn{layout} of the output page. Most of these
|
|
requests adjust the placing of @dfn{white space} (blank lines or
|
|
spaces).
|
|
|
|
@cindex new page
|
|
The @samp{.bp} request starts a new page, causing a line break.
|
|
|
|
@cindex blank line
|
|
@cindex empty line
|
|
@cindex line, empty
|
|
The request @w{@samp{.sp @var{N}}} leaves @var{N}@w{ }lines of blank
|
|
space. @var{N}@w{ }can be omitted (meaning skip a single line) or can
|
|
be of the form @var{N}i (for @var{N}@w{ }inches) or @var{N}c (for
|
|
@var{N}@w{ }centimeters). For example, the input:
|
|
|
|
@Example
|
|
.sp 1.5i
|
|
My thoughts on the subject
|
|
.sp
|
|
@endExample
|
|
|
|
@noindent
|
|
leaves one and a half inches of space, followed by the line ``My
|
|
thoughts on the subject'', followed by a single blank line (more
|
|
measurement units are available, see @ref{Measurements}).
|
|
|
|
@rqindex ce
|
|
@cindex centering lines
|
|
@cindex lines, centering
|
|
Text lines can be centered by using the @code{ce} request. The line
|
|
after @code{ce} is centered (horizontally) on the page. To center more
|
|
than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
|
|
of lines to center), followed by the @var{N}@w{ }lines. To center many
|
|
lines without counting them, type:
|
|
|
|
@Example
|
|
.ce 1000
|
|
lines to center
|
|
.ce 0
|
|
@endExample
|
|
|
|
@noindent
|
|
The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
|
|
lines, in other words, stop centering.
|
|
|
|
@rqindex br
|
|
@cindex line break
|
|
@cindex break
|
|
All of these requests cause a break; that is, they always start a new
|
|
line. To start a new line without performing any other action, use
|
|
@code{br}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Common Features, , Basics, Tutorial for Macro Users
|
|
@section Common Features
|
|
@cindex common features
|
|
@cindex features, common
|
|
|
|
@code{gtroff} provides very low-level operations for formatting a
|
|
document. There are many common routine operations which are done in
|
|
all documents. These common operations are written into @dfn{macros}
|
|
and collected into a @dfn{macro package}.
|
|
|
|
All macro packages provide certain common capabilities which fall into
|
|
the following categories.
|
|
|
|
@menu
|
|
* Paragraphs::
|
|
* Sections and Chapters::
|
|
* Headers and Footers::
|
|
* Page Layout Adjustment::
|
|
* Displays::
|
|
* Footnotes and Annotations::
|
|
* Table of Contents::
|
|
* Indices::
|
|
* Paper Formats::
|
|
* Multiple Columns::
|
|
* Font and Size Changes::
|
|
* Predefined Strings::
|
|
* Preprocessor Support::
|
|
* Configuration and Customization::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Paragraphs, Sections and Chapters, Common Features, Common Features
|
|
@subsection Paragraphs
|
|
@cindex paragraphs
|
|
|
|
One of the most common and most used capability is starting a
|
|
paragraph. There are a number of different types of paragraphs, any
|
|
of which can be initiated with macros supplied by the macro package.
|
|
Normally, paragraphs start with a blank line and the first line
|
|
indented, like the text in this manual. There are also block style
|
|
paragraphs, which omit the indentation:
|
|
|
|
@Example
|
|
Some men look at constitutions with sanctimonious
|
|
reverence, and deem them like the ark of the covenant, too
|
|
sacred to be touched.
|
|
@endExample
|
|
|
|
@noindent
|
|
And there are also indented paragraphs which begin with a tag or label
|
|
at the margin and the remaining text indented.
|
|
|
|
@example
|
|
@group
|
|
one This is the first paragraph. Notice how the first
|
|
line of the resulting paragraph lines up with the
|
|
other lines in the paragraph.
|
|
@end group
|
|
@group
|
|
longlabel
|
|
This paragraph had a long label. The first
|
|
character of text on the first line does not line up
|
|
with the text on second and subsequent lines,
|
|
although they line up with each other.
|
|
@end group
|
|
@end example
|
|
|
|
A variation of this is a bulleted list.
|
|
|
|
@c XXX description
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
|
|
@subsection Sections and Chapters
|
|
|
|
Most macro packages supply some form of section headers. The simplest
|
|
kind is simply the heading on a line by itself in bold type. Others
|
|
supply automatically numbered section heading or different heading
|
|
styles at different levels. Some, more sophisticated, macro packages
|
|
supply macros for starting chapters and appendices.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
|
|
@subsection Headers and Footers
|
|
|
|
Every macro package gives some way to manipulate the headers and footers
|
|
(or @dfn{titles}) on each page. Some packages allow for different ones
|
|
on the even and odd pages (for material printed in a book form).
|
|
|
|
The titles are called three-part titles, that is, there is a
|
|
left-justified part, a centered part, and a right-justified part. An
|
|
automatically generated page number may be put in any of these fields
|
|
with the @samp{%} character (see @ref{Page Layout}, for more details).
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
|
|
@subsection Page Layout
|
|
|
|
Most macro packages let the user specify top and bottom margins and
|
|
other details about the appearance of the printed pages.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
|
|
@subsection Displays
|
|
@cindex displays
|
|
|
|
Displays are sections of text to be set off from the body of the paper.
|
|
Major quotes, tables, and figures are types of displays, as are all the
|
|
examples used in this document.
|
|
|
|
@cindex quotes, major
|
|
@cindex major quotes
|
|
@dfn{Major quotes} are quotes which are several lines long, and hence
|
|
are set in from the rest of the text without quote marks around them.
|
|
|
|
@cindex list
|
|
A @dfn{list} is an indented, single spaced, unfilled display. Lists
|
|
should be used when the material to be printed should not be filled and
|
|
justified like normal text, such as columns of figures or the examples
|
|
used in this paper.
|
|
|
|
@cindex keep
|
|
A @dfn{keep} is a display of lines which are kept on a single page if
|
|
possible. An example for a keep might be a diagram. Keeps differ from
|
|
lists in that lists may be broken over a page boundary whereas keeps are
|
|
not.
|
|
|
|
@cindex keep, floating
|
|
@cindex floating keep
|
|
Floating keeps move relative to the text. Hence, they are good for
|
|
things which are referred to by name, such as ``See figure@w{ }3''. A
|
|
floating keep appears at the bottom of the current page if it fits;
|
|
otherwise, it appears at the top of the next page. Meanwhile, the
|
|
surrounding text `flows' around the keep, thus leaving no blank areas.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Footnotes and Annotations, Table of Contents, Displays, Common Features
|
|
@subsection Footnotes and Annotations
|
|
@cindex footnotes
|
|
@cindex annotations
|
|
|
|
There are a number of requests to save text for later printing.
|
|
|
|
@dfn{Footnotes} are printed at the bottom of the current page.
|
|
|
|
@cindex delayed text
|
|
@dfn{Delayed text} is very similar to a footnote except that it is
|
|
printed when called for explicitly. This allows a list of references to
|
|
appear (for example) at the end of each chapter, as is the convention in
|
|
some disciplines.
|
|
|
|
Most macro packages which supply this functionality also supply a means
|
|
of automatically numbering either type of annotation.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Table of Contents, Indices, Footnotes and Annotations, Common Features
|
|
@subsection Table of Contents
|
|
@cindex table of contents
|
|
@cindex contents, table of
|
|
|
|
@dfn{Tables of contents} are a type of delayed text having a tag
|
|
(usually the page number) attached to each entry after a row of dots.
|
|
The table accumulates throughout the paper until printed, usually after
|
|
the paper has ended. Many macro packages provide the ability to have
|
|
several tables of contents (e.g.@: a standard table of contents, a list
|
|
of tables, etc).
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Indices, Paper Formats, Table of Contents, Common Features
|
|
@subsection Indices
|
|
@cindex index, in macro package
|
|
|
|
While some macro packages use the term @dfn{index}, none actually
|
|
provide that functionality. The facilities they call indices are
|
|
actually more appropriate for tables of contents.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Paper Formats, Multiple Columns, Indices, Common Features
|
|
@subsection Paper Formats
|
|
@cindex paper formats
|
|
|
|
Some macro packages provide stock formats for various kinds of
|
|
documents. Many of them provide a common format for the title and
|
|
opening pages of a technical paper. The @file{mm} macros in particular
|
|
provide formats for letters and memoranda.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
|
|
@subsection Multiple Columns
|
|
|
|
Some macro packages (but not @file{man}) provide the ability to have two
|
|
or more columns on a page.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
|
|
@subsection Font and Size Changes
|
|
|
|
The built-in font and size functions are not always intuitive, so all
|
|
macro packages provide macros to make these operations simpler.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
|
|
@subsection Predefined Strings
|
|
|
|
Most macro packages provide various predefined strings for a variety of
|
|
uses; examples are sub- and superscripts, printable dates, quotes and
|
|
various special characters.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
|
|
@subsection Preprocessor Support
|
|
|
|
All macro packages provide support for the various preprocessors and may
|
|
extend their functionality.
|
|
|
|
For example, all macro packages mark tables (which are processed with
|
|
@code{gtbl}) by placing them between @code{.TS} and @code{.TE} macros.
|
|
The @file{ms} macro package has an option, @code{.TS@w{}H}, that prints
|
|
a caption at the top of a new page (when the table is too long to fit on
|
|
a single page).
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Configuration and Customization, , Preprocessor Support, Common Features
|
|
@subsection Configuration and Customization
|
|
|
|
Some macro packages provide means of customizing many of the details of
|
|
how the package behaves. This ranges from setting the default type size
|
|
to changing the appearance of section headers.
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
|
|
@chapter Macro Packages
|
|
@cindex macro packages
|
|
@cindex packages, macros
|
|
|
|
This chapter documents the main macro packages that come with
|
|
@code{groff}.
|
|
|
|
@menu
|
|
* man::
|
|
* mdoc::
|
|
* ms::
|
|
* me::
|
|
* mm::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node man, mdoc, Macro Packages, Macro Packages
|
|
@section @file{man}
|
|
@cindex @file{man}
|
|
@cindex manual pages
|
|
@pindex an.tmac
|
|
@pindex man.tmac
|
|
@pindex man-old.tmac
|
|
|
|
This is the most popular and probably the most important macro package
|
|
of @code{groff}. It is easy to use, and a vast majority of manual pages
|
|
are based on it.
|
|
|
|
@menu
|
|
* Man options::
|
|
* Man usage::
|
|
* Man font macros::
|
|
* Miscellaneous man macros::
|
|
* Predefined man strings::
|
|
* Preprocessors in man pages::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Man options, Man usage, man, man
|
|
@subsection Options
|
|
|
|
The command line format for using the @file{man} macros with
|
|
@code{groff} is:
|
|
|
|
@Example
|
|
groff -m man [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [ -rP@var{nnn} ]
|
|
[ -rS@var{xx} ] [ -rX@var{nnn} ] [ @var{files}@dots{} ]
|
|
@endExample
|
|
|
|
@noindent
|
|
It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
|
|
|
|
@table @code
|
|
@item -rcR=1
|
|
This option (the default if a tty output device is used) creates a
|
|
single, very long page instead of multiple pages. Use @code{-rcR=0}
|
|
to disable it.
|
|
|
|
@item -rC1
|
|
If more than one manual page is given on the command line, number the
|
|
pages continuously, rather than starting each at@w{ }1.
|
|
|
|
@item -rD1
|
|
Double-sided printing. Footers for even and odd pages are formatted
|
|
differently.
|
|
|
|
@item -rP@var{nnn}
|
|
Page numbering starts with @var{nnn} rather than with@w{ }1.
|
|
|
|
@item -rS@var{xx}
|
|
Use @var{xx} (which can be 10, 11, or@w{ }12@dmn{pt}) as the base
|
|
document font size instead of the default value of@w{ }10@dmn{pt}.
|
|
|
|
@item -rX@var{nnn}
|
|
After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
|
|
@var{nnn}c, etc. For example, the option @option{-rX2} produces the
|
|
following page numbers: 1, 2, 2a, 2b, 2c, etc.
|
|
@end table
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Man usage, Man font macros, Man options, man
|
|
@subsection Usage
|
|
@cindex @code{man} macros
|
|
@cindex macros for manual pages
|
|
|
|
@pindex man.local
|
|
This section describes the available macros for manual pages. For
|
|
further customization, put additional macros and requests into the file
|
|
@file{man.local} which is loaded immediately after the @file{man}
|
|
package.
|
|
|
|
@Defmac {TH, title section [@Var{extra1}] [@Var{extra2}] [@Var{extra3}]}
|
|
Set the title of the man page to @var{title} and the section to
|
|
@var{section}, which must have a value between 1 and@w{ }8. The value
|
|
of @var{section} may also have a string appended, e.g.@: @samp{.pm},
|
|
to indicate a specific subsection of the man pages.
|
|
|
|
Both @var{title} and @var{section} are positioned at the left and right
|
|
in the header line (with @var{section} in parentheses immediately
|
|
appended to @var{title}. @var{extra1} is positioned in the middle of
|
|
the footer line. @var{extra2} is positioned at the left in the footer
|
|
line (or at the left on even pages and at the right on odd pages if
|
|
double-sided printing is active). @var{extra3} is centered in the
|
|
header line.
|
|
|
|
For @acronym{HTML} output, headers and footers are completely suppressed.
|
|
|
|
Additionally, this macro starts a new page; the new line number is@w{ }1
|
|
again (except if the @option{-rC1} option is given on the command line)
|
|
-- this feature is intended only for formatting multiple man pages; a
|
|
single man page should contain exactly one @code{TH} macro at the
|
|
beginning of the file.
|
|
@endDefmac
|
|
|
|
@Defmac {SH, [@Var{heading}]}
|
|
Set up an unnumbered section heading sticking out to the left. Prints
|
|
out all the text following @code{SH} up to the end of the line (or the
|
|
text in the next line if there is no argument to @code{SH}) in bold
|
|
face, one size larger than the base document size. Additionally, the
|
|
left margin for the following text is reset to its default value.
|
|
@endDefmac
|
|
|
|
@Defmac {SS, [@Var{heading}]}
|
|
Set up an unnumbered (sub)section heading. Prints out all the text
|
|
following @code{SS} up to the end of the line (or the text in the next
|
|
line if there is no argument to @code{SS}) in bold face, at the same
|
|
size as the base document size. Additionally, the left margin for the
|
|
following text is reset to its default value.
|
|
@endDefmac
|
|
|
|
@Defmac {TP, [@Var{nnn}]}
|
|
Set up an indented paragraph with label. The indentation is set to
|
|
@var{nnn} if that argument is supplied (the default unit is @samp{n}
|
|
if omitted), otherwise it is set to the default indentation value.
|
|
|
|
The first line of text following this macro is interpreted as a string
|
|
to be printed flush-left, as it is appropriate for a label. It is not
|
|
interpreted as part of a paragraph, so there is no attempt to fill the
|
|
first line with text from the following input lines. Nevertheless, if
|
|
the label is not as wide as the indentation, then the paragraph starts
|
|
at the same line (but indented), continuing on the following lines.
|
|
If the label is wider than the indentation, then the descriptive part
|
|
of the paragraph begins on the line following the label, entirely
|
|
indented. Note that neither font shape nor font size of the label is
|
|
set to a default value; on the other hand, the rest of the text has
|
|
default font settings.
|
|
@endDefmac
|
|
|
|
@Defmac {LP}
|
|
@Defmacx {PP}
|
|
@Defmacx {P}
|
|
These macros are mutual aliases. Any of them causes a line break at
|
|
the current position, followed by a vertical space downwards by the
|
|
amount specified by the @code{PD} macro. The font size and shape are
|
|
reset to the default value (10@dmn{pt} roman). Finally, the current
|
|
left margin is restored.
|
|
@endDefmac
|
|
|
|
@Defmac {IP, [@Var{designator}] [@Var{nnn}]}
|
|
Set up an indented paragraph, using @var{designator} as a tag to mark
|
|
its beginning. The indentation is set to @var{nnn} if that argument
|
|
is supplied (default unit is @samp{n}), otherwise the default
|
|
indentation value is used. Font size and face of the paragraph (but
|
|
not the designator) are reset to their default values. To start an
|
|
indented paragraph with a particular indentation but without a
|
|
designator, use @samp{""} (two double quotes) as the first argument of
|
|
@code{IP}.
|
|
|
|
For example, to start a paragraph with bullets as the designator and
|
|
4@dmn{en} indentation, write
|
|
|
|
@Example
|
|
.IP \(bu 4
|
|
@endExample
|
|
@endDefmac
|
|
|
|
@cindex hanging indentation, in manual pages
|
|
@Defmac {HP, [@Var{nnn}]}
|
|
Set up a paragraph with hanging left indentation. The indentation is
|
|
set to @var{nnn} if that argument is supplied (default unit is
|
|
@samp{n}), otherwise the default indentation value is used. Font size
|
|
and face are reset to their default values.
|
|
@endDefmac
|
|
|
|
@cindex left margin, how to move, in manual pages
|
|
@Defmac {RS, [@Var{nnn}]}
|
|
Move the left margin to the right by the value @var{nnn} if specified
|
|
(default unit is @samp{n}); otherwise the default indentation value is
|
|
used. Calls to the @code{RS} macro can be nested.
|
|
@endDefmac
|
|
|
|
@Defmac {RE, [@Var{nnn}]}
|
|
Move the left margin back to level @var{nnn}; if no argument is given,
|
|
it moves one level back. The first level (i.e., no call to @code{RS}
|
|
yet) has number@w{ }1, and each call to @code{RS} increases the level
|
|
by@w{ }1.
|
|
@endDefmac
|
|
|
|
@maindex SH
|
|
@maindex SS
|
|
@maindex TP
|
|
@maindex LP
|
|
@maindex PP
|
|
@maindex P
|
|
@maindex IP
|
|
@maindex HP
|
|
To summarize, the following macros cause a line break with the insertion
|
|
of vertical space (which amount can be changed with the @code{PD}
|
|
macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
|
|
@code{P}), @code{IP}, and @code{HP}.
|
|
|
|
@maindex RS
|
|
@maindex RE
|
|
The macros @code{RS} and @code{RE} also cause a break but do not insert
|
|
vertical space.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Man font macros, Miscellaneous man macros, Man usage, man
|
|
@subsection Macros to set fonts
|
|
@cindex fonts in manual pages
|
|
@cindex @code{man}, how to set fonts
|
|
|
|
The standard font is roman; the default text size is 10@w{ }point.
|
|
|
|
@Defmac {SM, [@Var{text}]}
|
|
Set the text on the same line or the text on the next line in a font
|
|
that is one point size smaller than the default font.
|
|
@endDefmac
|
|
|
|
@cindex boldface, in manual pages
|
|
@Defmac {SB, [@Var{text}]}
|
|
Set the text on the same line or the text on the next line in boldface
|
|
font, one point size smaller than the default font.
|
|
@endDefmac
|
|
|
|
@Defmac {BI, text}
|
|
Set its arguments alternately in bold face and italic. Thus,
|
|
|
|
@Example
|
|
.BI this "word and" that
|
|
@endExample
|
|
|
|
@noindent
|
|
would set ``this'' and ``that'' in bold face, and ``word and'' in
|
|
italics.
|
|
@endDefmac
|
|
|
|
@Defmac {IB, text}
|
|
Set its arguments alternately in italic and bold face.
|
|
@endDefmac
|
|
|
|
@Defmac {RI, text}
|
|
Set its arguments alternately in roman and italic.
|
|
@endDefmac
|
|
|
|
@Defmac {IR, text}
|
|
Set its arguments alternately in italic and roman.
|
|
@endDefmac
|
|
|
|
@Defmac {BR, text}
|
|
Set its arguments alternately in bold face and roman.
|
|
@endDefmac
|
|
|
|
@Defmac {RB, text}
|
|
Set its arguments alternately in roman and bold face.
|
|
@endDefmac
|
|
|
|
@Defmac {R, [@Var{text}]}
|
|
Set @var{text} in roman font. If no text is present on the line where
|
|
the macro is called, then the text of the next line appears in roman.
|
|
This is the default font to which text is returned at the end of
|
|
processing of the other macros.
|
|
@endDefmac
|
|
|
|
@Defmac {B, [@Var{text}]}
|
|
Set @var{text} in bold face. If no text is present on the line where
|
|
the macro is called, then the text of the next line appears in bold
|
|
face.
|
|
@endDefmac
|
|
|
|
@cindex italic, in manual pages
|
|
@Defmac {I, [@Var{text}]}
|
|
Set @var{text} in italic. If no text is present on the line where the
|
|
macro is called, then the text of the next line appears in italic.
|
|
@endDefmac
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Miscellaneous man macros, Predefined man strings, Man font macros, man
|
|
@subsection Miscellaneous macros
|
|
|
|
@pindex grohtml
|
|
@cindex @file{man}, default indentation
|
|
@cindex default indentation, @file{man}
|
|
The default indentation is 7.2@dmn{n} for all output devices except for
|
|
@code{grohtml} which ignores indentation.
|
|
|
|
@maindex TH
|
|
@cindex tab stops, in manual pages
|
|
@Defmac {DT}
|
|
Set tabs every 0.5@w{ }inches. Since this macro is always called
|
|
during a @code{TH} request, it makes sense to call it only if the tab
|
|
positions have been changed.
|
|
@endDefmac
|
|
|
|
@cindex empty space before a paragraph, in manual pages
|
|
@Defmac {PD, [@Var{nnn}]}
|
|
Adjust the empty space before a new paragraph (or section). The
|
|
optional argument gives the amount of space (default unit is
|
|
@samp{v}); without parameter, the value is reset to its default value
|
|
(1@w{ }line for tty devices, 0.4@dmn{v}@w{ }otherwise).
|
|
@endDefmac
|
|
|
|
@maindex SH
|
|
@maindex SS
|
|
@maindex TP
|
|
@maindex LP
|
|
@maindex PP
|
|
@maindex P
|
|
@maindex IP
|
|
@maindex HP
|
|
This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
|
|
well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
|
|
@subsection Predefined strings
|
|
|
|
The following strings are defined:
|
|
|
|
@Defstr {*S}
|
|
Switch back to the default font size.
|
|
@endDefstr
|
|
|
|
@Defstr {*R}
|
|
The `registered' sign.
|
|
@endDefstr
|
|
|
|
@Defstr {Tm}
|
|
The `trademark' sign.
|
|
@endDefstr
|
|
|
|
@glindex lq
|
|
@glindex rq
|
|
@Defstr {lq}
|
|
@Defstrx {rq}
|
|
Left and right quote. This is equal to @code{\(lq} and @code{\(rq},
|
|
respectively.
|
|
@endDefstr
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Preprocessors in man pages, , Predefined man strings, man
|
|
@subsection Preprocessors in @file{man} pages
|
|
|
|
@cindex preprocessor, calling convention
|
|
@cindex calling convention of preprocessors
|
|
If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
|
|
become common usage to make the first line of the man page look like
|
|
this:
|
|
|
|
@Example
|
|
.\" @var{word}
|
|
@endExample
|
|
|
|
@pindex geqn@r{, invocation in manual pages}
|
|
@pindex grefer@r{, invocation in manual pages}
|
|
@pindex gtbl@r{, invocation in manual pages}
|
|
@pindex man@r{, invocation of preprocessors}
|
|
@noindent
|
|
Note the single space character after the double quote. @var{word}
|
|
consists of letters for the needed preprocessors: @samp{e} for
|
|
@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
|
|
Modern implementations of the @code{man} program read this first line
|
|
and automatically call the right preprocessor(s).
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node mdoc, ms, man, Macro Packages
|
|
@section @file{mdoc}
|
|
@cindex @file{mdoc}
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node ms, me, mdoc, Macro Packages
|
|
@section @file{ms}
|
|
@cindex @file{ms}
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node me, mm, ms, Macro Packages
|
|
@section @file{me}
|
|
@cindex @file{me}
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node mm, , me, Macro Packages
|
|
@section @file{mm}
|
|
@cindex @file{mm}
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node gtroff Reference, Preprocessors, Macro Packages, Top
|
|
@chapter @code{gtroff} Reference
|
|
@cindex reference, @code{gtroff}
|
|
@cindex @code{gtroff} reference
|
|
|
|
This chapter covers @strong{all} of the facilities of @code{gtroff}.
|
|
Users of macro packages may skip it if not interested in details.
|
|
|
|
|
|
@menu
|
|
* Text::
|
|
* Input Conventions::
|
|
* Measurements::
|
|
* Expressions::
|
|
* Identifiers::
|
|
* Embedded Commands::
|
|
* Registers::
|
|
* Manipulating Filling and Adjusting::
|
|
* Manipulating Hyphenation::
|
|
* Manipulating Spacing::
|
|
* Tabs and Fields::
|
|
* Character Translations::
|
|
* Troff and Nroff Mode::
|
|
* Line Layout::
|
|
* Page Layout::
|
|
* Page Control::
|
|
* Fonts::
|
|
* Sizes::
|
|
* Strings::
|
|
* Conditionals and Loops::
|
|
* Writing Macros::
|
|
* Page Motions::
|
|
* Drawing Requests::
|
|
* Traps::
|
|
* Diversions::
|
|
* Environments::
|
|
* Suppressing output::
|
|
* I/O::
|
|
* Postprocessor Access::
|
|
* Miscellaneous::
|
|
* Gtroff Internals::
|
|
* Debugging::
|
|
* Implementation Differences::
|
|
* Summary::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Text, Input Conventions, gtroff Reference, gtroff Reference
|
|
@section Text
|
|
@cindex text, @code{gtroff} processing
|
|
|
|
@code{gtroff} input files contain text with control commands
|
|
interspersed throughout. But, even without control codes, @code{gtroff}
|
|
still does several things with the input text:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
filling and adjusting
|
|
|
|
@item
|
|
adding additional space after sentences
|
|
|
|
@item
|
|
hyphenating
|
|
|
|
@item
|
|
inserting implicit line breaks
|
|
@end itemize
|
|
|
|
@menu
|
|
* Filling and Adjusting::
|
|
* Hyphenation::
|
|
* Sentences::
|
|
* Tab Stops::
|
|
* Implicit Line Breaks::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Filling and Adjusting, Hyphenation, Text, Text
|
|
@subsection Filling and Adjusting
|
|
@cindex filling
|
|
@cindex adjusting
|
|
|
|
When @code{gtroff} reads text, it collects words from the input and fits
|
|
as many of them together on one output line as it can. This is known as
|
|
@dfn{filling}.
|
|
|
|
@cindex leading spaces
|
|
@cindex spaces, leading and trailing
|
|
@cindex extra spaces
|
|
@cindex trailing spaces
|
|
Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust}
|
|
it. This means it widens the spacing between words until the text
|
|
reaches the right margin (in the default adjustment mode). Extra spaces
|
|
between words are preserved, but spaces at the end of lines are ignored.
|
|
Spaces at the front of a line cause a @dfn{break} (breaks are
|
|
explained in @ref{Implicit Line Breaks})
|
|
|
|
@xref{Manipulating Filling and Adjusting}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Hyphenation, Sentences, Filling and Adjusting, Text
|
|
@subsection Hyphenation
|
|
@cindex hyphenation
|
|
|
|
Since the odds are not great for finding a set of words, for every
|
|
output line, which fit nicely on a line without inserting excessive
|
|
amounts of space between words, @code{gtroff} hyphenates words so
|
|
that it can justify lines without inserting too much space between
|
|
words. It uses an internal hyphenation algorithm (a simplified version
|
|
of the algorithm used within @TeX{}) to indicate which words can be
|
|
hyphenated and how to do so. When a word is hyphenated, the first part
|
|
of the word is added to the current filled line being output (with
|
|
an attached hyphen), and the other portion is added to the next
|
|
line to be filled.
|
|
|
|
@xref{Manipulating Hyphenation}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Sentences, Tab Stops, Hyphenation, Text
|
|
@subsection Sentences
|
|
@cindex sentences
|
|
|
|
Although it is often debated, some typesetting rules say there should be
|
|
different amounts of space after various punctuation marks. For
|
|
example, the @cite{Chicago typsetting manual} says that a period at the
|
|
end of a sentence should have twice as much space following it as would
|
|
a comma or a period as part of an abbreviation.
|
|
|
|
@c XXX exact citation of Chicago manual
|
|
|
|
@cindex sentence space
|
|
@cindex space between sentences
|
|
@cindex french-spacing
|
|
@code{gtroff} does this by flagging certain characters (normally
|
|
@samp{!}, @samp{?}, and @samp{.}) as @dfn{end of sentence} characters.
|
|
When @code{gtroff} encounters one of these characters at the end of a
|
|
line, it appends a normal space followed by a @dfn{sentence space} in
|
|
the formatted output. (This justifies one of the conventions mentioned
|
|
in @ref{Input Conventions}.)
|
|
|
|
@cindex transparent characters
|
|
@cindex character, transparent
|
|
@glindex dg
|
|
@glindex rq
|
|
@cindex "
|
|
@cindex '
|
|
@cindex )
|
|
@cindex ]
|
|
@cindex *
|
|
In addition, the following characters or glyphs are treated
|
|
transparently while handling end of sentence characters: @samp{"},
|
|
@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{dg}, and @code{rq}.
|
|
|
|
See the @code{cflags} request in @ref{Using Symbols}, for more details.
|
|
|
|
@esindex \&
|
|
To prevent the insertion of extra space after an end of sentence
|
|
character (at the end of a line), append @code{\&}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Tab Stops, Implicit Line Breaks, Sentences, Text
|
|
@subsection Tab Stops
|
|
@cindex tab stops
|
|
@cindex stops, tabulator
|
|
@cindex tab character
|
|
@cindex character, tabulator
|
|
|
|
@cindex @acronym{EBCDIC} encoding
|
|
@code{gtroff} translates @dfn{tabulator characters}, also called
|
|
@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
|
|
@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
|
|
tabulator stop. These tab stops are initially located every half inch
|
|
across the page. Using this, simple tables can be made easily.
|
|
However, it can often be deceptive as the appearance (and width) of the
|
|
text on a terminal and the results from @code{gtroff} can vary greatly.
|
|
|
|
Also, a possible sticking point is that lines beginning with tab
|
|
characters are still filled, again producing unexpected results.
|
|
For example, the following input
|
|
|
|
@multitable {12345678} {12345678} {12345678} {12345678}
|
|
@item
|
|
@tab 1 @tab 2 @tab 3
|
|
@item
|
|
@tab @tab 4 @tab 5
|
|
@end multitable
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
|
|
@item
|
|
@tab 1 @tab 2 @tab 3 @tab @tab 4 @tab 5
|
|
@end multitable
|
|
|
|
@xref{Tabs and Fields}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Implicit Line Breaks, , Tab Stops, Text
|
|
@subsection Implicit Line Breaks
|
|
@cindex implicit line breaks
|
|
@cindex implicit breaks of lines
|
|
@cindex line, implicit breaks
|
|
@cindex break, implicit
|
|
@cindex line break
|
|
|
|
An important concept in @code{gtroff} is the @dfn{break}. When a break
|
|
occurs, @code{gtroff} outputs the partially filled line
|
|
(unjustified), and resumes collecting and filling text on the next output
|
|
line.
|
|
|
|
@cindex blank line
|
|
@cindex empty line
|
|
@cindex line, blank
|
|
@cindex blank line macro
|
|
@rqindex blm
|
|
There are several ways to cause a break in @code{gtroff}. A blank
|
|
line not only causes a break, but it also outputs a one line vertical
|
|
space (effectively a blank line). Note that this behaviour can be
|
|
modified with the blank line macro request @code{blm}.
|
|
|
|
@c XXX xref for blm
|
|
|
|
@cindex fill mode
|
|
@cindex mode, fill
|
|
A line that begins with a space causes a break and the space is
|
|
output at the beginning of the next line. Note that this space isn't
|
|
adjusted, even in fill mode.
|
|
|
|
The end of file also causes a break -- otherwise the last line of
|
|
the document may vanish!
|
|
|
|
Certain requests also cause breaks, implicitly or explicitly. This is
|
|
discussed in @ref{Manipulating Filling and Adjusting}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Input Conventions, Measurements, Text, gtroff Reference
|
|
@section Input Conventions
|
|
@cindex input conventions
|
|
@cindex conventions for input
|
|
|
|
Since @code{gtroff} does filling automatically, it is traditional in
|
|
@code{groff} not to try and type things in as nicely formatted
|
|
paragraphs. These are some conventions commonly used when typing
|
|
@code{gtroff} text:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
Break lines after punctuation, particularly at the end of a sentence
|
|
and in other logical places. Keep separate phrases on lines by
|
|
themselves, as entire phrases are often added or deleted when editing.
|
|
|
|
@item
|
|
Try to keep lines less than 40-60@w{ }characters, to allow space for
|
|
inserting more text.
|
|
|
|
@item
|
|
Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
|
|
don't try using spaces to get proper indentation).
|
|
@end itemize
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Measurements, Expressions, Input Conventions, gtroff Reference
|
|
@section Measurements
|
|
@cindex measurements
|
|
|
|
@cindex units of measurement
|
|
@cindex basic units
|
|
@cindex machine units
|
|
@cindex measurement units
|
|
@cindex @code{u} unit
|
|
@cindex unit, @code{u}
|
|
@code{gtroff} (like many other programs) requires numeric parameters to
|
|
specify various measurements. Most numeric parameters@footnote{those
|
|
that specify vertical or horizontal motion or a type size} may have a
|
|
@dfn{measurement unit} attached. These units are specified as a single
|
|
character which immediately follows the number or expression. Each of
|
|
these units are understood, by @code{gtroff}, to be a multiple of its
|
|
@dfn{basic unit}. So, whenever a different measurement unit is
|
|
specified @code{gtroff} converts this into its @dfn{basic units}. This
|
|
basic unit, represented by a @samp{u}, is a device dependent measurement
|
|
which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
|
|
inch. The values may be given as fractional numbers; however,
|
|
fractional basic units are always rounded to integers.
|
|
|
|
Some of the measurement units are completely independent of any of the
|
|
current settings (e.g.@: type size) of @code{gtroff}.
|
|
|
|
@table @code
|
|
@item i
|
|
@cindex inch
|
|
@cindex @code{i} unit
|
|
@cindex unit, @code{i}
|
|
Inches. An antiquated measurement unit still in use in certain
|
|
backwards countries with incredibly low-cost computer equipment. One
|
|
inch is equal to@w{ }2.54@dmn{cm}.
|
|
|
|
@item c
|
|
@cindex centimeter
|
|
@cindex @code{c} unit
|
|
@cindex unit, @code{c}
|
|
Centimeters. One centimeter is equal to@w{ }0.3937@dmn{in}.
|
|
|
|
@item p
|
|
@cindex points
|
|
@cindex @code{p} unit
|
|
@cindex unit, @code{p}
|
|
Points. This is a typesetter's measurement used for measure type size.
|
|
It is 72@w{ }points to an inch.
|
|
|
|
@item P
|
|
@cindex pica
|
|
@cindex @code{P} unit
|
|
@cindex unit, @code{P}
|
|
Pica. Another typesetting measurement. 6@w{ }Picas to an inch (and
|
|
12@w{ }points to a pica).
|
|
|
|
@item s
|
|
@itemx z
|
|
@cindex @code{s} unit
|
|
@cindex unit, @code{s}
|
|
@cindex @code{z} unit
|
|
@cindex unit, @code{z}
|
|
@xref{Fractional Type Sizes}, for a discussion of these units.
|
|
@end table
|
|
|
|
The other measurements understood by @code{gtroff} depend on
|
|
settings currently in effect in @code{gtroff}. These are very useful
|
|
for specifying measurements which should look proper with any size of
|
|
text.
|
|
|
|
@table @code
|
|
@item m
|
|
@cindex em unit
|
|
@cindex @code{m} unit
|
|
@cindex unit, @code{m}
|
|
Ems. This unit is equal to the current font size in points. So called
|
|
because it is @emph{approximately} the width of the letter@w{ }@samp{m}
|
|
in the current font.
|
|
|
|
@item n
|
|
@cindex en unit
|
|
@cindex @code{n} unit
|
|
@cindex unit, @code{n}
|
|
Ens. This is half of an em.
|
|
|
|
@item v
|
|
@cindex vertical space
|
|
@cindex space, vertical
|
|
@cindex @code{v} unit
|
|
@cindex unit, @code{v}
|
|
Vertical space. This is equivalent to the current line spacing.
|
|
@xref{Sizes}, for more information about this.
|
|
|
|
@item M
|
|
@cindex @code{M} unit
|
|
@cindex unit, @code{M}
|
|
100ths of an em.
|
|
@end table
|
|
|
|
@menu
|
|
* Default Units::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Default Units, , Measurements, Measurements
|
|
@subsection Default Units
|
|
@cindex default units
|
|
@cindex units, default
|
|
|
|
Many requests take a default unit. While this can be helpful at times,
|
|
it can cause strange errors in some expressions. For example, the line
|
|
length request expects em units. Here are several attempts to get a
|
|
line length of 3.5@w{ }inches and their results:
|
|
|
|
@Example
|
|
3.5i @result{} 3.5i
|
|
7/2 @result{} 0i
|
|
7/2i @result{} 0i
|
|
7i/2 @result{} 0.1i
|
|
7i/2u @result{} 3.5i
|
|
@endExample
|
|
|
|
@noindent
|
|
Everything is converted to basic units first. In the above example it
|
|
is assumed that 1@dmn{i} equals@w{ }240@dmn{u}, and 1@dmn{m} equals@w{
|
|
}10@dmn{p} (thus 1@dmn{m} equals@w{ }33@dmn{u}). The value 7@dmn{i}/2
|
|
is first handled as 7@dmn{i}/2@dmn{m}, then converted to
|
|
1680@dmn{u}/66@dmn{u} which is 25@dmn{u}, and this is approximately
|
|
0.1@dmn{i}.
|
|
|
|
@cindex measurements, specifying safely
|
|
Thus, the safest way to specify measurements is to always
|
|
attach a scaling indicator. If you want to multiply or divide by a
|
|
certain scalar value, use @samp{u} as the unit for that value.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Expressions, Identifiers, Measurements, gtroff Reference
|
|
@section Expressions
|
|
@cindex expressions
|
|
|
|
@code{gtroff} has most arithmetic operators common to other languages:
|
|
|
|
@c XXX more details; examples
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@cindex arithmetic operators
|
|
@cindex operators, arithmetic
|
|
@opindex +
|
|
@opindex -
|
|
@opindex /
|
|
@opindex *
|
|
@opindex %
|
|
Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
|
|
(division), @samp{*} (multiplication), @samp{%} (modulo).
|
|
|
|
@code{gtroff} only provides integer arithmetic. The internal type used
|
|
for computing results is @samp{int}, which is usually a 32@dmn{bit}
|
|
signed integer.
|
|
|
|
@item
|
|
@cindex comparison operators
|
|
@cindex operators, comparison
|
|
@opindex <
|
|
@opindex >
|
|
@opindex >=
|
|
@opindex <=
|
|
@opindex =
|
|
@opindex ==
|
|
Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
|
|
(less than or equal), @samp{>=} (greater than or equal), @samp{=}
|
|
(equal), @samp{==} (the same as @samp{=}).
|
|
|
|
@item
|
|
@cindex logical operators
|
|
@cindex operators, logical
|
|
@opindex &
|
|
@opindex :
|
|
Logical: @samp{&} (logical and), @samp{:} (logical or).
|
|
|
|
@item
|
|
@cindex unary operators
|
|
@cindex operators, unary
|
|
@opindex -
|
|
@opindex +
|
|
@opindex !
|
|
@rqindex if
|
|
@rqindex while
|
|
@cindex @code{if}, and the @samp{!} operator
|
|
@cindex @code{while}, and the @samp{!} operator
|
|
Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
|
|
(just for completeness; does nothing in expressions), @samp{!} (logical
|
|
not; this works only within @code{if} and @code{while} requests). See
|
|
below for the use of unary operators in motion requests.
|
|
|
|
@item
|
|
@cindex extremum operators
|
|
@cindex operators, extremum
|
|
@opindex >?
|
|
@opindex <?
|
|
Extrema: @samp{>?} (maximum), @samp{<?} (minimum). For example,
|
|
@samp{5>?3} yields@w{ }@samp{5}.
|
|
|
|
@c XXX add examples
|
|
|
|
@item
|
|
@cindex scaling operator
|
|
@cindex operator, scaling
|
|
Scaling: @code{(@var{c};@var{e})}. Evaluate @var{e} using @var{c} as
|
|
the default scaling indicator. If @var{c} is missing, ignore scaling
|
|
indicators in the evaluation of @var{e}.
|
|
@end itemize
|
|
|
|
@cindex parentheses
|
|
@cindex order of evaluation in expressions
|
|
@cindex expression, order of evaluation
|
|
@opindex (
|
|
@opindex )
|
|
Parentheses may be used as in any other language. However, in
|
|
@code{gtroff} they are necessary to ensure order of evaluation.
|
|
@code{gtroff} has no operator precedence; expressions are evaluated left
|
|
to right. This means that @code{gtroff} evaluates @samp{3+5*4} as if it were
|
|
parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might be
|
|
expected.
|
|
|
|
@opindex +@r{, and page motion}
|
|
@opindex -@r{, and page motion}
|
|
@opindex |@r{, and page motion}
|
|
@cindex motion operators
|
|
@cindex operators, motion
|
|
For many requests which cause a motion on the page, the unary operators
|
|
work differently. The @samp{+} and @samp{-} operators then indicate a
|
|
motion relative to the current position (down or up, respectively), and
|
|
the @samp{|} operator indicates an absolute position on the page or
|
|
input line.
|
|
@c XXX xref
|
|
@samp{+} and @samp{-} are also treated differently by the following
|
|
requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
|
|
@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
|
|
@code{rt}, @code{ti}, @code{\R}, and @code{\s}. Here the plus and minus
|
|
signs indicate increments and decrements.
|
|
|
|
@c XXX add more xref
|
|
@xref{Setting Registers}.
|
|
|
|
@cindex space characters in expressions
|
|
@cindex expressions and space characters
|
|
Due to the way arguments are parsed, spaces are not allowed in
|
|
expressions, unless the entire expression is surrounded by parentheses.
|
|
|
|
@xref{Request Arguments}, and @ref{Conditionals and Loops}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Identifiers, Embedded Commands, Expressions, gtroff Reference
|
|
@section Identifiers
|
|
@cindex identifiers
|
|
|
|
Like any other language, @code{gtroff} has rules for properly formed
|
|
@dfn{identifiers}. In @code{gtroff}, an identifier can be made up of
|
|
almost any printable character, with the exception of the following
|
|
characters:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@cindex whitespace characters
|
|
@cindex newline character
|
|
@cindex character, whitespace
|
|
Whitespace characters (spaces, tabs, and newlines).
|
|
|
|
@item
|
|
@cindex character, backspace
|
|
@cindex backspace character
|
|
@cindex @acronym{EBCDIC} encoding of backspace
|
|
Backspace (@acronym{ASCII}@w{ }@code{0x08} or @acronym{EBCDIC}@w{
|
|
}@code{0x16}) and character code @code{0x01}.
|
|
|
|
@item
|
|
@cindex invalid input characters
|
|
@cindex input characters, invalid
|
|
@cindex characters, invalid input
|
|
@cindex unicode
|
|
The following input characters are invalid and are ignored if
|
|
@code{groff} runs on a machine based on @acronym{ASCII}, causing a
|
|
warning message of type @samp{input} (see @ref{Debugging}, for more
|
|
details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
|
|
@code{0x80}-@code{0x9F}.
|
|
|
|
And here are the invalid input characters if @code{groff} runs on an
|
|
@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
|
|
@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
|
|
@code{0x30}-@code{0x3F}.
|
|
|
|
Currently, some of these reserved codepoints are used internally, thus
|
|
making it non-trivial to extend @code{gtroff} to cover Unicode or other
|
|
character sets and encodings which use characters of these ranges.
|
|
|
|
Note that invalid characters are removed before parsing; an
|
|
identifier @code{foo}, followed by an invalid character, followed by
|
|
@code{bar} is treated as @code{foobar}.
|
|
@end itemize
|
|
|
|
For example, any of the following is valid.
|
|
|
|
@Example
|
|
br
|
|
PP
|
|
(l
|
|
end-list
|
|
@@_
|
|
@endExample
|
|
|
|
@rqindex ]
|
|
@noindent
|
|
Note that identifiers longer than two characters with a closing bracket
|
|
(@samp{]}) in its name can't be accessed with escape sequences which
|
|
expect an identifier as a parameter. For example, @samp{\[foo]]}
|
|
accesses the glyph @samp{foo}, followed by @samp{]}, whereas
|
|
@samp{\C'foo]'} really asks for glyph @samp{foo]}.
|
|
|
|
@c XXX xref
|
|
|
|
@Defesc {\\A, ', ident, '}
|
|
Test whether an identifier @var{ident} is valid in @code{gtroff}. It
|
|
expands to the character@w{ }1 or@w{ }0 according to whether its
|
|
argument (usually delimited by quotes) is or is not acceptable as the
|
|
name of a string, macro, diversion, number register, environment, or
|
|
font. It returns@w{ }0 if no argument is given. This is useful for
|
|
looking up user input in some sort of associative table.
|
|
|
|
@Example
|
|
\A'end-list'
|
|
@result{} 1
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@xref{Escapes}, for details on parameter delimiting characters.
|
|
|
|
@c XXX add xrefs above
|
|
|
|
Identifiers in @code{gtroff} can be any length, but, in some contexts,
|
|
@code{gtroff} needs to be told where identifiers end and text begins
|
|
(and in different ways depending on their length):
|
|
|
|
@rqindex (
|
|
@rqindex [
|
|
@rqindex ]
|
|
@itemize @bullet
|
|
@item
|
|
Single character.
|
|
|
|
@item
|
|
Two characters. Must be prefixed with @samp{(} in some situations.
|
|
|
|
@item
|
|
Arbitrary length (@code{gtroff} only). Must be bracketed with @samp{[}
|
|
and@w{ }@samp{]} in some situations. Any length identifier can be put
|
|
in brackets.
|
|
@end itemize
|
|
|
|
@cindex undefined identifiers
|
|
@cindex indentifiers, undefined
|
|
Unlike many other programming languages, undefined identifiers are
|
|
silently ignored or expanded to nothing.
|
|
When @code{gtroff} finds an undefined identifier, it emits a
|
|
warning then:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
If the identifier is a string, macro, or diversion,
|
|
@code{gtroff} defines it as empty.
|
|
|
|
@item
|
|
If the identifier is a number register, @code{gtroff}
|
|
defines it with a value of@w{ }0.
|
|
@end itemize
|
|
|
|
@xref{Warnings}.
|
|
|
|
@c XXX info about common identifier pool for strings and macros.
|
|
|
|
@xref{Interpolating Registers}, and @ref{Strings}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Embedded Commands, Registers, Identifiers, gtroff Reference
|
|
@section Embedded Commands
|
|
@cindex embedded commands
|
|
@cindex commands, embedded
|
|
|
|
Most documents need more functionality beyond filling, adjusting and
|
|
implicit line breaking. In order to gain further functionality,
|
|
@code{gtroff} allows commands to be embedded into the text, in two ways.
|
|
|
|
The first is a @dfn{request} which takes up an entire line, and does
|
|
some large-scale operation (e.g.@: break lines, start new pages).
|
|
|
|
The other is an @dfn{escape} which can be embedded anywhere in the text,
|
|
or even as an argument to a request.
|
|
@c XXX (Not always?)
|
|
Escapes generally do more minor operations like sub- and superscripts,
|
|
print a symbol, etc.
|
|
|
|
@menu
|
|
* Requests::
|
|
* Macros::
|
|
* Escapes::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Requests, Macros, Embedded Commands, Embedded Commands
|
|
@subsection Requests
|
|
@cindex requests
|
|
|
|
@cindex control character
|
|
@cindex character, control
|
|
@cindex no-break control character
|
|
@cindex character, no-break control
|
|
@cindex control character, no-break
|
|
@rqindex '
|
|
@rqindex .
|
|
A request line begins with a control character, which is either a single
|
|
quote (@samp{'}, the @dfn{no-break control character}) or a period
|
|
(@samp{.}, the normal @dfn{control character}). These can be changed;
|
|
see @ref{Character Translations}, for details. After this there may be
|
|
optional tabs or spaces followed by an identifier which is the name of
|
|
the request. This may be followed by any number of space-separated
|
|
arguments (@emph{no} tabs here).
|
|
|
|
@cindex structuring source code of documents or macro packages
|
|
@cindex documents, structuring the source code
|
|
@cindex macro packages, strucuring the source code
|
|
Since a control character followed by whitespace only is ignored, it
|
|
is common practice to use this feature for structuring the source code
|
|
of documents or macro packages.
|
|
|
|
@Example
|
|
.de foo
|
|
. tm This is foo.
|
|
..
|
|
.
|
|
.
|
|
.de bar
|
|
. tm This is bar.
|
|
..
|
|
@endExample
|
|
|
|
@cindex blank line
|
|
@cindex blank line macro
|
|
@rqindex blm
|
|
Another possibility is to use the blank line macro request @code{blm}
|
|
by assigning an empty macro to it.
|
|
|
|
@Example
|
|
.de do-nothing
|
|
..
|
|
.blm do-nothing \" activate blank line macro
|
|
|
|
.de foo
|
|
. tm This is foo.
|
|
..
|
|
|
|
|
|
.de bar
|
|
. tm This is bar.
|
|
..
|
|
|
|
.blm \" deactivate blank line macro
|
|
@endExample
|
|
|
|
@c XXX xref to blm
|
|
|
|
@cindex zero width space character
|
|
@cindex character, zero width space
|
|
@cindex space character, zero width
|
|
@esindex \&
|
|
@cindex @code{\&}, escaping control characters
|
|
To begin a line with a control character without it being interpreted,
|
|
precede it with @code{\&}. This represents a zero width space, which
|
|
means it does not affect the output.
|
|
|
|
In most cases the period is used as a control character. Several
|
|
requests cause a break implicitly; using the single quote control
|
|
character prevents this.
|
|
|
|
@menu
|
|
* Request Arguments::
|
|
@end menu
|
|
|
|
@node Request Arguments, , Requests, Requests
|
|
@subsubsection Request Arguments
|
|
@cindex request arguments
|
|
@cindex arguments to requests
|
|
|
|
Arguments to requests (and macros) are processed much like the shell:
|
|
The line is split into arguments according to spaces. An argument
|
|
which is intended to contain spaces can either be enclosed in double
|
|
quotes, or have the spaces @dfn{escaped} with backslashes.
|
|
|
|
Here are a few examples:
|
|
|
|
@Example
|
|
.uh The Mouse Problem
|
|
.uh "The Mouse Problem"
|
|
.uh The\ Mouse\ Problem
|
|
@endExample
|
|
|
|
@esindex \~
|
|
@esindex \@key{SP}
|
|
@noindent
|
|
The first line is the @code{uh} macro being called with 3 arguments,
|
|
@samp{The}, @samp{Mouse}, and @samp{Problem}. The latter two have the
|
|
same effect of calling the @code{uh} macro with one argument, @samp{The
|
|
Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
|
|
is ``classical'' in the sense that it can be found in most @code{troff}
|
|
documents. Nevertheless, it is not optimal in all situations, since
|
|
@w{@samp{\ }} inserts a fixed-width, non-breaking space character which
|
|
can't stretch. @code{gtroff} provides a different command @code{\~} to
|
|
insert a stretchable, non-breaking space.}
|
|
|
|
@cindex @code{"}, as a macro argument
|
|
@cindex double quote, as a macro argument
|
|
A double quote which isn't preceded by a space doesn't start a macro
|
|
argument. If not closing a string, it is printed literally.
|
|
|
|
For example,
|
|
|
|
@Example
|
|
.xxx a" "b c" "de"fg"
|
|
@endExample
|
|
|
|
@noindent
|
|
has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
|
|
|
|
@rqindex ds
|
|
Duoble quotes in the @code{ds} request are handled differently.
|
|
@xref{Strings}, for more details.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Macros, Escapes, Requests, Embedded Commands
|
|
@subsection Macros
|
|
@cindex macros
|
|
|
|
@code{gtroff} has a @dfn{macro} facility for defining a series of lines
|
|
which can be invoked by name. They are called in the same manner as
|
|
requests -- arguments also may be passed in the same manner.
|
|
|
|
@xref{Writing Macros}, and @ref{Request Arguments}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Escapes, , Macros, Embedded Commands
|
|
@subsection Escapes
|
|
@cindex escapes
|
|
|
|
Escapes may occur anywhere in the input to @code{gtroff}. They usually
|
|
begin with a backslash and are followed by a single character which
|
|
indicates the function to be performed. The escape character can be
|
|
changed; see @ref{Character Translations}.
|
|
|
|
@rqindex (
|
|
@rqindex [
|
|
@rqindex ]
|
|
Escape sequences which require an identifier as a parameter accept three
|
|
possible syntax forms.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
The next single character is the identifier.
|
|
|
|
@item
|
|
If this single character is an opening parenthesis, take the following
|
|
two characters as the identifier. Note that there is no closing
|
|
parenthesis after the identifier.
|
|
|
|
@item
|
|
If this single character is an opening bracket, take all characters
|
|
until a closing bracket as the identifier.
|
|
@end itemize
|
|
|
|
@noindent
|
|
Examples:
|
|
|
|
@Example
|
|
\fB
|
|
\n(XX
|
|
\*[TeX]
|
|
@endExample
|
|
|
|
@rqindex '
|
|
@cindex argument delimiting characters
|
|
@cindex characters, argument delimiting
|
|
@cindex delimiting characters for arguments
|
|
Other escapes may require several arguments and/or some special format.
|
|
In such cases the argument is traditionally enclosed in single quotes
|
|
(and quotes are always used in this manual for the definitions of escape
|
|
sequences). The enclosed text is then processed according to what that
|
|
escape expects. Example:
|
|
|
|
@Example
|
|
\l'1.5i\(bu'
|
|
@endExample
|
|
|
|
@esindex \o
|
|
@esindex \b
|
|
@esindex \X
|
|
Note that the quote character can be replaced with any other character
|
|
which does not occur in the argument (even a newline or a space
|
|
character) in the following escapes: @code{\o}, @code{\b}, and
|
|
@code{\X}. This makes e.g.
|
|
|
|
@Example
|
|
A caf
|
|
\o
|
|
e\'
|
|
|
|
|
|
in Paris
|
|
@result{} A caf@'e in Paris
|
|
@endExample
|
|
|
|
@noindent
|
|
possible, but it is better not to use this feature to avoid confusion.
|
|
|
|
@esindex \%
|
|
@esindex \@key{SP}
|
|
@esindex \|
|
|
@esindex \^
|
|
@esindex \@{
|
|
@esindex \@}
|
|
@esindex \'
|
|
@esindex \`
|
|
@esindex \-
|
|
@esindex \_
|
|
@esindex \!
|
|
@esindex \?
|
|
@esindex \@@
|
|
@esindex \)
|
|
@esindex \/
|
|
@esindex \,
|
|
@esindex \&
|
|
@esindex \~
|
|
@esindex \0
|
|
@esindex \a
|
|
@esindex \c
|
|
@esindex \d
|
|
@esindex \e
|
|
@esindex \E
|
|
@esindex \p
|
|
@esindex \r
|
|
@esindex \t
|
|
@esindex \u
|
|
The following escapes sequences (which are handled similarly to
|
|
characters since they don't take a parameter) are also allowed as
|
|
delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
|
|
@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
|
|
@code{\?}, @code{\@@}, @code{\)}, @code{\/}, @code{\,}, @code{\&},
|
|
@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
|
|
@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}. Again, don't
|
|
use these if possible.
|
|
|
|
@esindex \A
|
|
@esindex \Z
|
|
@esindex \C
|
|
@esindex \w
|
|
No newline characters as delimiters are allowed in the following
|
|
escapes: @code{\A}, @code{\Z}, @code{\C}, and @code{\w}.
|
|
|
|
@esindex \D
|
|
@esindex \h
|
|
@esindex \H
|
|
@esindex \l
|
|
@esindex \L
|
|
@esindex \N
|
|
@esindex \R
|
|
@esindex \s
|
|
@esindex \S
|
|
@esindex \v
|
|
@esindex \x
|
|
Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
|
|
@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
|
|
@code{\x} can't use the following characters as delimiters:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@cindex numbers
|
|
@cindex digits
|
|
The digits @code{0}-@code{9}.
|
|
|
|
@item
|
|
@cindex operators
|
|
@opindex +
|
|
@opindex -
|
|
@opindex /
|
|
@opindex *
|
|
@opindex %
|
|
@opindex <
|
|
@opindex >
|
|
@opindex =
|
|
@opindex &
|
|
@opindex :
|
|
@opindex (
|
|
@opindex )
|
|
@opindex .
|
|
The (single-character) operators @samp{+-/*%<>=&:().}.
|
|
|
|
@item
|
|
@cindex space character
|
|
@cindex character, space
|
|
@cindex tab character
|
|
@cindex character, tab
|
|
@cindex newline character
|
|
@cindex character, newline
|
|
The space, tab, and newline characters.
|
|
|
|
@item
|
|
@esindex \%
|
|
@esindex \@{
|
|
@esindex \@}
|
|
@esindex \'
|
|
@esindex \`
|
|
@esindex \-
|
|
@esindex \_
|
|
@esindex \!
|
|
@esindex \@@
|
|
@esindex \/
|
|
@esindex \c
|
|
@esindex \e
|
|
@esindex \p
|
|
All escape sequences except @code{\%}, @code{\@{}, @code{\@}},
|
|
@code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!}, @code{\@@},
|
|
@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
|
|
@end itemize
|
|
|
|
@esindex \\
|
|
@esindex \e
|
|
@esindex \E
|
|
To have a backslash (actually, the current escape character) appear in the
|
|
output several escapes are defined: @code{\\}, @code{\e} or @code{\E}.
|
|
These are very similar, and only differ with respect to being used in
|
|
macros or diversions. @xref{Copy-in Mode}, and @ref{Diversions}, for
|
|
more information.
|
|
|
|
@c XXX explanation of \E
|
|
|
|
@xref{Identifiers}, and @ref{Character Translations}.
|
|
|
|
@menu
|
|
* Comments::
|
|
@end menu
|
|
|
|
@node Comments, , Escapes, Escapes
|
|
@subsubsection Comments
|
|
@cindex comments
|
|
|
|
Probably one of the most@footnote{Unfortunately, this is a lie. But
|
|
hopefully future @code{gtroff} hackers will believe it @code{:-)}}
|
|
common forms of escapes is the comment.
|
|
|
|
@Defesc {\\", , , }
|
|
Start a comment. Everything to the end of the input line is ignored.
|
|
|
|
This may sound simple, but it can be tricky to keep the comments from
|
|
interfering with the appearance of the final output.
|
|
|
|
@rqindex ds
|
|
@rqindex as
|
|
If the escape is to the right of some text or a request, that portion
|
|
of the line is ignored, but the space leading up to it is noticed by
|
|
@code{gtroff}. This only affects the @code{.ds} and @code{.as}
|
|
request.
|
|
|
|
@cindex tabs before comments
|
|
@cindex comments, lining up with tabs
|
|
One possibly irritating idiosyncracy is that tabs must not be used to
|
|
line up comments. Tabs are not treated as white space between the
|
|
request and macro arguments.
|
|
|
|
@cindex undefined request
|
|
@cindex request, undefined
|
|
A comment on a line by itself is treated as a blank line, because
|
|
after eliminating the comment, that is all that remains:
|
|
|
|
@Example
|
|
Test
|
|
\" comment
|
|
Test
|
|
@endExample
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@Example
|
|
Test
|
|
|
|
Test
|
|
@endExample
|
|
|
|
To avoid this, it is common to start the line with @code{.\"} which
|
|
causes the line to be treated as an undefined request and thus ignored
|
|
completely.
|
|
|
|
@rqindex '
|
|
Another commenting scheme seen sometimes is three consecutive single
|
|
quotes (@code{'''}) at the beginning of a line. This works, but
|
|
@code{gtroff} gives a warning about an undefined macro (namely
|
|
@code{''}), which is harmless, but irritating.
|
|
@endDefesc
|
|
|
|
@Defesc {\\#, , , }
|
|
To avoid all this, @code{gtroff} has a new comment mechanism using the
|
|
@code{\#} escape. This escape works the same as @code{\"} except that
|
|
the newline is also ignored:
|
|
|
|
@Example
|
|
Test
|
|
\# comment
|
|
Test
|
|
@endExample
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@Example
|
|
Test Test
|
|
@endExample
|
|
|
|
@noindent
|
|
as expected.
|
|
@endDefesc
|
|
|
|
@Defreq {ig, yy}
|
|
Ignore all input until @code{gtroff} encounters the macro named
|
|
@code{.}@var{yy} on a line by itself (or @code{..} if @var{yy} is not
|
|
specified). This is useful for commenting out large blocks of text:
|
|
|
|
@Example
|
|
text text text...
|
|
.ig
|
|
This is part of a large block
|
|
of text that has been
|
|
temporarily(?) commented out.
|
|
|
|
We can restore it simply by removing
|
|
the .ig request and the ".." at the
|
|
end of the block.
|
|
..
|
|
More text text text...
|
|
@endExample
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@Example
|
|
text text text@dots{} More text text text@dots{}
|
|
@endExample
|
|
|
|
@noindent
|
|
Note that the commented-out block of text does not
|
|
cause a break.
|
|
|
|
The input is read in copy-mode; auto-incremented registers @emph{are}
|
|
affected (@pxref{Auto-increment}).
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
|
|
@section Registers
|
|
@cindex registers
|
|
|
|
Numeric variables in @code{gtroff} are called @dfn{registers}. There
|
|
are a number of built-in registers, supplying anything from the date to
|
|
details of formatting parameters.
|
|
|
|
@xref{Identifiers}, for details on register identifiers.
|
|
|
|
@menu
|
|
* Setting Registers::
|
|
* Interpolating Registers::
|
|
* Auto-increment::
|
|
* Assigning Formats::
|
|
* Built-in Registers::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Setting Registers, Interpolating Registers, Registers, Registers
|
|
@subsection Setting Registers
|
|
@cindex setting registers
|
|
@cindex registers, setting
|
|
|
|
Define or set registers using the @code{nr} request or the
|
|
@code{\R} escape.
|
|
|
|
@Defreq {nr, ident value}
|
|
@Defescx {\\R, ', ident value, '}
|
|
Set number register @var{ident} to @var{value}. If @var{ident}
|
|
doesn't exist, @code{gtroff} creates it.
|
|
|
|
The argument to @code{\R} usually has to be enclosed in quotes.
|
|
@xref{Escapes}, for details on parameter delimiting characters.
|
|
@endDefreq
|
|
|
|
For example, the following two lines are equivalent:
|
|
|
|
@Example
|
|
.nr a 1
|
|
\R'a 1'
|
|
@endExample
|
|
|
|
Both @code{nr} and @code{\R} have two additional special forms to
|
|
increment or decrement a register.
|
|
|
|
@Defreq {nr, ident @t{+}@Var{value}}
|
|
@Defreqx {nr, ident @t{-}@Var{value}}
|
|
@Defescx {\\R, ', ident @t{+}@Var{value}, '}
|
|
@Defescx {\\R, ', ident @t{-}@Var{value}, '}
|
|
Increment (decrement) register @var{ident} by @var{value}.
|
|
|
|
@Example
|
|
.nr a 1
|
|
.nr a +1
|
|
\na
|
|
@result{} 2
|
|
@endExample
|
|
|
|
@cindex negating register values
|
|
To assign the negated value of a register to another register, some care
|
|
must be taken to get the desired result:
|
|
|
|
@Example
|
|
.nr a 7
|
|
.nr b 3
|
|
.nr a -\nb
|
|
\na
|
|
@result{} 4
|
|
.nr a (-\nb)
|
|
\na
|
|
@result{} -3
|
|
@endExample
|
|
|
|
@noindent
|
|
The surrounding parentheses prevent the interpretation of the minus sign
|
|
as a decrementing operator. An alternative is to start the assignment
|
|
with a @samp{0}:
|
|
|
|
@Example
|
|
.nr a 7
|
|
.nr b -3
|
|
.nr a \nb
|
|
\na
|
|
@result{} 4
|
|
.nr a 0\nb
|
|
\na
|
|
@result{} -3
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@Defreq {rr, ident}
|
|
Remove number register @var{ident}. If @var{ident} doesn't exist, the
|
|
request is ignored.
|
|
@endDefreq
|
|
|
|
@Defreq {rnn, ident1 ident2}
|
|
Rename number register @var{ident1} to @var{ident2}. If either
|
|
@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
|
|
@endDefreq
|
|
|
|
@Defreq {aln, ident1 ident2}
|
|
Create an alias @var{ident1} for a number register @var{ident2}. The
|
|
new name and the old name are exactly equivalent. If @var{ident1} is
|
|
undefined, a warning of type @samp{reg} is generated, and the request
|
|
is ignored. @xref{Debugging}, for information about warnings.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Interpolating Registers, Auto-increment, Setting Registers, Registers
|
|
@subsection Interpolating Registers
|
|
@cindex interpolating registers
|
|
@cindex registers, interpolating
|
|
|
|
Numeric registers can be accessed via the @code{\n} escape.
|
|
|
|
@cindex nested assignments
|
|
@cindex assignments, nested
|
|
@cindex indirect assignments
|
|
@cindex assignments, indirect
|
|
@Defesc {\\n, , i, }
|
|
@Defescx {\\n, @lparen{}, id, }
|
|
@Defescx {\\n, @lbrack{}, ident, @rbrack}
|
|
Interpolate number register with name @var{ident} (one-character name
|
|
@var{i}, two-character name @var{id}). This means that the value of
|
|
the register is expanded in-place while @code{gtroff} is parsing the
|
|
input line. Nested assignments (also called indirect assignments) are
|
|
possible.
|
|
|
|
@Example
|
|
.nr a 5
|
|
.nr as \na+\na
|
|
\n(as
|
|
@result{} 10
|
|
@endExample
|
|
|
|
@Example
|
|
.nr a1 5
|
|
.nr ab 6
|
|
.ds str b
|
|
.ds num 1
|
|
\n[a\n[num]]
|
|
@result{} 5
|
|
\n[a\*[str]]
|
|
@result{} 6
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
|
|
@subsection Auto-increment
|
|
@cindex auto-increment
|
|
@cindex increment, automatic
|
|
|
|
Number registers can also be auto-incremented and auto-decremented.
|
|
The increment or decrement value can be specified with a third
|
|
argument to the @code{nr} request or @code{\R} escape.
|
|
|
|
@esindex \R
|
|
@Defreq {nr, ident value incr}
|
|
Set number register @var{ident} to @var{value}; the increment for
|
|
auto-incrementing is set to @var{incr}. Note that the @code{\R}
|
|
escape doesn't support this notation.
|
|
@endDefreq
|
|
|
|
To activate auto-incrementing, the escape @code{\n} has a special
|
|
syntax form.
|
|
|
|
@Defesc {\\n, +, i, }
|
|
@Defescx {\\n, -, i, }
|
|
@Defescx {\\n, @lparen{}+, id, }
|
|
@Defescx {\\n, @lparen{}-, id, }
|
|
@Defescx {\\n, +@lparen{}, id, }
|
|
@Defescx {\\n, -@lparen{}, id, }
|
|
@Defescx {\\n, @lbrack{}+, ident, @rbrack{}}
|
|
@Defescx {\\n, @lbrack{}-, ident, @rbrack{}}
|
|
@Defescx {\\n, +@lbrack{}, ident, @rbrack{}}
|
|
@Defescx {\\n, -@lbrack{}, ident, @rbrack{}}
|
|
Before interpolating, increment or decrement @var{ident}
|
|
(one-character name @var{i}, two-character name @var{id}) by the
|
|
auto-increment value as specified with the @code{nr} request (or the
|
|
@code{\R} escape). If no auto-increment value has been specified,
|
|
these syntax forms are identical to @code{\n}.
|
|
@endDefesc
|
|
|
|
For example,
|
|
|
|
@Example
|
|
.nr a 0 1
|
|
.nr xx 0 5
|
|
.nr foo 0 -2
|
|
\n+a, \n+a, \n+a, \n+a, \n+a
|
|
.br
|
|
\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
|
|
.br
|
|
\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
|
|
@endExample
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@Example
|
|
1, 2, 3, 4, 5
|
|
-5, -10, -15, -20, -25
|
|
-2, -4, -6, -8, -10
|
|
@endExample
|
|
|
|
@cindex increment value without changing the register
|
|
To change the increment value without changing the value of a register
|
|
(@var{a} in the example), the following can be used:
|
|
|
|
@Example
|
|
.nr a \na 10
|
|
@endExample
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Assigning Formats, Built-in Registers, Auto-increment, Registers
|
|
@subsection Assigning Formats
|
|
@cindex assigning formats
|
|
@cindex formats, assigning
|
|
|
|
When a register is used in the text of an input file (as opposed to
|
|
part of an expression), it is textually replaced (or interpolated)
|
|
with a representation of that number. This output format can be
|
|
changed to a variety of formats (numbers, Roman numerals, etc.). This
|
|
is done using the @code{af} request.
|
|
|
|
@Defreq {af, ident format}
|
|
Change the output format of a number register. The first argument
|
|
@var{ident} is the name of the number register to be changed, and the
|
|
second argument @var{format} is the output format. The following
|
|
output formats are available:
|
|
|
|
@table @code
|
|
@item 1
|
|
Decimal arabic numbers. This is the default format: 0, 1, 2, 3,@w{
|
|
}@enddots{}
|
|
|
|
@item 0@dots{}0
|
|
Decimal numbers with as many digits as specified. So, @samp{00} would
|
|
result in printing numbers as 01, 02, 03,@w{ }@enddots{}
|
|
|
|
In fact, any digit instead of zero will do; @code{gtroff} only counts
|
|
how many digits are specified. As a consequence, @code{af}'s default
|
|
format @samp{1} could be specified as @samp{0} also (and exactly this is
|
|
returned by the @code{\g} escape, see below).
|
|
|
|
@item I
|
|
@cindex Roman numerals
|
|
@cindex numerals, Roman
|
|
Upper-case Roman numerals: 0, I, II, III, IV,@w{ }@enddots{}
|
|
|
|
@item i
|
|
Lower-case Roman numerals: 0, i, ii, iii, iv,@w{ }@enddots{}
|
|
|
|
@item A
|
|
Upper-case letters: 0, A, B, C, @dots{},@w{ }Z, AA, AB,@w{ }@enddots{}
|
|
|
|
@item a
|
|
Lower-case letters: 0, a, b, c, @dots{},@w{ }z, aa, ab,@w{ }@enddots{}
|
|
@end table
|
|
|
|
Omitting the number register format causes a warning of type
|
|
@samp{missing}. @xref{Debugging}, for more details. Specifying a
|
|
nonexistent format causes an error.
|
|
|
|
The following example produces @samp{10, X, j, 010}:
|
|
|
|
@Example
|
|
.nr a 10
|
|
.af a 1 \" the default format
|
|
\na,
|
|
.af a I
|
|
\na,
|
|
.af a a
|
|
\na,
|
|
.af a 001
|
|
\na
|
|
@endExample
|
|
|
|
@cindex Roman numerals, maximum and minimum
|
|
@cindex maximum values of Roman numerals
|
|
@cindex minimum values of Roman numerals
|
|
The largest number representable for the @samp{i} and @samp{I} formats
|
|
is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
|
|
and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
|
|
@code{gtroff}. Currently, the correct glyphs of Roman numeral five
|
|
thousand and Roman numeral ten thousand (Unicode code points
|
|
@code{U+2182} and @code{U+2181}, respectively) are not available.
|
|
|
|
If @var{ident} doesn't exist, it is created.
|
|
|
|
@cindex read-only register, changing format
|
|
@cindex changing format, read-only register
|
|
Changing the output format of a read-only register causes an error. It
|
|
is necessary to first copy the register's value to a writeable register,
|
|
then apply the @code{af} request to this other register.
|
|
@endDefreq
|
|
|
|
@cindex format of register
|
|
@cindex register, format
|
|
@Defesc {\\g, , i, }
|
|
@Defescx {\\g, @lparen{}, id, }
|
|
@Defescx {\\g, @lbrack{}, ident, @rbrack{}}
|
|
Return the current format of the specified register @var{ident}
|
|
(one-character name @var{i}, two-character name @var{id}). For
|
|
example, @samp{\ga} after the previous example would produce the
|
|
string @samp{000}. If the register hasn't been defined yet, nothing
|
|
is returned.
|
|
@endDefesc
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Built-in Registers, , Assigning Formats, Registers
|
|
@subsection Built-in Registers
|
|
@cindex built-in registers
|
|
@cindex registers, built-in
|
|
|
|
The following lists some built-in registers which are not described
|
|
elsewhere in this manual. Any register which begins with a @samp{.} is
|
|
read-only. A complete listing of all built-in registers can be found in
|
|
@ref{Register Index}.
|
|
|
|
@table @code
|
|
@item .H
|
|
@cindex horizontal resolution register
|
|
@cindex resolution, horizontal, register
|
|
@vindex .H
|
|
Horizontal resolution in basic units.
|
|
|
|
@item .V
|
|
@cindex vertical resolution register
|
|
@cindex resolution, vertical, register
|
|
@vindex .V
|
|
Vertical resolution in basic units.
|
|
|
|
@item dw
|
|
@cindex day of the week register
|
|
@cindex date, day of the week register
|
|
@vindex dw
|
|
Day of the week (1-7).
|
|
|
|
@item dy
|
|
@cindex day of the month register
|
|
@cindex date, day of the month register
|
|
@vindex dy
|
|
Day of the month (1-31).
|
|
|
|
@item mo
|
|
@cindex month of the year register
|
|
@cindex date, month of the year register
|
|
@vindex mo
|
|
Current month (1-12).
|
|
|
|
@item year
|
|
@cindex date, year register
|
|
@cindex year, current, register
|
|
@vindex year
|
|
The current year.
|
|
|
|
@item yr
|
|
@vindex yr
|
|
The current year minus@w{ }1900. Unfortunately, the documentation of
|
|
@acronym{UNIX} Version@w{ }7's @code{troff} had a year@w{ }2000 bug: It
|
|
incorrectly claimed that @code{yr} contains the last two digits of the
|
|
year. That claim has never been true of either traditional @code{troff}
|
|
or GNU @code{troff}. Old @code{troff} input that looks like this:
|
|
|
|
@Example
|
|
'\" The following line stopped working after 1999
|
|
This document was formatted in 19\n(yr.
|
|
@endExample
|
|
|
|
@noindent
|
|
can be corrected as follows:
|
|
|
|
@Example
|
|
This document was formatted in \n[year].
|
|
@endExample
|
|
|
|
@noindent
|
|
or, to be portable to older @code{troff} versions, as follows:
|
|
|
|
@Example
|
|
.nr y4 1900+\n(yr
|
|
This document was formatted in \n(y4.
|
|
@endExample
|
|
|
|
@item .c
|
|
@vindex .c
|
|
@itemx c.
|
|
@vindex c.
|
|
@cindex input line number register
|
|
@cindex line number, input, register
|
|
The current @emph{input} line number. Register @samp{.c} is read-only,
|
|
whereas @samp{c.} (a @code{gtroff} extension) is writable also,
|
|
affecting both @samp{.c} and @samp{c.}.
|
|
|
|
@item ln
|
|
@vindex ln
|
|
@rqindex nm
|
|
@cindex output line number register
|
|
@cindex line number, output, register
|
|
The current @emph{output} line number after a call to the @code{nm}
|
|
request to activate line numbering.
|
|
|
|
@xref{Miscellaneous}, for more information about line numbering.
|
|
|
|
@item .x
|
|
@vindex .x
|
|
@cindex major version number register
|
|
@cindex version number, major, register
|
|
The major version number. For example, if the version number is@w{
|
|
}1.03 then @code{.x} contains@w{ }@samp{1}.
|
|
|
|
@item .y
|
|
@vindex .y
|
|
@cindex minor version number register
|
|
@cindex version number, minor, register
|
|
The minor version number. For example, if the version number is@w{
|
|
}1.03 then @code{.y} contains@w{ }@samp{03}.
|
|
|
|
@item .Y
|
|
@vindex .Y
|
|
@cindex revision number register
|
|
The revision number of @code{groff}.
|
|
|
|
@item .g
|
|
@vindex .g
|
|
@cindex @code{gtroff} identification register
|
|
@cindex GNU-specific register
|
|
Always@w{ }1. Macros should use this to determine whether they are
|
|
running under GNU @code{troff}.
|
|
|
|
@item .A
|
|
@vindex .A
|
|
@cindex @acronym{ASCII} approximation output register
|
|
If the command line option @option{-a} is used to produce an
|
|
@acronym{ASCII} approximation of the output, this is set to@w{ }1, zero
|
|
otherwise. @xref{Groff Options}.
|
|
|
|
@item .P
|
|
@vindex .P
|
|
This register is set to@w{ }1 (and to@w{ }0 otherwise) if the current
|
|
page is actually being printed, i.e., if the @option{-o} option is being
|
|
used to only print selected pages. @xref{Groff Options}, for more
|
|
information.
|
|
|
|
@item .T
|
|
@vindex .T
|
|
If @code{gtroff} is called with the @option{-T} command line option, the
|
|
number register @code{.T} is set to@w{ }1, and zero otherwise.
|
|
@xref{Groff Options}.
|
|
|
|
@stindex .T
|
|
@cindex output device register
|
|
Additionally, @code{gtroff} predefines a single read-write string
|
|
register @code{.T} which contains the current output device (for
|
|
example, @samp{latin1} or @samp{ps}).
|
|
@end table
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
|
|
@section Manipulating Filling and Adjusting
|
|
@cindex manipulating filling and adjusting
|
|
@cindex filling and adjusting, manipulating
|
|
@cindex adjusting and filling, manipulating
|
|
@cindex justifying text
|
|
@cindex text, justifying
|
|
|
|
@cindex break
|
|
@cindex line break
|
|
@rqindex bp
|
|
@rqindex ce
|
|
@rqindex cf
|
|
@rqindex fi
|
|
@rqindex fl
|
|
@rqindex in
|
|
@rqindex nf
|
|
@rqindex rj
|
|
@rqindex sp
|
|
@rqindex ti
|
|
@rqindex trf
|
|
Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
|
|
Breaks}. The @code{br} request likewise causes a break. Several
|
|
other requests also cause breaks, but implicitly. These are
|
|
@code{bp}, @code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in},
|
|
@code{nf}, @code{rj}, @code{sp}, @code{ti}, and @code{trf}.
|
|
|
|
@Defreq {br, }
|
|
Break the current line, i.e., the input collected so far is emitted
|
|
without adjustment.
|
|
|
|
If the no-break control character is used, @code{gtroff} suppresses
|
|
the break:
|
|
|
|
@Example
|
|
a
|
|
'br
|
|
b
|
|
@result{} a b
|
|
@endExample
|
|
@endDefreq
|
|
|
|
Initially, @code{gtroff} fills and adjusts text to both margins.
|
|
Filling can be disabled via the @code{nf} request and re-enabled with
|
|
the @code{fi} request.
|
|
|
|
@cindex fill mode
|
|
@cindex mode, fill
|
|
@Defreq {fi, }
|
|
@Defregx {.u}
|
|
Activate fill mode (which is the default). This request implicitly
|
|
enables adjusting; it also inserts a break in the text currently being
|
|
filled. The read-only number register @code{.u} is set to@w{ }1.
|
|
|
|
The fill mode status is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@cindex no-fill mode
|
|
@cindex mode, no-fill
|
|
@Defreq {nf, }
|
|
Activate no-fill mode. Input lines are output as-is, retaining line
|
|
breaks and ignoring the current line length. This command implicitly
|
|
disables adjusting; it also causes a break. The number register
|
|
@code{.u} is set to@w{ }0.
|
|
|
|
The fill mode status is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@Defreq {ad, [@Var{mode}]}
|
|
@Defregx {.j}
|
|
Set adjusting mode.
|
|
|
|
Activation and deactivation of adjusting is done implicitly with
|
|
calls to the @code{fi} or @code{nf} requests.
|
|
|
|
@var{mode} can have one of the following values:
|
|
|
|
@table @code
|
|
@item l
|
|
@cindex ragged-right
|
|
Adjust text to the left margin. This produces what is traditionally
|
|
called ragged-right text.
|
|
|
|
@item r
|
|
@cindex ragged-left
|
|
Adjust text to the right margin, producing ragged-left text.
|
|
|
|
@item c
|
|
@cindex centered text
|
|
@rqindex ce
|
|
Center filled text. This is different to the @code{ce} request which
|
|
only centers text without filling.
|
|
|
|
@item b
|
|
@itemx n
|
|
Justify to both margins. This is the default used by @code{gtroff}.
|
|
@end table
|
|
|
|
With no argument, @code{gtroff} adjusts lines in the same way it did
|
|
before adjusting was deactivated (with a call to @code{na}, for
|
|
example).
|
|
|
|
@Example
|
|
text
|
|
.ad r
|
|
text
|
|
.ad c
|
|
text
|
|
.na
|
|
text
|
|
.ad \" back to centering
|
|
text
|
|
@endExample
|
|
|
|
@cindex current adjustment mode register
|
|
The current adjustment mode is available in the read-only number
|
|
register @code{.j}; it can be stored and subsequently used to set
|
|
adjustment.
|
|
|
|
The adjustment mode status is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@Defreq {na, }
|
|
Disable adjusting. This request won't change the current adjustment
|
|
mode: A subsequent call to @code{ad} uses the previous adjustment
|
|
setting.
|
|
|
|
The adjustment mode status is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@Defesc {\\p, , , }
|
|
Adjust the current line and cause a break.
|
|
|
|
In most cases this produces very ugly results, since @code{gtroff}
|
|
doesn't have a sophisticated paragraph building algorithm (as @TeX{}
|
|
have, for example); instead, @code{gtroff} fills and adjusts a paragraph
|
|
line by line:
|
|
|
|
@Example
|
|
This is an uninteresting sentence.
|
|
This is an uninteresting sentence.\p
|
|
This is an uninteresting sentence.
|
|
@endExample
|
|
|
|
@noindent
|
|
is formatted as
|
|
|
|
@Example
|
|
This is an uninteresting sentence. This is an
|
|
uninteresting sentence.
|
|
This is an uninteresting sentence.
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@cindex word space size
|
|
@cindex size of word space
|
|
@cindex space between words
|
|
@cindex sentence space size
|
|
@cindex size of sentence space
|
|
@cindex space between sentences
|
|
@Defreq {ss, word_space_size [@Var{sentence_space_size}]}
|
|
@Defregx {.ss}
|
|
@Defregx {.sss}
|
|
Change the minimum size of a space between filled words. It takes its
|
|
units as one twelfth of the space width parameter for the current
|
|
font. Initially both the @var{word_space_size} and
|
|
@var{sentence_space_size} are@w{ }12.
|
|
|
|
@cindex fill mode
|
|
@cindex mode, fill
|
|
If two arguments are given to the @code{ss} request, the second
|
|
argument sets the sentence space size. If the second argument is not
|
|
given, sentence space size is set to @var{word_space_size}. The
|
|
sentence space size is used in two circumstances: If the end of a
|
|
sentence occurs at the end of a line in fill mode, then both an
|
|
inter-word space and a sentence space are added; if two spaces follow
|
|
the end of a sentence in the middle of a line, then the second space
|
|
is a sentence space. If a second argument is never given to the
|
|
@code{ss} request, the behaviour of @acronym{UNIX} @code{troff} is the
|
|
same as that exhibited by GNU @code{troff}. In GNU @code{troff}, as
|
|
in @acronym{UNIX} @code{troff}, a sentence should always be followed
|
|
by either a newline or two spaces.
|
|
|
|
The read-only number registers @code{.ss} and @code{.sss} hold the
|
|
values of the parameters set by the first and second arguments of the
|
|
@code{ss} request.
|
|
|
|
The word space and sentence space values are associated with the current
|
|
environment (@pxref{Environments}).
|
|
|
|
Contrary to traditional Unix @code{troff}, this request is @emph{not}
|
|
ignored if a tty output device is used; the given values are then
|
|
rounded down to a multiple of@w{ }12.
|
|
|
|
@c XXX xref implementation differences
|
|
|
|
The request is ignored if there is no parameter.
|
|
@endDefreq
|
|
|
|
@cindex centering lines
|
|
@cindex lines, centering
|
|
@Defreq {ce, [@Var{nnn}]}
|
|
@Defregx {.ce}
|
|
Center text. While the @w{@samp{.ad c}} request also centers text,
|
|
it fills the text as well. @code{ce} does not fill the
|
|
text it affects. This request causes a break.
|
|
|
|
The following example demonstrates the differences.
|
|
Here the input:
|
|
|
|
@Example
|
|
.ll 4i
|
|
.ce 1000
|
|
This is a small text fragment which shows the differences
|
|
between the `.ce' and the `.ad c' request.
|
|
.ce 0
|
|
|
|
.ad c
|
|
This is a small text fragment which shows the differences
|
|
between the `.ce' and the `.ad c' request.
|
|
@endExample
|
|
|
|
@noindent
|
|
And here the result:
|
|
|
|
@Example
|
|
This is a small text fragment which
|
|
shows the differences
|
|
between the `.ce' and the `.ad c' request.
|
|
|
|
This is a small text fragment which
|
|
shows the differences between the `.ce'
|
|
and the `.ad c' request.
|
|
@endExample
|
|
|
|
With no arguments, @code{ce} centers the next line of text. @var{nnn}
|
|
specifies the number of lines to be centered. If the argument is zero
|
|
or negative, centering is disabled.
|
|
|
|
@rqindex ll
|
|
@rqindex in
|
|
@rqindex ti
|
|
The basic length for centering text is the line length (as set with the
|
|
@code{ll} request) minus the indentation (as set with the @code{in}
|
|
request). Temporary indentation is ignored.
|
|
|
|
As can be seen in the previous example, it is a common idiom to turn
|
|
on centering for a large number of lines, and to turn off centering
|
|
after text to be centered. This is useful for any request which takes
|
|
a number of lines as an argument.
|
|
|
|
The @code{.ce} read-only number register contains the number of lines
|
|
remaining to be centered, as set by the @code{ce} request.
|
|
@endDefreq
|
|
|
|
@cindex justifying text
|
|
@cindex text, justifying
|
|
@cindex right-justifying
|
|
@Defreq {rj, [@Var{nnn}]}
|
|
@Defregx {.rj}
|
|
Justify unfilled text to the right margin. Arguments are identical to
|
|
the @code{ce} request. The @code{.rj} read-only number register is
|
|
the number of lines to be right-justified as set by the @code{rj}
|
|
request. This request causes a break.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
|
|
@section Manipulating Hyphenation
|
|
@cindex manipulating hyphenation
|
|
@cindex hyphenation, manipulating
|
|
|
|
As discussed in @ref{Hyphenation}, @code{gtroff} hyphenates words.
|
|
There are a number of ways to influence hyphenation.
|
|
|
|
@Defreq {hy, [@Var{mode}]}
|
|
@Defregx {.hy}
|
|
Enable hyphenation. The request has an optional numeric argument,
|
|
@var{mode}, to restrict hyphenation if necessary:
|
|
|
|
@table @code
|
|
@item 1
|
|
The default argument if @var{mode} is omitted. Hyphenate without
|
|
restrictions. This is also the start-up value of @code{gtroff}.
|
|
|
|
@item 2
|
|
Do not hyphenate the last word on a page or column.
|
|
|
|
@item 4
|
|
Do not hyphenate the last two characters of a word.
|
|
|
|
@item 8
|
|
Do not hyphenate the first two characters of a word.
|
|
@end table
|
|
|
|
Values in the previous table are additive. For example, the value@w{
|
|
}12 causes @code{gtroff} to neither hyphenate the last two nor the first
|
|
two characters of a word.
|
|
|
|
@cindex hyphenation restrictions register
|
|
The current hyphenation restrictions can be found in the read-only
|
|
number register @samp{.hy}.
|
|
|
|
The hyphenation mode is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@Defreq {nh, }
|
|
Disable hyphenation (i.e., set the hyphenation mode to zero). Note
|
|
that the hyphenation mode of the last call to @code{hy} is not
|
|
remembered.
|
|
|
|
The hyphenation mode is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@esindex \%
|
|
@cindex explicit hyphens
|
|
@cindex hyphen, explicit
|
|
@cindex consecutive hyphenated lines
|
|
@cindex lines, consecutive hyphenated
|
|
@cindex hyphenated lines, consecutive
|
|
@Defreq {hlm, [@Var{nnn}]}
|
|
@Defregx {.hlm}
|
|
@Defregx {.hlc}
|
|
Set the maximum number of consecutive hyphenated lines to @var{nnn}.
|
|
If this number is negative, there is no maximum. The default value
|
|
is@w{ }@minus{}1 if @var{nnn} is omitted. This value is associated
|
|
with the current environment (@pxref{Environments}). Only lines
|
|
output from a given environment count towards the maximum associated
|
|
with that environment. Hyphens resulting from @code{\%} are counted;
|
|
explicit hyphens are not.
|
|
|
|
The current setting of @code{hlm} is available in the @code{.hlm}
|
|
read-only number register. Also the number of immediately preceding
|
|
consecutive hyphenated lines are available in the read-only number
|
|
register @samp{.hlc}.
|
|
@endDefreq
|
|
|
|
@Defreq {hw, word1 word2 @dots{}}
|
|
Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated. The
|
|
words must be given with hyphens at the hyphenation points. For
|
|
example:
|
|
|
|
@Example
|
|
.hw in-sa-lub-rious
|
|
@endExample
|
|
|
|
@noindent
|
|
Besides the space character, any character whose hyphenation code value
|
|
is zero can be used to separate the arguments of @code{hw} (see the
|
|
documentation for the @code{hcode} request below for more information).
|
|
In addition, this request can be used more than once.
|
|
|
|
Hyphenation exceptions specified with the @code{hw} request are
|
|
associated with the current hyphenation language; it causes an error
|
|
if there is no current hyphenation language.
|
|
|
|
This request is ignored if there is no parameter.
|
|
|
|
In old versions of @code{troff} there was a limited amount of space to
|
|
store such information; fortunately, with @code{gtroff}, this is no
|
|
longer a restriction.
|
|
@endDefreq
|
|
|
|
@cindex hyphenation character
|
|
@cindex character, hyphenation
|
|
@cindex disabling hyphenation
|
|
@cindex hyphenation, disabling
|
|
@Defesc {\\%, , , }
|
|
To tell @code{gtroff} how to hyphenate words on the fly, use the
|
|
@code{\%} escape, also known as the @dfn{hyphenation character}.
|
|
Preceding a word with this character prevents it from being
|
|
hyphenated; putting it inside a word indicates to @code{gtroff} that
|
|
the word may be hyphenated at that point. Note that this mechanism
|
|
only affects that one occurrence of the word; to change the
|
|
hyphenation of a word for the entire document, use the @code{hw}
|
|
request.
|
|
@endDefesc
|
|
|
|
@Defreq {hc, [@Var{char}]}
|
|
Change the hyphenation character to @var{char}. This character then
|
|
works the same as the @code{\%} escape, and thus, no longer appears in
|
|
the output. Without an argument, @code{hc} resets the hyphenation
|
|
character to be @code{\%} (the default) only.
|
|
|
|
The hyphenation character is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@cindex hyphenation patterns
|
|
@cindex patterns for hyphenation
|
|
@Defreq {hpf, pattern_file}
|
|
Read in a file of hyphenation patterns. This file is searched for in
|
|
the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
|
|
searched for if the @option{-m@var{name}} option is specified.
|
|
|
|
It should have the same format as the argument to the @code{\patterns}
|
|
primitive in @TeX{} (without using @TeX{}'s macro expansion); the
|
|
letters appearing in this file are interpreted as hyphenation codes. A
|
|
@samp{%} character in the patterns file introduces a comment that
|
|
continues to the end of the line.
|
|
|
|
If no @code{hpf} request is specified (either in the document or in a
|
|
macro package), @code{gtroff} won't hyphenate at all.
|
|
|
|
@rqindex hla
|
|
@pindex troffrc
|
|
@pindex troffrc-end
|
|
@pindex hyphen.us
|
|
The set of hyphenation patterns is associated with the current language
|
|
set by the @code{hla} request. The @code{hpf} request is usually
|
|
invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
|
|
@file{troffrc} loads hyphenation patterns for American English (in file
|
|
@file{hyphen.us}).
|
|
|
|
Invoking @code{hpf} causes an error if there is no current hyphenation
|
|
language.
|
|
@endDefreq
|
|
|
|
@cindex hyphenation code
|
|
@cindex code, hyphenation
|
|
@Defreq {hcode, c1 code1 c2 code2 @dots{}}
|
|
Set the hyphenation code of character @var{c1} to @var{code1}, that of
|
|
@var{c2} to @var{code2}, etc. A hyphenation code must be a single
|
|
input character (not a special character) other than a digit or a
|
|
space. Initially each lower-case letter (@samp{a}-@samp{z}) has its
|
|
hyphenation set to itself, and each upper-case letter
|
|
(@samp{A}-@samp{Z}) has a hyphenation code which is the lower-case
|
|
version of itself.
|
|
|
|
This request is ignored if it has no parameter.
|
|
@endDefreq
|
|
|
|
@cindex hyphenation margin
|
|
@cindex margin for hyphenation
|
|
@rqindex ad
|
|
@Defreq {hym, [@Var{length}]}
|
|
@Defregx {.hym}
|
|
Set the (right) hyphenation margin to @var{length}. If the current
|
|
adjustment mode is not @samp{b} or@w{ }@samp{n}, the line is not
|
|
hyphenated if it is shorter than @var{length}. Without an argument,
|
|
the hyphenation margin is reset to its default value, which is@w{ }0.
|
|
The default scaling indicator for this request is@w{ }@code{m}. The
|
|
hyphenation margin is associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
A negative argument resets the hyphenation margin to zero, emitting
|
|
a warning of type @samp{range}.
|
|
|
|
@cindex current hyphenation margin register
|
|
The current hyphenation margin is available in the @code{.hym} read-only
|
|
number register.
|
|
@endDefreq
|
|
|
|
@cindex hyphenation space
|
|
@rqindex ad
|
|
@Defreq {hys, [@Var{hyphenation_space}]}
|
|
@Defregx {.hys}
|
|
Set the hyphenation space to @var{hyphenation_space}. If the current
|
|
adjustment mode is @samp{b} or@w{ }@samp{n}, don't hyphenate the line
|
|
if it can be justified by adding no more than @var{hyphenation_space}
|
|
extra space to each word space. Without argument, the hyphenation
|
|
space is set to its default value, which is@w{ }0. The default
|
|
scaling indicator for this request is@w{ }@code{m}. The hyphenation
|
|
space is associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
A negative argument resets the hyphenation space to zero, emitting a
|
|
warning of type @samp{range}.
|
|
|
|
@cindex current hyphenation space register
|
|
The current hyphenation space is available in the @code{.hys} read-only
|
|
number register.
|
|
@endDefreq
|
|
|
|
@cindex soft hyphen character
|
|
@cindex character, soft hyphen
|
|
@glindex hy
|
|
@rqindex char
|
|
@rqindex tr
|
|
@Defreq {shc, [@Var{char}]}
|
|
Set the soft hyphen character to @var{char}. If the argument is
|
|
omitted, the soft hyphen character is set to the default character
|
|
@code{\(hy} (this is the start-up value of @code{gtroff} also). The
|
|
soft hyphen character is the character that is inserted when a word is
|
|
hyphenated at a line break. If the soft hyphen character does not
|
|
exist in the font of the character immediately preceding a potential
|
|
break point, then the line is not broken at that point. Neither
|
|
definitions (specified with the @code{char} request) nor translations
|
|
(specified with the @code{tr} request) are considered when finding the
|
|
soft hyphen character.
|
|
@endDefreq
|
|
|
|
@rqindex hpf
|
|
@rqindex hw
|
|
@pindex troffrc
|
|
@pindex troffrc-end
|
|
@Defreq {hla, language}
|
|
@Defregx {.hla}
|
|
Set the current hyphenation language to the string @var{language}.
|
|
Hyphenation exceptions specified with the @code{hw} request and
|
|
hyphenation patterns specified with the @code{hpf} request are both
|
|
associated with the current hyphenation language. The @code{hla}
|
|
request is usually invoked by the @file{troffrc} or the
|
|
@file{troffrc-end} files; @file{troffrc} sets the default language to
|
|
@samp{us}.
|
|
|
|
@cindex current hyphenation language register
|
|
The current hyphenation language is available as a string in the
|
|
read-only number register @samp{.hla}.
|
|
|
|
@Example
|
|
.ds curr_language \n[.hla]
|
|
\*[curr_language]
|
|
@result{} us
|
|
@endExample
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
|
|
@section Manipulating Spacing
|
|
@cindex manipulating spacing
|
|
@cindex spacing, manipulating
|
|
|
|
@Defreq {sp, [@Var{distance}]}
|
|
Space downwards @var{distance}. With no argument it advances 1@w{
|
|
}line. A negative argument causes @code{gtroff} to move up the page
|
|
the specified distance. If the argument is preceded by a @samp{|}
|
|
then @code{gtroff} moves that distance from the top of the page. This
|
|
request causes a line break. The default scaling indicator is@w{
|
|
}@code{v}.
|
|
@endDefreq
|
|
|
|
@cindex double-spacing
|
|
@Defreq {ls, [@Var{nnn}]}
|
|
@Defregx {.L}
|
|
Output @w{@var{nnn}@minus{}1} blank lines after each line of text.
|
|
With no argument, @code{gtroff} uses the previous value before the
|
|
last @code{ls} call.
|
|
|
|
@Example
|
|
.ls 2 \" This causes double-spaced output
|
|
.ls 3 \" This causes triple-spaced output
|
|
.ls \" Again double spaced
|
|
@endExample
|
|
|
|
The line spacing is associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
@cindex current line spacing register
|
|
The read-only number register @code{.L} contains the current line
|
|
spacing setting.
|
|
@endDefreq
|
|
|
|
@c XXX document \n[nl]
|
|
@c XXX document \n[nl] == -1 if vertical position is zero
|
|
|
|
@Defesc {\\x, ', spacing, '}
|
|
@Defregx {.a}
|
|
Sometimes, extra vertical spacing is only needed occasionally, e.g.@:
|
|
to allow space for a tall construct (like an equation). The @code{\x}
|
|
escape does this. The escape is given a numerical argument, usually
|
|
enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
|
|
is@w{ }@code{v}. If this number is positive extra vertical space is
|
|
inserted below the current line. A negative number adds space above.
|
|
If this escape is used multiple times on the same line, the maximum of
|
|
the values is used.
|
|
|
|
@xref{Escapes}, for details on parameter delimiting characters.
|
|
|
|
@cindex extra vertical line space register
|
|
The @code{.a} read-only number register contains the most recent
|
|
(nonnegative) extra vertical line space.
|
|
|
|
@c XXX
|
|
@ignore
|
|
@Example
|
|
... example of inline equation ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefesc
|
|
|
|
@rqindex sp
|
|
@cindex no-space mode
|
|
@cindex mode, no-space
|
|
@cindex blank lines, disabling
|
|
@cindex lines, blank, disabling
|
|
@Defreq {ns, }
|
|
@Defregx {.ns}
|
|
Enable @dfn{no-space mode}. In this mode, spacing (either via
|
|
@code{sp} or via blank lines) is disabled. The @code{bp} request to
|
|
advance to the next page is also disabled, except if it is accompanied
|
|
by a page number (see @ref{Page Control}, for more information). This
|
|
mode ends when actual text is output or the @code{rs} request is
|
|
encountered. The read-only number register @code{.ns} is set to@w{ }1.
|
|
|
|
This request is useful for macros which want to avoid that subsequent
|
|
macros inadvertently insert some vertical space before the text starts
|
|
(for example, to set up the first paragraph after a section header).
|
|
|
|
@c XXX xref
|
|
@endDefreq
|
|
|
|
@Defreq {rs, }
|
|
Disable no-space mode.
|
|
|
|
@c XXX xref
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
|
|
@section Tabs and Fields
|
|
@cindex tabs and fields
|
|
@cindex fields and tabs
|
|
|
|
@cindex @acronym{EBCDIC} encoding of a tab
|
|
A tab character (@acronym{ASCII} char@w{ }9, @acronym{EBCDIC} char@w{
|
|
}5) causes a horizontal movement to the next tab stop (much
|
|
like it did on a typewriter).
|
|
|
|
@Defesc {\\t, , , }
|
|
This escape is a non-interpreted tab character. In copy mode
|
|
(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
|
|
@endDefesc
|
|
|
|
@Defreq {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
|
|
@Defregx {.tabs}
|
|
Change tab stop positions. This request takes a series of tab
|
|
specifiers as arguments (optionally divided into two groups with the
|
|
letter @samp{T}) which indicate where each tab stop is to be
|
|
(overriding any previous settings).
|
|
|
|
Tab stops can be specified absolutely, i.e., as the distance from the
|
|
left margin. For example, the following sets 6@w{ }tab stops every
|
|
one inch.
|
|
|
|
@Example
|
|
.ta 1i 2i 3i 4i 5i 6i
|
|
@endExample
|
|
|
|
Tab stops can also be specified using a leading @samp{+}
|
|
which means that the specified tab stop is set relative to
|
|
the previous tab stop. For example, the following is equivalent to the
|
|
previous example.
|
|
|
|
@Example
|
|
.ta 1i +1i +1i +1i +1i +1i
|
|
@endExample
|
|
|
|
@code{gtroff} supports an extended syntax to specify repeat values after
|
|
the @samp{T} mark (these values are always taken as relative) -- this is
|
|
the usual way to specify tabs set at equal intervals. The following is,
|
|
yet again, the same as the previous examples. It does even more since
|
|
it defines an infinite number of tab stops separated by one inch.
|
|
|
|
@Example
|
|
.ta T 1i
|
|
@endExample
|
|
|
|
Now we are ready to interpret the full syntax given at the beginning:
|
|
Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
|
|
tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
|
|
and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
|
|
@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
|
|
|
|
Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
|
|
20c 23c 28c 30c @dots{}}.
|
|
|
|
The material in each tab column (i.e., the column between two tab stops)
|
|
may be justified to the right or left or centered in the column. This
|
|
is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
|
|
specifier. The default justification is @samp{L}. Example:
|
|
|
|
@Example
|
|
.ta 1i 2iC 2iR
|
|
@endExample
|
|
|
|
Some notes:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
The default unit of the @code{ta} request is @samp{m}.
|
|
|
|
@item
|
|
A tab stop is converted into a non-breakable horizontal movement which
|
|
can be neither stretched nor squeezed. For example,
|
|
|
|
@Example
|
|
.ds foo a\tb\tc
|
|
.ta T 5i
|
|
\*[foo]
|
|
@endExample
|
|
|
|
@noindent
|
|
creates a single line which is a bit longer than 10@w{ }inches (a string
|
|
is used to show exactly where the tab characters are). Now consider the
|
|
following:
|
|
|
|
@Example
|
|
.ds bar a\tb b\tc
|
|
.ta T 5i
|
|
\*[bar]
|
|
@endExample
|
|
|
|
@noindent
|
|
@code{gtroff} first converts the tab stops of the line into unbreakable
|
|
horizontal movements, then splits the line after the second @samp{b}
|
|
(assuming a sufficiently short line length). Usually, this isn't what
|
|
the user wants.
|
|
|
|
@item
|
|
Superfluous tabs (i.e., tab characters which do not correspond to a tab
|
|
stop) are ignored except the first one which delimits the characters
|
|
belonging to the last tab stop for right-justifying or centering.
|
|
Consider the following example
|
|
|
|
@Example
|
|
.ds Z foo\tbar\tfoo
|
|
.ds ZZ foo\tbar\tfoobar
|
|
.ds ZZZ foo\tbar\tfoo\tbar
|
|
.ta 2i 4iR
|
|
\*[Z]
|
|
.br
|
|
\*[ZZ]
|
|
.br
|
|
\*[ZZZ]
|
|
.br
|
|
@endExample
|
|
|
|
@noindent
|
|
which produces the following output:
|
|
|
|
@Example
|
|
foo bar foo
|
|
foo bar foobar
|
|
foo bar foobar
|
|
@endExample
|
|
|
|
@noindent
|
|
The first line right-justifies the second `foo' relative to the tab
|
|
stop. The second line right-justifies `foobar'. The third line finally
|
|
right-justifies only `foo' because of the additional tab character which
|
|
marks the end of the string belonging to the last defined tab stop.
|
|
|
|
@item
|
|
Tab stops are associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
@item
|
|
Calling @code{ta} without an argument removes all tab stops.
|
|
|
|
@item
|
|
@cindex tab stops, for tty output devices
|
|
The start-up value of @code{gtroff} is @w{@samp{T 0.5i}}. This value
|
|
is used even for tty output devices (contrary to @acronym{UNIX}
|
|
@code{nroff} which has tab stops preset every 0.8@dmn{i}).
|
|
|
|
@c XXX xref implementation differences
|
|
@end itemize
|
|
|
|
@cindex current tab settings register
|
|
The read-only number register @code{.tabs} contains a string
|
|
representation of the current tab settings suitable for use as an
|
|
argument to the @code{ta} request.
|
|
|
|
@Example
|
|
.ds tab-string \n[.tabs]
|
|
\*[tab-string]
|
|
@result{} T120u
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex tab repetition character
|
|
@cindex character, tab repetition
|
|
@Defreq {tc, [@Var{fill-char}]}
|
|
Normally @code{gtroff} fills the space to the next tab stop with
|
|
whitespace. This can be changed with the @code{tc} request. With no
|
|
argument @code{gtroff} reverts to using whitespace, which is the
|
|
default. The value of this @dfn{tab repetition} character is
|
|
associated with the current environment (@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@menu
|
|
* Leaders::
|
|
* Fields::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Leaders, Fields, Tabs and Fields, Tabs and Fields
|
|
@subsection Leaders
|
|
@cindex leaders
|
|
|
|
Sometimes it may may be desirable to use the @code{tc} request to fill a
|
|
particular tab stop with a given character (for example dots in a table
|
|
of contents), but also normal tab stops on the rest of the line. For
|
|
this @code{gtroff} provides an alternate tab mechanism, called
|
|
@dfn{leaders} which does just that.
|
|
|
|
@cindex leader character
|
|
A leader character (character code@w{ }1) behaves similarly to a tab
|
|
character: It moves to the next tab stop. The only difference is that
|
|
for this movement, the fill character defaults to a period character and
|
|
not to space.
|
|
|
|
@Defesc {\\a, , , }
|
|
This escape is a non-interpreted leader character. In copy mode
|
|
(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
|
|
character.
|
|
@endDefesc
|
|
|
|
@cindex leader repetition character
|
|
@cindex character, leader repetition
|
|
@Defreq {lc, [@Var{fill-char}]}
|
|
Declare the leader character. Without an argument, leaders act the
|
|
same as tabs (i.e., using whitespace for filling). @code{gtroff}'s
|
|
start-up value is @samp{.}. The value of this @dfn{leader repetition}
|
|
character is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@cindex table of contents
|
|
@cindex contents, table of
|
|
For a table of contents, to name an example, tab stops may be defined so
|
|
that the section number is one tab stop, the title is the second with
|
|
the remaining space being filled with a line of dots, and then the page
|
|
number slightly separated from the dots.
|
|
|
|
@Example
|
|
.ds entry 1.1\tFoo\a\t12
|
|
.lc .
|
|
.ta 1i 5i +.25i
|
|
\*[entry]
|
|
@endExample
|
|
|
|
@noindent
|
|
This produces
|
|
|
|
@Example
|
|
1.1 Foo.......................................... 12
|
|
@endExample
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Fields, , Leaders, Tabs and Fields
|
|
@subsection Fields
|
|
@cindex fields
|
|
|
|
@cindex field delimiting character
|
|
@cindex delimiting character for fields
|
|
@cindex character, field delimiting
|
|
@cindex field padding character
|
|
@cindex padding character for fields
|
|
@cindex character, field padding
|
|
@dfn{Fields} are a more general way of laying out tabular data. A field
|
|
is defined as the data between a pair of @dfn{delimiting characters}.
|
|
It contains substrings which are separated by @dfn{padding characters}.
|
|
The width of a field is the distance on the @emph{input} line from the
|
|
position where the field starts to the next tab stop. A padding
|
|
character inserts stretchable space similar to @TeX{}'s @code{\hss}
|
|
command (thus it can even be negative) to make the sum of all substring
|
|
lengths plus the stretchable space equal to the field width. If more
|
|
than one padding character is inserted, the available space is evenly
|
|
distributed among them.
|
|
|
|
@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
|
|
Define a delimiting and a padding character for fields. If the latter
|
|
is missing, the padding character defaults to a space character. If
|
|
there is no argument at all, the field mechanism is disabled (which is
|
|
the default). Note that contrary to e.g.@: the tab repetition
|
|
character, delimiting and padding characters are not associated to the
|
|
current environment (@pxref{Environments}).
|
|
|
|
Example:
|
|
|
|
@Example
|
|
.fc # ^
|
|
.ta T 3i
|
|
#foo^bar^smurf#
|
|
.br
|
|
#foo^^bar^smurf#
|
|
@endExample
|
|
|
|
@noindent
|
|
and here the result:
|
|
|
|
@Example
|
|
foo bar smurf
|
|
foo bar smurf
|
|
@endExample
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
|
|
@section Character Translations
|
|
@cindex character translations
|
|
@cindex translations of characters
|
|
|
|
@rqindex .
|
|
@rqindex '
|
|
@cindex control character
|
|
@cindex character, control
|
|
@cindex no-break control character
|
|
@cindex character, no-break control
|
|
@cindex control character, no-break
|
|
The control character (@samp{.}) and the no-break control character
|
|
(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
|
|
respectively.
|
|
|
|
@Defreq {cc, [@Var{c}]}
|
|
Set the control character to @var{c}. With no argument the default
|
|
control character @samp{.} is restored. The value of the control
|
|
character is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@Defreq {c2, [@Var{c}]}
|
|
Set the no-break control character to @var{c}. With no argument the
|
|
default control character @samp{'} is restored. The value of the
|
|
no-break control character is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@esindex \\
|
|
@Defreq {eo, }
|
|
Disable the escape mechanism completely. After executing this
|
|
request, the backslash character @samp{\} no longer starts an escape
|
|
sequence.
|
|
|
|
This request can be very helpful in writing macros since it is not
|
|
necessary then to double the escape character. Here an example:
|
|
|
|
@Example
|
|
.\" This is a simplified version of the
|
|
.\" .BR request from the man macro package
|
|
.eo
|
|
.de BR
|
|
. ds result \&
|
|
. while (\n[.$] >= 2) \@{\
|
|
. as result \fB\$1\fR\$2
|
|
. shift 2
|
|
. \@}
|
|
. if \n[.$] .as result \fB\$1
|
|
\*[result]
|
|
. ft R
|
|
..
|
|
.ec
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex escape character
|
|
@cindex character, escape
|
|
@Defreq {ec, [@Var{c}]}
|
|
Set the escape character to @var{c}. With no argument the default
|
|
escape character @samp{\} is restored. It can be also used to
|
|
re-enable the escape mechanism after an @code{eo} request.
|
|
|
|
Note that changing the escape character globally will likely break
|
|
macro packages since @code{gtroff} has no mechanism (like @TeX{}) to
|
|
`intern' macros, i.e., to convert a macro definition into an internal
|
|
form which is independent of its representation. If a macro is
|
|
called, it is executed literally.
|
|
@endDefreq
|
|
|
|
@Defesc {\\e, , , }
|
|
This escape sequence prints the current escape character (which is the
|
|
backslash character @samp{\} by default).
|
|
@endDefesc
|
|
|
|
A @dfn{translation} is a mapping of an input character to an output
|
|
character. The default mappings are given in the font definition files
|
|
for the specific output device (@pxref{Font Files}); all mappings (both
|
|
with @code{tr} and in the font definition files) occur at output time,
|
|
i.e., the input character gets assigned the metric information of the
|
|
mapped output character.
|
|
|
|
@Defreq {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
|
|
Translate character @var{a} to @var{b}, character @var{c} to @var{d},
|
|
etc. If there is an odd number of arguments, the last one is
|
|
translated to the space character.
|
|
|
|
Some notes:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@esindex \(
|
|
@esindex \[
|
|
@esindex \'
|
|
@esindex \`
|
|
@esindex \-
|
|
@esindex \_
|
|
@esindex \C
|
|
@esindex \N
|
|
@rqindex char
|
|
@cindex special character
|
|
@cindex character, special
|
|
@cindex numbered character
|
|
@cindex character, numbered
|
|
Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
|
|
@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
|
|
characters defined with the @code{char} request, and numbered characters
|
|
(@code{\N'@var{xxx}'}) can be translated also.
|
|
|
|
@item
|
|
@esindex \e
|
|
The @code{\e} escape can be translated also.
|
|
|
|
@item
|
|
@esindex \%
|
|
@esindex \~
|
|
Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
|
|
@code{\%} and @code{\~} can't be mapped onto another character).
|
|
|
|
@item
|
|
@cindex backspace character
|
|
@cindex character, backspace
|
|
@cindex leader character
|
|
@cindex character, leader
|
|
@cindex newline character
|
|
@cindex character, newline
|
|
@cindex tab character
|
|
@cindex character, tab
|
|
@esindex \a
|
|
@esindex \t
|
|
The following characters can't be translated: space (with one exception,
|
|
see below), backspace, newline, leader (and @code{\a}), tab (and
|
|
@code{\t}).
|
|
|
|
@item
|
|
@rqindex shc
|
|
Translations are not considered for finding the soft hyphen character
|
|
set with the @code{shc} request.
|
|
|
|
@item
|
|
@esindex \&
|
|
The character pair @samp{@var{c}\&} (this is an arbitrary character@w{
|
|
}@var{c} followed by the zero width space character) maps this
|
|
character to nothing.
|
|
|
|
@Example
|
|
.tr a\&
|
|
foo bar
|
|
@result{} foo br
|
|
@endExample
|
|
|
|
@noindent
|
|
It is even possible to map the space character to nothing:
|
|
|
|
@Example
|
|
.tr aa \&
|
|
foo bar
|
|
@result{} foobar
|
|
@endExample
|
|
|
|
@noindent
|
|
As shown in the example, the space character can't be the first
|
|
character pair as an argument of @code{tr}. Additionally, it is not
|
|
possible to map the space character to any other character; requests
|
|
like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
|
|
|
|
If justification is active, lines are justified in spite of the
|
|
`empty' space character (but there is no minimal distance, i.e.@: the
|
|
space character, between words).
|
|
|
|
@item
|
|
After an output character has been constructed (this happens at the
|
|
moment immediately before the character is appended to an output
|
|
character list, either by direct output, in a macro, diversion, or
|
|
string), it is no longer affected by @code{tr}.
|
|
|
|
@c XXX xref
|
|
|
|
@item
|
|
Without an argument, the @code{tr} request is ignored.
|
|
@end itemize
|
|
@endDefreq
|
|
|
|
@esindex \!
|
|
@cindex @code{\!}, and @code{trnt}
|
|
@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
|
|
@code{trnt} is the same as the @code{tr} request except that the
|
|
translations do not apply to text that is transparently throughput
|
|
into a diversion with @code{\!}. @xref{Diversions}, for more
|
|
information.
|
|
|
|
For example,
|
|
|
|
@Example
|
|
.tr ab
|
|
.di x
|
|
\!.tm a
|
|
.di
|
|
.x
|
|
@endExample
|
|
|
|
@noindent
|
|
prints @samp{b} to the standard error stream; if @code{trnt} is used
|
|
instead of @code{tr} it prints @samp{a}.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
|
|
@section Troff and Nroff Mode
|
|
@cindex troff mode
|
|
@cindex mode, troff
|
|
@cindex nroff mode
|
|
@cindex mode, nroff
|
|
|
|
Originally, @code{nroff} and @code{troff} were two separate programs,
|
|
the former for tty output, the latter for everything else. With GNU
|
|
@code{troff}, both programs are merged into one executable, sending
|
|
its output to a device driver (@code{grotty} for tty devices,
|
|
@code{grops} for @sc{PostScript}, etc.) which interprets the
|
|
intermediate output of @code{gtroff}. For @acronym{UNIX} @code{troff}
|
|
it makes sense to talk about @dfn{Nroff mode} and @dfn{Troff mode}
|
|
since the differences are hardcoded. For GNU @code{troff}, this
|
|
distinction is not appropriate because @code{gtroff} simply takes the
|
|
information given in the font files for a particular device without
|
|
handling requests specially if a tty output device is used.
|
|
|
|
Usually, a macro package can be used with all output devices.
|
|
Nevertheless, it is sometimes necessary to make a distinction between
|
|
tty and non-tty devices: @code{gtroff} provides two built-in
|
|
conditions @samp{n} and @samp{t} for the @code{if}, @code{ie}, and
|
|
@code{while} requests to decide whether @code{gtroff} shall behave
|
|
like @code{nroff} or like @code{troff}.
|
|
|
|
@pindex troffrc
|
|
@pindex troffrc-end
|
|
@Defreq {troff, }
|
|
Make the @samp{t} built-in condition true (and the @samp{n} built-in
|
|
condition false) for @code{if}, @code{ie}, and @code{while}
|
|
conditional requests. This is the default if @code{gtroff}
|
|
(@emph{not} @code{groff}) is started with the @option{-R} switch to
|
|
avoid loading of the start-up files @file{troffrc} and
|
|
@file{troffrc-end}. Without @option{-R}, @code{gtroff} stays in troff
|
|
mode if the output device is not a tty (e.g.@: `ps').
|
|
@endDefreq
|
|
|
|
@pindex tty.tmac
|
|
@Defreq {nroff, }
|
|
Make the @samp{n} built-in condition true (and the @samp{t} built-in
|
|
condition false) for @code{if}, @code{ie}, and @code{while}
|
|
conditional requests. This is the default if @code{gtroff} uses a tty
|
|
output device; the code for switching to nroff mode is in the file
|
|
@file{tty.tmac} which is loaded by the start-up file @code{troffrc}.
|
|
@endDefreq
|
|
|
|
@xref{Conditionals and Loops}, for more details on built-in
|
|
conditions.
|
|
|
|
@c XXX move the following to grotty section
|
|
|
|
@pindex less
|
|
@cindex Teletype
|
|
@cindex ISO 6249 SGR
|
|
@cindex terminal control sequences
|
|
@cindex control sequences, for terminals
|
|
For tty output devices, underlining is done by emitting sequences of
|
|
@samp{_} and @samp{\b} (the backspace character) before the actual
|
|
character. Literally, this is printing an underline character, then
|
|
moving back one character position, and printing the actual character
|
|
at the same position as the underline character (similar to a
|
|
typewriter). Usually, a modern terminal can't interpret this (and the
|
|
original Teletype machines for which this sequence was appropriate are
|
|
no longer in use). You need a pager program like @code{less} which
|
|
translates this into ISO 6429 SGR sequences to control terminals.
|
|
|
|
@c =====================================================================
|
|
|
|
@node Line Layout, Page Layout, Troff and Nroff Mode, gtroff Reference
|
|
@section Line Layout
|
|
@cindex line layout
|
|
@cindex layout, line
|
|
|
|
@cindex dimensions, line
|
|
@cindex line dimensions
|
|
The following drawing shows the dimensions which @code{gtroff} uses for
|
|
placing a line of output onto the page. They are labeled with the
|
|
request which manipulates each dimension.
|
|
|
|
@Example
|
|
-->| in |<--
|
|
|<-----------ll------------>|
|
|
+----+----+----------------------+----+
|
|
| : : : |
|
|
+----+----+----------------------+----+
|
|
-->| po |<--
|
|
|<--------paper width---------------->|
|
|
@endExample
|
|
|
|
@noindent
|
|
These dimensions are:
|
|
|
|
@ftable @code
|
|
@item po
|
|
@cindex left margin
|
|
@cindex margin, left
|
|
@cindex page offset
|
|
@cindex offset, page
|
|
@dfn{Page offset} -- this is the leftmost position of text on the final
|
|
output, defining the @dfn{left margin}.
|
|
|
|
@item in
|
|
@cindex indentation
|
|
@cindex line indentation
|
|
@dfn{Indentation} -- this is the distance from the left margin where
|
|
text is printed.
|
|
|
|
@item ll
|
|
@cindex line length
|
|
@cindex length of line
|
|
@dfn{Line length} -- this is the distance from the left margin to right
|
|
margin.
|
|
@end ftable
|
|
|
|
@c XXX improve example
|
|
|
|
@Example
|
|
.in +.5i
|
|
.ll -.5i
|
|
A bunch of really boring text which should
|
|
be indented from both margins.
|
|
Replace me with a better (and more) example!
|
|
.in -.5i
|
|
.ll +.5i
|
|
@endExample
|
|
|
|
@pindex troffrc
|
|
@Defreq {po, [@Var{offset}]}
|
|
@Defreqx {po, @t{+}@Var{offset}}
|
|
@Defreqx {po, @t{-}@Var{offset}}
|
|
@Defregx {.o}
|
|
Set horizontal page offset to @var{offset} (or increment or decrement
|
|
the current value by @var{offset}). Note that this request does not
|
|
cause a break, so changing the page offset in the middle of text being
|
|
filled may not yield the expected result. The initial value is
|
|
1@dmn{i}. For tty output devices, it is set to 0 in the startup file
|
|
@file{troffrc}; the default scaling indicator is@w{ }@code{m} (and
|
|
not@w{ }@code{v} as incorrectly documented in the original
|
|
@acronym{UNIX} troff manual).
|
|
|
|
The current page offset can be found in the read-only number register
|
|
@samp{.o}.
|
|
|
|
If @code{po} is called without an argument, the page offset is reset to
|
|
the previous value before the last call to @code{po}.
|
|
|
|
@Example
|
|
.po 3i
|
|
\n[.o]
|
|
@result{} 720
|
|
.po -1i
|
|
\n[.o]
|
|
@result{} 480
|
|
.po
|
|
\n[.o]
|
|
@result{} 720
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@Defreq {in, [@Var{indent}]}
|
|
@Defreqx {in, @t{+}@Var{indent}}
|
|
@Defreqx {in, @t{-}@Var{indent}}
|
|
@Defregx {.i}
|
|
Set indentation to @var{indent} (or increment or decrement the
|
|
current value by @var{indent}). This request causes a break.
|
|
Initially, there is no indentation.
|
|
|
|
If @code{in} is called without an argument, the indentation is reset to
|
|
the previous value before the last call to @code{in}. The default
|
|
scaling indicator is@w{ }@code{m}.
|
|
|
|
The indentation is associated with the current environment.
|
|
|
|
If a negative indentation value is specified (which is not allowed),
|
|
@code{gtroff} emits a warning of type @samp{range} and sets the
|
|
indentation to zero.
|
|
|
|
The effect of @code{in} is delayed until a partially collected line (if
|
|
it exists) is output. A temporary indent value is reset to zero also.
|
|
|
|
The current indentation (as set by @code{in}) can be found in the
|
|
read-only number register @samp{.i}.
|
|
@endDefreq
|
|
|
|
@Defreq {ti, offset}
|
|
@Defreqx {ti, @t{+}@Var{offset}}
|
|
@Defreqx {ti, @t{-}@Var{offset}}
|
|
@Defregx {.in}
|
|
Temporarily indent the next output line by @var{offset}. If an
|
|
increment or decrement value is specified, adjust the temporary
|
|
indentation relative to the value set by the @code{in} request.
|
|
|
|
This request causes a break; its value is associated with the current
|
|
environment. The default scaling indicator is@w{ }@code{m}. A call
|
|
of @code{ti} without an argument is ignored.
|
|
|
|
If the total indentation value is negative (which is not allowed),
|
|
@code{gtroff} emits a warning of type @samp{range} and sets the
|
|
temporary indentation to zero. `Total indentation' is either
|
|
@var{offset} if specified as an absolute value, or the temporary plus
|
|
normal indentation, if @var{offset} is given as a relative value.
|
|
|
|
The effect of @code{ti} is delayed until a partially collected line (if
|
|
it exists) is output.
|
|
|
|
The read-only number register @code{.in} is the indentation that applies
|
|
to the current output line.
|
|
|
|
The difference between @code{.i} and @code{.in} is that the latter takes
|
|
into account whether a partially collected line still uses the old
|
|
indentation value or a temporary indentation value is active.
|
|
@endDefreq
|
|
|
|
@Defreq {ll, [@Var{length}]}
|
|
@Defreqx {ll, @t{+}@Var{length}}
|
|
@Defreqx {ll, @t{-}@Var{length}}
|
|
@Defregx {.l}
|
|
@Defregx {.ll}
|
|
Set the line length to @var{length} (or increment or decrement the
|
|
current value by @var{length}). Initially, the line length is set to
|
|
6.5@dmn{i}. The effect of @code{ll} is delayed until a partially
|
|
collected line (if it exists) is output. The default scaling
|
|
indicator is@w{ }@code{m}.
|
|
|
|
If @code{ll} is called without an argument, the line length is reset to
|
|
the previous value before the last call to @code{ll}. If a negative
|
|
line length is specified (which is not allowed), @code{gtroff} emits a
|
|
warning of type @samp{range} and sets the line length to zero.
|
|
|
|
The line length is associated with the current environment.
|
|
|
|
@cindex current line length register
|
|
The current line length (as set by @code{ll}) can be found in the
|
|
read-only number register @samp{.l}. The read-only number register
|
|
@code{.ll} is the line length that applies to the current output line.
|
|
|
|
Similar to @code{.i} and @code{.in}, the difference between @code{.l}
|
|
and @code{.ll} is that the latter takes into account whether a partially
|
|
collected line still uses the old line length value.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Page Layout, Page Control, Line Layout, gtroff Reference
|
|
@section Page Layout
|
|
@cindex page layout
|
|
@cindex layout, page
|
|
|
|
@code{gtroff} provides some very primitive operations for controlling
|
|
page layout.
|
|
|
|
@cindex page length
|
|
@cindex length of page
|
|
@Defreq {pl, [@Var{length}]}
|
|
@Defreqx {pl, @t{+}@Var{length}}
|
|
@Defreqx {pl, @t{-}@Var{length}}
|
|
@Defregx {.p}
|
|
Set the @dfn{page length} to @var{length} (or increment or decrement
|
|
the current value by @var{length}). This is the length of the
|
|
physical output page. The default scaling indicator is@w{ }@code{v}.
|
|
|
|
@cindex current page length register
|
|
The current setting can be found in the read-only number register
|
|
@samp{.p}.
|
|
|
|
@cindex top margin
|
|
@cindex margin, top
|
|
@cindex bottom margin
|
|
@cindex margin, bottom
|
|
Note that this only specifies the size of the page, not the top and
|
|
bottom margins. Those are not set by @code{gtroff} directly.
|
|
@xref{Traps}, for further information on how to do this.
|
|
|
|
Negative @code{pl} values are possible also, but not very useful: No
|
|
trap is sprung, and each line is output on a single page (thus
|
|
suppressing all vertical spacing).
|
|
|
|
If no argument or an invalid argument is given, @code{pl} sets the page
|
|
length to 11@dmn{i}.
|
|
@endDefreq
|
|
|
|
@cindex headers
|
|
@cindex footers
|
|
@cindex titles
|
|
@code{gtroff} provides several operations which help in setting up top
|
|
and bottom titles (or headers and footers).
|
|
|
|
@cindex title line
|
|
@cindex three-part title
|
|
@cindex page number character
|
|
@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
|
|
Print a @dfn{title line}. It consists of three parts: a left
|
|
justified portion, a centered portion, and a right justified portion.
|
|
The argument separator @samp{'} can be replaced with any character not
|
|
occurring in the title line. The @samp{%} character is replaced with
|
|
the current page number. This character can be changed with the
|
|
@code{pc} request (see below).
|
|
|
|
Without argument, @code{tl} is ignored.
|
|
|
|
Some notes:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
A title line is not restricted to the top or bottom of a page.
|
|
|
|
@item
|
|
@code{tl} prints the title line immediately, ignoring a partially filled
|
|
line (which stays untouched).
|
|
|
|
@item
|
|
It is not an error to omit closing delimiters. For example,
|
|
@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
|
|
title line with the left justified word @samp{foo}; the centered and
|
|
right justfied parts are empty.
|
|
|
|
@item
|
|
Any modifications to the current environment within @code{tl} (e.g.@:
|
|
changing the font or font size) are undone after processing @code{tl}.
|
|
|
|
@item
|
|
@code{tl} accepts the same parameter delimiting characters as the
|
|
@code{\A} escape; see @ref{Escapes}.
|
|
@end itemize
|
|
@endDefreq
|
|
|
|
@cindex length of title line
|
|
@cindex title line, length
|
|
@cindex current title line length register
|
|
@Defreq {lt, [@Var{length}]}
|
|
@Defreqx {lt, @t{+}@Var{length}}
|
|
@Defreqx {lt, @t{-}@Var{length}}
|
|
@Defregx {.lt}
|
|
The title line is printed using its own line length, which is
|
|
specified (or incremented or decremented) with the @code{lt} request.
|
|
Initially, the title line length is set to 6.5@dmn{i}. If a negative
|
|
line length is specified (which is not allowed), @code{gtroff} emits a
|
|
warning of type @samp{range} and sets the title line length to zero.
|
|
The default scaling indicator is@w{ }@code{m}. If @code{lt} is called
|
|
without an argument, the title length is reset to the previous value
|
|
before the last call to @code{lt}.
|
|
|
|
The current setting of this is available in the @code{.lt} read-only
|
|
number register; it is associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
@endDefreq
|
|
|
|
@cindex page number
|
|
@cindex number, page
|
|
@Defreq {pn, page}
|
|
@Defreqx {pn, @t{+}@Var{page}}
|
|
@Defreqx {pn, @t{-}@Var{page}}
|
|
@Defregx {.pn}
|
|
Change (increase or decrease) the page number of the @emph{next} page.
|
|
The only argument is the page number; the request is ignored without a
|
|
parameter.
|
|
|
|
The read-only number register @code{.pn} contains the number of the next
|
|
page: either the value set by a @code{pn} request, or the number of the
|
|
current page plus@w{ }1.
|
|
@endDefreq
|
|
|
|
@cindex current page number register
|
|
@Defreg {%}
|
|
A read-write register holding the current page number.
|
|
@endDefreg
|
|
|
|
@cindex changing the page number character
|
|
@cindex page number character, changing
|
|
@vindex %
|
|
@Defreq {pc, [@Var{char}]}
|
|
Change the page number character (used by the @code{tl} request) to a
|
|
different character. With no argument, this mechanism is disabled.
|
|
Note that this doesn't affect the number register @code{%}.
|
|
@endDefreq
|
|
|
|
@xref{Traps}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Page Control, Fonts, Page Layout, gtroff Reference
|
|
@section Page Control
|
|
@cindex page control
|
|
@cindex control, page
|
|
|
|
@rqindex pn
|
|
@cindex new page
|
|
@Defreq {bp, [@Var{page}]}
|
|
@Defreqx {bp, @t{+}@Var{page}}
|
|
@Defreqx {bp, @t{-}@Var{page}}
|
|
Stop processing the current page and move to the next page. This
|
|
request causes a break. It can also take an argument to set
|
|
(increase, decrease) the page number of the next page. The only
|
|
difference between @code{bp} and @code{pn} is that @code{pn} does not
|
|
cause a break or actually eject a page.
|
|
|
|
@Example
|
|
.de newpage \" define macro
|
|
'bp \" begin page
|
|
'sp .5i \" vertical space
|
|
.tl 'left top'center top'right top' \" title
|
|
'sp .3i \" vertical space
|
|
.. \" end macro
|
|
@endExample
|
|
|
|
@cindex top-level diversion
|
|
@cindex diversion, top-level
|
|
@code{bp} has no effect if not called within the top-level diversion
|
|
(@pxref{Diversions}).
|
|
@endDefreq
|
|
|
|
@cindex orphan line
|
|
@Defreq {ne, [@Var{space}]}
|
|
It is often necessary to force a certain amount of space before a new
|
|
page occurs. This is most useful to make sure that there is not a
|
|
single @dfn{orphan} line left at the bottom of a page. The @code{ne}
|
|
request ensures that there is a certain distance, specified by the
|
|
first argument, before the next page is triggered (see @ref{Traps},
|
|
for further information). The default unit for @code{ne} is @samp{v};
|
|
the default value of @var{space} is@w{ }1@dmn{v} if no argument is
|
|
given.
|
|
|
|
For example, to make sure that no fewer than 2@w{ }lines get orphaned,
|
|
do the following before each paragraph:
|
|
|
|
@Example
|
|
.ne 2
|
|
text text text
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@rqindex os
|
|
@rqindex ne
|
|
@Defreq {sv, [@Var{space}]}
|
|
@code{sv} is similar to the @code{ne} request; it reserves the
|
|
specified amount of vertical space. If the desired amount of space
|
|
exists before the next trap (bottom page boundary), the space is
|
|
output immediately (ignoring a partial filled line which stays
|
|
untouched). If there is not enough space, it is stored for later
|
|
output via the @code{os} request. The default value is@w{ }1@dmn{v}
|
|
if no argument is given; the default unit is @samp{v}.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Fonts, Sizes, Page Control, gtroff Reference
|
|
@section Fonts
|
|
@cindex fonts
|
|
|
|
@code{gtroff} can switch fonts at any point in the text.
|
|
|
|
The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
|
|
These are Times Roman, Italic, Bold, and Bold Italic. For non-tty
|
|
devices, there is also at least one symbol font which contains various
|
|
special symbols (Greek, mathematics).
|
|
|
|
@menu
|
|
* Changing Fonts::
|
|
* Font Families::
|
|
* Font Positions::
|
|
* Using Symbols::
|
|
* Special Fonts::
|
|
* Artificial Fonts::
|
|
* Ligatures and Kerning::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Changing Fonts, Font Families, Fonts, Fonts
|
|
@subsection Changing Fonts
|
|
@cindex changing fonts
|
|
@cindex fonts, changing
|
|
|
|
@rqindex sty
|
|
@rqindex fam
|
|
@kindex styles
|
|
@kindex family
|
|
@pindex DESC
|
|
@Defreq {ft, [@Var{font}]}
|
|
@Defescx {\\f, , f, }
|
|
@Defescx {\\f, @lparen{}, fn, }
|
|
@Defescx {\\f, @lbrack{}, font, @rbrack}
|
|
The @code{ft} request and the @code{\f} escape change the current font
|
|
to @var{font} (one-character name @var{f}, two-character name
|
|
@var{fn}).
|
|
|
|
If @var{font} is a style name (as set with the @code{sty} request or
|
|
with the @code{styles} command in the @file{DESC} file), use it within
|
|
the current font family (as set with the @code{fam} request or with
|
|
the @code{family} command in the @file{DESC} file).
|
|
|
|
@cindex previous font
|
|
@cindex font, previous
|
|
With no argument or using @samp{P} as an argument, @code{.ft} switches
|
|
to the previous font. Use @code{\fP} or @code{\f[P]} to do this with
|
|
the escape.
|
|
|
|
Fonts are generally specified as upper-case strings, which are usually
|
|
1@w{ }to 4 characters representing an abbreviation or acronym of the
|
|
font name. This is no limitation, just a convention.
|
|
|
|
The example below produces two identical lines.
|
|
|
|
@Example
|
|
eggs, bacon,
|
|
.ft B
|
|
spam
|
|
.ft
|
|
and sausage.
|
|
|
|
eggs, bacon, \fBspam\fP and sausage.
|
|
@endExample
|
|
|
|
@xref{Font Positions}, for an alternative syntax.
|
|
@endDefreq
|
|
|
|
@rqindex ft
|
|
@rqindex ul
|
|
@rqindex bd
|
|
@esindex \f
|
|
@rqindex cs
|
|
@rqindex tkf
|
|
@rqindex special
|
|
@rqindex fspecial
|
|
@rqindex fp
|
|
@rqindex code
|
|
@Defreq {ftr, f [@Var{g}]}
|
|
Translate font@w{ }@var{f} to font@w{ }@var{g}. Whenever a font named
|
|
@var{f} is referred to in a @code{\f} escape sequence, or in the
|
|
@code{ft}, @code{ul}, @code{bd}, @code{cs}, @code{tkf},
|
|
@code{special}, @code{fspecial}, @code{fp}, or @code{code} requests,
|
|
font@w{ }@var{g} is used. If @var{g} is missing or equal to @var{f}
|
|
the translation is undone.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Font Families, Font Positions, Changing Fonts, Fonts
|
|
@subsection Font Families
|
|
@cindex font families
|
|
@cindex families, font
|
|
@cindex font styles
|
|
@cindex styles, font
|
|
|
|
Due to the variety of fonts available, @code{gtroff} has added the
|
|
concept of @dfn{font families} and @dfn{font styles}. The fonts are
|
|
specified as the concatenation of the font family and style. Specifying
|
|
a font without the family part causes @code{gtroff} to use that style of
|
|
the current family.
|
|
|
|
@cindex postscript fonts
|
|
@cindex fonts, postscript
|
|
Currently, only @sc{PostScript} fonts are set up to this mechanism.
|
|
By default, @code{gtroff} uses the Times family with the four styles
|
|
@samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
|
|
|
|
This way, it is possible to use the basic four fonts and to select a
|
|
different font family on the command line (@pxref{Groff Options}).
|
|
|
|
@Defreq {fam, [@Var{family}]}
|
|
@Defregx {.fam}
|
|
Switch font family to @var{family}. If no argument is given, switch
|
|
back to the previous font family. The current font family is available
|
|
in the read-only number register @samp{.fam} (this is a string-valued
|
|
register); it is associated with the current environment.
|
|
|
|
@Example
|
|
spam,
|
|
.fam H \" helvetica family
|
|
spam, \" used font is family H + style R = HR
|
|
.ft B \" family H + style B = font HB
|
|
spam,
|
|
.fam T \" times family
|
|
spam, \" used font is family T + style B = TB
|
|
.ft AR \" font AR (not a style)
|
|
baked beans,
|
|
.ft R \" family T + style R = font TR
|
|
and spam.
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@rqindex cs
|
|
@rqindex bd
|
|
@rqindex tkf
|
|
@rqindex uf
|
|
@rqindex fspecial
|
|
@Defreq {sty, n style}
|
|
Associate @var{style} with font position@w{ }@var{n}. A font position
|
|
can be associated either with a font or with a style. The current
|
|
font is the index of a font position and so is also either a font or a
|
|
style. When it is a style, the font that is actually used is the font
|
|
the name of which is the concatenation of the name of the current
|
|
family and the name of the current style. For example, if the current
|
|
font is@w{ }1 and font position@w{ }1 is associated with style@w{
|
|
}@samp{R} and the current font family is@w{ }@samp{T}, then font
|
|
@samp{TR} will be used. If the current font is not a style, then the
|
|
current family is ignored. When the requests @code{cs}, @code{bd},
|
|
@code{tkf}, @code{uf}, or @code{fspecial} are applied to a style, then
|
|
they will instead be applied to the member of the current family
|
|
corresponding to that style.
|
|
|
|
@var{n} must be a non-negative integer value.
|
|
|
|
@pindex DESC
|
|
@kindex styles
|
|
The default family can be set with the @option{-f} option
|
|
(@pxref{Groff Options}). The @code{styles} command in the @file{DESC}
|
|
file controls which font positions (if any) are initially associated
|
|
with styles rather than fonts. For example, the default setting for
|
|
@sc{PostScript} fonts
|
|
|
|
@Example
|
|
styles R I B BI
|
|
@endExample
|
|
|
|
@noindent
|
|
is equivalent to
|
|
|
|
@Example
|
|
.sty 1 R
|
|
.sty 2 I
|
|
.sty 3 B
|
|
.sty 4 BI
|
|
@endExample
|
|
|
|
@code{.fam} always checks whether the current font position is valid;
|
|
this can give surprising results if the current font position is
|
|
associated with a style.
|
|
|
|
In the following example, we want to access the @sc{PostScript} font
|
|
@code{FooBar} from the font family @code{Foo}:
|
|
|
|
@Example
|
|
.sty \n[.fp] Bar
|
|
.fam Foo
|
|
@result{} warning: can't find font `FooR'
|
|
@endExample
|
|
|
|
@noindent
|
|
The default font position at start-up is@w{ }1; for the
|
|
@sc{PostScript} device, this is associated with style @samp{R}, so
|
|
@code{gtroff} tries to open @code{FooR}.
|
|
|
|
A solution to this problem is to use a dummy font like the following:
|
|
|
|
@Example
|
|
.fp 0 dummy TR \" set up dummy font at position 0
|
|
.sty \n[.fp] Bar \" register style `Bar'
|
|
.ft 0 \" switch to font at position 0
|
|
.fam Foo \" activate family `Foo'
|
|
.ft Bar \" switch to font `FooBar'
|
|
@endExample
|
|
|
|
@xref{Font Positions}.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Font Positions, Using Symbols, Font Families, Fonts
|
|
@subsection Font Positions
|
|
@cindex font positions
|
|
@cindex positions, font
|
|
|
|
For the sake of old phototypesetters and compatibility with old versions
|
|
of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
|
|
on which various fonts are mounted.
|
|
|
|
@Defreq {fp, pos font [@Var{external-name}]}
|
|
@Defregx {.f}
|
|
@Defregx {.fp}
|
|
Mount font @var{font} at position @var{pos} (which must be a
|
|
non-negative integer). This numeric position can then be referred to
|
|
with font changing commands. When @code{gtroff} starts it is using
|
|
font position@w{ }1 (which must exist; position@w{ }0 is unused
|
|
usually at start-up).
|
|
|
|
@cindex current font position register
|
|
The current font in use, as a font position, is available in the
|
|
read-only number register @samp{.f}. This can be useful to remember the
|
|
current font for later recall. It is associated with the current
|
|
environment (@pxref{Environments}).
|
|
|
|
@Example
|
|
.nr save-font \n[.f]
|
|
.ft B
|
|
... text text text ...
|
|
.ft \n[save-font]
|
|
@endExample
|
|
|
|
@cindex next free font position register
|
|
The number of the next free font position is available in the read-only
|
|
number register @samp{.fp}. This is useful when mounting a new font,
|
|
like so:
|
|
|
|
@Example
|
|
.fp \n[.fp] NEATOFONT
|
|
@endExample
|
|
|
|
@pindex DESC@r{, and font mounting}
|
|
Fonts not listed in the @file{DESC} file are automatically mounted on
|
|
the next available font position when they are referenced. If a font
|
|
is to be mounted explicitly with the @code{fp} request on an unused
|
|
font position, it should be mounted on the first unused font position,
|
|
which can be found in the @code{.fp} register. Although @code{gtroff}
|
|
does not enforce this strictly, it is not allowed to mount a font at a
|
|
position whose number is much greater (approx.@: 1000 positions) than
|
|
that of any currently used position.
|
|
|
|
The @code{fp} request has an optional third argument. This argument
|
|
gives the external name of the font, which is used for finding the font
|
|
description file. The second argument gives the internal name of the
|
|
font which is used to refer to the font in @code{gtroff} after it has
|
|
been mounted. If there is no third argument then the internal name is
|
|
used as the external name. This feature makes it possible to use
|
|
fonts with long names in compatibility mode.
|
|
@endDefreq
|
|
|
|
Both the @code{ft} request and the @code{\f} escape have alternative
|
|
syntax forms to access font positions.
|
|
|
|
@rqindex sty
|
|
@rqindex fam
|
|
@kindex styles
|
|
@kindex family
|
|
@pindex DESC
|
|
@Defreq {ft, nnn}
|
|
@Defescx {\\f, , n, }
|
|
@Defescx {\\f, @lparen{}, nn, }
|
|
@Defescx {\\f, @lbrack{}, nnn, @rbrack}
|
|
Change the current font position to @var{nnn} (one-digit position
|
|
@var{n}, two-digit position @var{nn}), which must be a non-negative
|
|
integer.
|
|
|
|
If @var{nnn} is associated with a style (as set with the @code{sty}
|
|
request or with the @code{styles} command in the @file{DESC} file), use
|
|
it within the current font family (as set with the @code{fam} request or
|
|
with the @code{family} command in the @file{DESC} file).
|
|
|
|
@Example
|
|
this is font 1
|
|
.ft 2
|
|
this is font 2
|
|
.ft \" switch back to font 1
|
|
.ft 3
|
|
this is font 3
|
|
.ft
|
|
this is font 1 again
|
|
@endExample
|
|
|
|
@xref{Changing Fonts}, for the standard syntax form.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Using Symbols, Special Fonts, Font Positions, Fonts
|
|
@subsection Using Symbols
|
|
@cindex using symbols
|
|
@cindex symbols, using
|
|
|
|
@cindex glyph
|
|
@cindex character
|
|
@cindex ligature
|
|
A @dfn{glyph} is a graphical representation of a @dfn{character}.
|
|
While a character is an abstract entity containing semantic
|
|
information, a glyph is something which can be actually seen on screen
|
|
or paper. It is possible that a character has multiple glyph
|
|
representation forms (for example, the character `A' can be either
|
|
written in a roman or an italic font, yielding two different glyphs);
|
|
sometimes more than one character maps to a single glyph (this is a
|
|
@dfn{ligature} -- the most common is `fi').
|
|
|
|
@c XXX
|
|
|
|
Please note that currently the distinction between glyphs and
|
|
characters in this reference is not clearly carried out. This will be
|
|
improved eventually in the next revision.
|
|
|
|
@cindex symbol
|
|
@cindex special fonts
|
|
@kindex fonts
|
|
@pindex DESC
|
|
@rqindex fspecial
|
|
A @dfn{symbol} is simply a named glyph. Within @code{gtroff}, all
|
|
glyph names of a particular font are defined in its font file. If the
|
|
user requests a glyph not available in this font, @code{gtroff} looks
|
|
up an ordered list of @dfn{special fonts}. By default, the
|
|
@sc{PostScript} output device supports the two special fonts @samp{SS}
|
|
(slanted symbols) and @samp{S} (symbols) (the former is looked up
|
|
before the latter). Other output devices use different names for
|
|
special fonts. Fonts mounted with the @code{fonts} keyword in the
|
|
@file{DESC} file are globally available. To install additional
|
|
special fonts locally (i.e.@: for a particular font), use the
|
|
@code{fspecial} request.
|
|
|
|
@xref{Font Files}, and @ref{Special Fonts}, for more details.
|
|
|
|
@Defesc {\\, @lparen{}, nm, }
|
|
@Defescx {\\, @lbrack{}, name, @rbrack}
|
|
Insert a symbol @var{name} (two-character name @var{nm}). There is no
|
|
special syntax for one-character names -- the natural form
|
|
@samp{\@var{n}} would collide with escapes.
|
|
|
|
If @var{name} is undefined, a warning of type @samp{char} is generated,
|
|
and the escape is ignored. @xref{Debugging}, for information about
|
|
warnings.
|
|
|
|
The list of available symbols is device dependent; see @ref{Glyph Name
|
|
Index} for some of them discussed in this reference.
|
|
|
|
@c XXX list of common symbols
|
|
@endDefesc
|
|
|
|
@Defesc {\\C, ', xxx, '}
|
|
Typeset the character named @var{xxx}. Normally it is more convenient
|
|
to use @code{\[@var{xxx}]}, but @code{\C} has the advantage that it is
|
|
compatible with newer versions of @code{ditroff} and is available in
|
|
compatibility mode.
|
|
@endDefesc
|
|
|
|
@rqindex char
|
|
@cindex unicode
|
|
@Defesc {\\N, ', n, '}
|
|
Typeset the character with code@w{ }@var{n} in the current font (this
|
|
is @strong{not} the input character code). @var{n} can be any
|
|
integer. Most devices only have characters with codes between 0
|
|
and@w{ }255; the Unicode output device uses codes in the range
|
|
0--65535. If the current font does not contain a character with that
|
|
code, special fonts are @emph{not} searched. The @code{\N} escape
|
|
sequence can be conveniently used in conjunction with the @code{char}
|
|
request:
|
|
|
|
@Example
|
|
.char \[phone] \f[ZD]\N'37'
|
|
@endExample
|
|
|
|
@noindent
|
|
@pindex DESC
|
|
@cindex unnamed characters
|
|
@cindex characters, unnamed
|
|
The code of each character is given in the fourth column in the font
|
|
description file after the @code{charset} command. It is possible to
|
|
include unnamed characters in the font description file by using a
|
|
name of @samp{---}; the @code{\N} escape sequence is the only way to
|
|
use these.
|
|
@endDefesc
|
|
|
|
@c XXX should be `glyph', not `character'
|
|
|
|
@cindex character properties
|
|
@cindex properties of characters
|
|
@Defreq {cflags, n c1 c2 @dots{}}
|
|
Each character has certain properties associated with it. These
|
|
properties can be modified with the @code{cflags} request. The first
|
|
argument is the the sum of the desired flags and the remaining
|
|
arguments are the characters to have those properties. It is possible
|
|
to omit the spaces between the characters.
|
|
|
|
@table @code
|
|
@item 1
|
|
@cindex end of sentence characters
|
|
@cindex characters, end of sentence
|
|
the character ends sentences (initially characters @samp{.?!} have this
|
|
property)
|
|
|
|
@item 2
|
|
@cindex hyphenating characters
|
|
@cindex characters, hyphenation
|
|
lines can be broken before the character (initially no characters have
|
|
this property)
|
|
|
|
@item 4
|
|
@glindex hy
|
|
@glindex em
|
|
lines can be broken after the character (initially the characters
|
|
@samp{-\(hy\(em} have this property)
|
|
|
|
@item 8
|
|
@cindex overlapping characters
|
|
@cindex characters, overlapping
|
|
@glindex ul
|
|
@glindex rn
|
|
@glindex ru
|
|
the character overlaps horizontally (initially the characters
|
|
@samp{\(ul\(rn\(ru} have this property)
|
|
|
|
@item 16
|
|
@glindex br
|
|
the character overlaps vertically (initially character @samp{\(br} has
|
|
this property)
|
|
|
|
@item 32
|
|
@cindex transparent characters
|
|
@cindex character, transparent
|
|
@cindex '
|
|
@cindex "
|
|
@cindex ]
|
|
@cindex )
|
|
@cindex *
|
|
@glindex dg
|
|
@glindex rq
|
|
an end of sentence character followed by any number of characters with
|
|
this property is treated as the end of a sentence if followed by a
|
|
newline or two spaces; in other words the character is
|
|
@dfn{transparent} for the purposes of end of sentence recognition --
|
|
this is the same as having a zero space factor in @TeX{} (initially
|
|
characters @samp{"')]*\(dg\(rq} have this property).
|
|
@end table
|
|
@endDefreq
|
|
|
|
@cindex defining characters
|
|
@cindex characters, defining
|
|
@cindex creating new characters
|
|
@cindex escape character
|
|
@cindex character, escape
|
|
@rqindex tr
|
|
@rqindex cp
|
|
@rqindex rc
|
|
@rqindex lc
|
|
@esindex \l
|
|
@esindex \L
|
|
@esindex \&
|
|
@esindex \e
|
|
@rqindex hcode
|
|
@Defreq {char, c [@Var{string}]}
|
|
Define a new character@w{ }@var{c} to be @var{string} (which can be
|
|
empty). Every time character@w{ }@var{c} needs to be printed,
|
|
@var{string} is processed in a temporary environment and the result is
|
|
wrapped up into a single object. Compatibility mode is turned off and
|
|
the escape character is set to @samp{\} while @var{string} is being
|
|
processed. Any emboldening, constant spacing or track kerning is
|
|
applied to this object rather than to individual characters in
|
|
@var{string}. A character defined by this request can be used just
|
|
like a normal character provided by the output device. In particular,
|
|
other characters can be translated to it with the @code{tr} request;
|
|
it can be made the leader character by the @code{lc} request; repeated
|
|
patterns can be drawn with the character using the @code{\l} and
|
|
@code{\L} escape sequences; words containing the character can be
|
|
hyphenated correctly, if the @code{hcode} request is used to give the
|
|
character a hyphenation code. There is a special anti-recursion
|
|
feature: Use of character within the character's definition is handled
|
|
like normal characters not defined with @code{char}.
|
|
@endDefreq
|
|
|
|
@cindex removing character definition
|
|
@cindex character, removing definition
|
|
@Defreq {rchar, c1 c2 @dots{}}
|
|
Remove the definitions of characters @var{c1}, @var{c2},@w{
|
|
}@enddots{} This undoes the effect of a @code{char} request.
|
|
|
|
It is possible to omit the whitespace between arguments.
|
|
@endDefreq
|
|
|
|
@xref{Special Characters}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Special Fonts, Artificial Fonts, Using Symbols, Fonts
|
|
@subsection Special Fonts
|
|
@cindex special fonts
|
|
@cindex fonts, special
|
|
|
|
@c XXX
|
|
|
|
To be written.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts
|
|
@subsection Artificial Fonts
|
|
@cindex artificial fonts
|
|
@cindex fonts, artificial
|
|
|
|
There are a number of requests for artificially creating fonts. These
|
|
are largely vestiges of the days when output devices did not have a
|
|
wide variety of fonts, and when @code{nroff} and @code{troff} were
|
|
separate programs. These are no longer necessary in GNU
|
|
@code{troff}. Nevertheless, they are supported.
|
|
|
|
@cindex underlining
|
|
@Defreq {ul, [@Var{lines}]}
|
|
The @code{ul} request normally underlines subsequent lines if a tty
|
|
output device is used. Otherwise, the lines are printed in italics
|
|
(only the term `underlined' is used in the following). The single
|
|
argument is the number of input lines to be underlined; with no
|
|
argument, the next line is underlined. If @var{lines} is zero or
|
|
negative, stop the effects of @code{ul} (if it was active). Requests
|
|
and empty lines do not count for computing the number of underlined
|
|
input lines, even if they produce some output like @code{tl}. Lines
|
|
inserted by macros (e.g.@: invoked by a trap) do count.
|
|
|
|
At the beginning of @code{ul}, the current font is stored and the
|
|
underline font is activated. Within the span of a @code{ul} request,
|
|
it is possible to change fonts, but after the last line affected by
|
|
@code{ul} the saved font is restored.
|
|
|
|
@cindex underline font
|
|
@cindex font, for underlining
|
|
@rqindex uf
|
|
This command is associated with the current environment. The
|
|
underline font can be changed with the @code{uf} request.
|
|
|
|
@c XXX @xref should be changed to grotty
|
|
|
|
@xref{Troff and Nroff Mode}, for a discussion how underlining is
|
|
implemented in for tty output devices, and which problems can arise.
|
|
|
|
The @code{ul} request does not underline spaces.
|
|
@endDefreq
|
|
|
|
@cindex continuous underlining
|
|
@cindex underlining, continuous
|
|
@Defreq {cu, [@Var{lines}]}
|
|
The @code{cu} request is similar to @code{ul} but underlines spaces as
|
|
well (if a tty output device is used).
|
|
@endDefreq
|
|
|
|
@cindex underline font
|
|
@cindex font for underlining
|
|
@rqindex ul
|
|
@rqindex cu
|
|
@Defreq {uf, font}
|
|
Set the underline font (globally) used by @code{ul} and @code{cu}. By
|
|
default, this is the font at position@w{ }2. @var{font} can be either
|
|
a non-negative font position or the name of a font.
|
|
@endDefreq
|
|
|
|
@cindex imitating bold face
|
|
@cindex bold face, imitating
|
|
@Defreq {bd, font [@Var{offset}]}
|
|
@Defreqx {bd, font1 font2 [@Var{offset}]}
|
|
@Defregx {.b}
|
|
Artificially create a bold font by printing each character twice,
|
|
slightly offset.
|
|
|
|
Two syntax forms are available.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
Imitate a bold font unconditionally. The first argument specifies the
|
|
font to embolden, and the second is the number of basic units, minus
|
|
one, by which the two characters is offset. If the second argument is
|
|
missing, emboldening is turned off.
|
|
|
|
@var{font} can be either a non-negative font position or the name of a
|
|
font.
|
|
|
|
@var{offset} is available in the @code{.b} read-only register if a
|
|
special font is active; in the @code{bd} request, its default unit is
|
|
@samp{u}.
|
|
|
|
@rqindex fspecial
|
|
@kindex special
|
|
@cindex embolding of special fonts
|
|
@cindex special fonts, emboldening
|
|
@item
|
|
Imitate a bold form conditionally. Embolden @var{font1} by
|
|
@var{offset} only if font @var{font2} is the current font. This
|
|
command can be issued repeatedly to set up different emboldening
|
|
values for different current fonts. If the second argument is
|
|
missing, emboldening is turned off for this particular current font.
|
|
|
|
This affects special fonts only (either set up with the @code{special}
|
|
command in font files or with the @code{fspecial} request).
|
|
@end itemize
|
|
@endDefreq
|
|
|
|
@cindex constant character space mode
|
|
@cindex mode for constant character space
|
|
@cindex character, constant space
|
|
@rqindex ps
|
|
@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
|
|
Switch to and from constant character space mode. If activated, the
|
|
width of every character is @math{@var{width}/36} ems. The em size is
|
|
given absolutely by @var{em-size}; if this argument is missing, the em
|
|
value is taken from the current font size (as set with the @code{ps}
|
|
request) when the font is effectively in use. Without second and
|
|
third argument, constant character space mode is deactivated.
|
|
|
|
Default unit for @var{em-size} is @samp{z}; @var{width} is an integer.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Ligatures and Kerning, , Artificial Fonts, Fonts
|
|
@subsection Ligatures and Kerning
|
|
@cindex ligatures and kerning
|
|
@cindex kerning and ligatures
|
|
|
|
Ligatures are groups of characters that are run together. For
|
|
example, the letters `f' and `i' can form a ligature `fi' as in the
|
|
word `file'. This produces a cleaner look (albeit subtle) to the
|
|
printed output. Usually, ligatures are not available in fonts for tty
|
|
output devices.
|
|
|
|
Most @sc{PostScript} fonts support the fi and fl ligatures. The C/A/T
|
|
typesetter that was the target of AT&T @code{troff} also supported
|
|
`ff', `ffi', and `ffl' ligatures. Advanced typesetters or `expert'
|
|
fonts may include ligatures for `ft' and `ct', although GNU
|
|
@code{troff} does not support these (yet).
|
|
|
|
@cindex ligatures enabled register
|
|
@Defreq {lg, [@Var{flag}]}
|
|
@Defregx {.lg}
|
|
The ligature mechanism can be switched on or off with the @code{lg}
|
|
request; if the parameter is non-zero or missing, ligatures are
|
|
enabled, otherwise disabled. Default is on. The current ligature
|
|
mode can be found in the read-only number register @code{.lg} (set to
|
|
1 or@w{ }2 if ligatures are enabled, 0@w{ }otherwise).
|
|
|
|
Setting the ligature mode to@w{ }2 enables the two-character ligatures
|
|
(fi, fl, and ff) and disables the three-character ligatures (ffi and
|
|
ffl).
|
|
@endDefreq
|
|
|
|
@dfn{Pairwise kerning} is another subtle typesetting mechanism that
|
|
modifies the distance between a character pair to improve readability.
|
|
In most cases (but not always) the distance is decreased.
|
|
@ifnotinfo
|
|
For example, compare the combination of the letters `V' and `A'. With
|
|
kerning, `VA' is printed. Without kerning it appears as `V@w{}A'.
|
|
@end ifnotinfo
|
|
Typewriter-like fonts and fonts for terminals where all characters
|
|
have the same width don't use kerning.
|
|
|
|
@cindex kerning enabled register
|
|
@Defreq {kern, [@Var{flag}]}
|
|
@Defregx {.kern}
|
|
Kerning can be activated with the @code{kern} request. If the
|
|
parameter is non-zero or missing, enable pairwise kerning, otherwise
|
|
disable it. The read-only number register @code{.kern} is set to@w{
|
|
}1 if pairwise kerning is enabled, 0@w{ }otherwise.
|
|
|
|
@cindex zero width space character
|
|
@cindex character, zero width space
|
|
@cindex space character, zero width
|
|
If the font description file contains pairwise kerning information,
|
|
characters from that font are kerned. Kerning between two characters
|
|
can be inhibited by placing @code{\&} between them: @samp{V\&A}.
|
|
|
|
@xref{Font File Format}.
|
|
@endDefreq
|
|
|
|
@cindex track kerning
|
|
@cindex kerning, track
|
|
@dfn{Track kerning} expands or reduces the space between characters.
|
|
This can be handy, for example, if you need to squeeze a long word
|
|
onto a single line or spread some text to fill a narrow column. It
|
|
must be used with great care since it is usually considered bad
|
|
typography if the reader notices the effect.
|
|
|
|
@Defreq {tkf, f s1 n1 s2 n2}
|
|
Enable track kerning for font@w{ }@var{f}. If the current font is@w{
|
|
}@var{f} the width of every character is increased by an amount
|
|
between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
|
|
the current point size is less than or equal to @var{s1} the width is
|
|
increased by @var{n1}; if it is greater than or equal to @var{s2} the
|
|
width is increased by @var{n2}; if the point size is greater than or
|
|
equal to @var{s1} and less than or equal to @var{s2} the increase in
|
|
width is a linear function of the point size.
|
|
|
|
The default unit is @samp{z} for @var{s1} and @var{s2}, @samp{p} for
|
|
@var{n1} and @var{n2}.
|
|
@endDefreq
|
|
|
|
Sometimes, when typesetting letters of different fonts, more or less
|
|
space at such boundaries are needed. There are two escapes to help
|
|
with this.
|
|
|
|
@cindex italic correction
|
|
@cindex correction, italic
|
|
@cindex correction between italic and roman character
|
|
@cindex roman character, correction after italic character
|
|
@cindex italic character, correction before roman character
|
|
@Defesc {\\/, , , }
|
|
Increase the width of the preceding character so that the spacing
|
|
between that character and the following character is correct if the
|
|
following character is a roman character. For example, if an
|
|
italic@w{ }@code{f} is immediately followed by a roman right
|
|
parenthesis, then in many fonts the top right portion of the @code{f}
|
|
overlaps the top left of the right parenthesis. Use this escape
|
|
sequence whenever an italic character is immediately followed by a
|
|
roman character without any intervening space. This small amount of
|
|
space is also called @dfn{italic correction}.
|
|
|
|
@iftex
|
|
@example
|
|
@group
|
|
\f[I]f\f[R])
|
|
@result{} {@it f}@r{)}
|
|
\f[I]f\/\f[R])
|
|
@result{} @i{f}@r{)}
|
|
@end group
|
|
@end example
|
|
@end iftex
|
|
@endDefesc
|
|
|
|
@cindex left italic correction
|
|
@cindex correction, left italic
|
|
@cindex roman character, correction before italic character
|
|
@cindex italic character, correction after roman character
|
|
@Defesc {\\\,, , , }
|
|
Modify the spacing of the following character so that the spacing
|
|
between that character and the preceding character is correct if the
|
|
preceding character is a roman character. Use this escape sequence
|
|
whenever a roman character is immediately followed by an italic
|
|
character without any intervening space. In analogy to above, this
|
|
space could be called @dfn{left italic correction}, but this term
|
|
isn't used widely.
|
|
|
|
@iftex
|
|
@example
|
|
@group
|
|
q\f[I]f
|
|
@result{} @r{q}@i{f}
|
|
q\,\f[I]f
|
|
@result{} @r{q}@math{@ptexcomma}@i{f}
|
|
@end group
|
|
@end example
|
|
@end iftex
|
|
@endDefesc
|
|
|
|
@Defesc {\\&, , , }
|
|
Insert a zero-width character, which is invisible. Its intended use
|
|
is to stop interaction of a character with its surrounding.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
It prevents the insertion of extra space after an end of sentence
|
|
character.
|
|
|
|
@Example
|
|
Test.
|
|
Test.
|
|
@result{} Test. Test.
|
|
Test.\&
|
|
Test.
|
|
@result{} Test. Test.
|
|
@endExample
|
|
|
|
@item
|
|
It prevents interpretation of a control character at the beginning of
|
|
an input line.
|
|
|
|
@Example
|
|
.Test
|
|
@result{} warning: `Test' not defined
|
|
\&.Test
|
|
@result{} .Test
|
|
@endExample
|
|
|
|
@item
|
|
It prevents kerning between two characters.
|
|
|
|
@ifnotinfo
|
|
@example
|
|
@group
|
|
VA
|
|
@result{} @r{VA}
|
|
V\&A
|
|
@result{} @r{V@w{}A}
|
|
@end group
|
|
@end example
|
|
@end ifnotinfo
|
|
|
|
@item
|
|
It is needed to map an arbitrary character to nothing in the @code{tr}
|
|
request (@pxref{Character Translations}).
|
|
@end itemize
|
|
@endDefesc
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Sizes, Strings, Fonts, gtroff Reference
|
|
@section Sizes
|
|
@cindex sizes
|
|
|
|
@cindex baseline
|
|
@cindex type size
|
|
@cindex size of type
|
|
@cindex vertical spacing
|
|
@cindex spacing, vertical
|
|
@code{gtroff} uses two dimensions with each line of text, type size
|
|
and vertical spacing. The @dfn{type size} is approximately the height
|
|
of the tallest character.@footnote{This is usually the parenthesis.
|
|
Note that in most cases the real dimensions of the glyphs in a font
|
|
are @emph{not} related to its type size! For example, the standard
|
|
@sc{PostScript} font families `Times Roman', `Helvetica', and
|
|
`Courier' can't be used together at 10@dmn{pt}; to get acceptable
|
|
output, the size of `Helvetica' has to be reduced by one point, and
|
|
the size of `Courier' must be increased by one point.} @dfn{Vertical
|
|
spacing} is the amount of space @code{gtroff} allows for a line of
|
|
text; normally, this is about 20%@w{ }larger than the current type
|
|
size. Ratios smaller than this can result in hard-to-read text;
|
|
larger than this, it spreads the text out more vertically (useful for
|
|
term papers). By default, @code{gtroff} uses 10@w{ }point type on
|
|
12@w{ }point spacing.
|
|
|
|
@cindex leading
|
|
The difference between type size and vertical spacing is known, by
|
|
typesetters, as @dfn{leading}.
|
|
|
|
@menu
|
|
* Changing Type Sizes::
|
|
* Fractional Type Sizes::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
|
|
@subsection Changing Type Sizes
|
|
@cindex changing type sizes
|
|
@cindex type sizes, changing
|
|
|
|
@Defreq {ps, [@Var{size}]}
|
|
@Defreqx {ps, @t{+}@Var{size}}
|
|
@Defreqx {ps, @t{-}@Var{size}}
|
|
@Defescx {\\s, , size, }
|
|
@Defregx {.s}
|
|
Use the @code{ps} request or the @code{\s} escape to change (increase,
|
|
decrease) the type size (in points). Specify @var{size} as either an
|
|
absolute point size, or as a relative change from the current size.
|
|
The size@w{ }0, or no argument, goes back to the previous size.
|
|
|
|
Default unit of @code{size} is @samp{z}. If @code{size} is zero or
|
|
negative, it is set to 1@dmn{u}.
|
|
|
|
The read-only number register @code{.s} returns the point size in
|
|
points as a decimal fraction. This is a string. To get the point
|
|
size in scaled points, use the @code{.ps} register instead.
|
|
|
|
@code{.s} is associated with the current environment
|
|
(@pxref{Environments}).
|
|
|
|
@Example
|
|
snap, snap,
|
|
.ps +2
|
|
grin, grin,
|
|
.ps +2
|
|
wink, wink, \s+2nudge, nudge,\s+8 say no more!
|
|
.ps 10
|
|
@endExample
|
|
|
|
The @code{\s} escape may be called in a variety of ways. Much like
|
|
other escapes there must be a way to determine where the argument ends
|
|
and the text begins. Any of the following forms are valid:
|
|
|
|
@table @code
|
|
@item \s@var{n}
|
|
Set the point size to @var{n}@w{ }points. @var{n}@w{ }must be either
|
|
0 or in the range 4 to@w{ }39.
|
|
|
|
@item \s+@var{n}
|
|
@itemx \s-@var{n}
|
|
Increase or decrease the point size by @var{n}@w{ }points. @var{n}@w{
|
|
}must be exactly one digit.
|
|
|
|
@item \s(@var{nn}
|
|
Set the point size to @var{nn}@w{ }points. @var{nn} must be exactly
|
|
two digits.
|
|
|
|
@item \s+(@var{nn}
|
|
@itemx \s-(@var{nn}
|
|
@itemx \s(+@var{nn}
|
|
@itemx \s(-@var{nn}
|
|
Increase or decrease the point size by @var{nn}@w{ }points. @var{nn}
|
|
must be exactly two digits.
|
|
@end table
|
|
|
|
@xref{Fractional Type Sizes}, for yet another syntactical form of
|
|
using the @code{\s} escape.
|
|
|
|
Some devices may only have certain permissible sizes, in which case
|
|
@code{gtroff} rounds to the nearest permissible size.
|
|
@endDefreq
|
|
|
|
@cindex current type size register
|
|
@cindex current vertical spacing register
|
|
@Defreq {vs, [@Var{space}]}
|
|
@Defreqx {vs, @t{+}@Var{space}}
|
|
@Defreqx {vs, @t{-}@Var{space}}
|
|
@Defregx {.v}
|
|
Change (increase, decrease) the vertical spacing by @var{space}. The
|
|
default unit is @samp{p}.
|
|
|
|
If @code{vs} is called without an argument, the vertical spacing is
|
|
reset to the previous value before the last call to @code{vs}.
|
|
|
|
@vindex .V
|
|
@code{gtroff} creates a warning of type @samp{range} if @var{space} is
|
|
zero or negative; the vertical spacing is then set to the vertical
|
|
resolution (as given in the @code{.V} register).
|
|
|
|
The read-only number register @code{.v} contains the current vertical
|
|
spacing; it is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreq
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... .sz macro example?? ...
|
|
@endExample
|
|
@end ignore
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Fractional Type Sizes, , Changing Type Sizes, Sizes
|
|
@subsection Fractional Type Sizes
|
|
@cindex fractional type sizes
|
|
@cindex type sizes, fractional
|
|
|
|
@cindex @code{s} unit
|
|
@cindex unit, @code{s}
|
|
@cindex @code{z} unit
|
|
@cindex unit, @code{z}
|
|
@rqindex ps
|
|
@rqindex cs
|
|
@rqindex tkf
|
|
@esindex \H
|
|
@esindex \s
|
|
A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points,
|
|
where @var{sizescale} is specified in the @file{DESC} file (1@w{ }by
|
|
default). There is a new scale indicator @samp{z} which has the
|
|
effect of multiplying by @var{sizescale}. Requests and escape
|
|
sequences in @code{gtroff} interpret arguments that represent a point
|
|
size as being in units of scaled points, but they evaluate each such
|
|
argument using a default scale indicator of @samp{z}. Arguments
|
|
treated in this way are the argument to the @code{ps} request, the
|
|
third argument to the @code{cs} request, the second and fourth
|
|
arguments to the @code{tkf} request, the argument to the @code{\H}
|
|
escape sequence, and those variants of the @code{\s} escape sequence
|
|
that take a numeric expression as their argument (see below).
|
|
|
|
For example, suppose @var{sizescale} is@w{ }1000; then a scaled point
|
|
is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
|
|
equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
|
|
10250@w{ }scaled points, which is equal to 10.25@w{ }points.
|
|
|
|
@code{gtroff} disallows the use of the @samp{z} scale indicator in
|
|
instances where it would make no sense, such as a numeric
|
|
expression whose default scale indicator was neither @samp{u} nor
|
|
@samp{z}. Similarly it would make
|
|
no sense to use a scaling indicator other than @samp{z} or @samp{u} in a
|
|
numeric expression whose default scale indicator was @samp{z}, and so
|
|
@code{gtroff} disallows this as well.
|
|
|
|
There is also new scale indicator @samp{s} which multiplies by the
|
|
number of units in a scaled point. So, for example, @samp{\n[.ps]s} is
|
|
equal to @samp{1m}. Be sure not to confuse the @samp{s} and @samp{z}
|
|
scale indicators.
|
|
|
|
@vindex .s
|
|
@Defreg {.ps}
|
|
A read-only number register returning the point size in scaled points.
|
|
|
|
@code{.ps} is associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreg
|
|
|
|
@cindex last-requested point size register
|
|
@cindex point size, last-requested
|
|
@vindex .ps
|
|
@vindex .s
|
|
@Defreg {.psr}
|
|
@Defregx {.sr}
|
|
The last-requested point size in scaled points is contained in the
|
|
@code{.psr} read-only number register. The last requested point size
|
|
in points as a decimal fraction can be found in @code{.sr}. This is a
|
|
string-valued read-only number register.
|
|
|
|
Note that the requested point sizes are device-independent, whereas
|
|
the values returned by the @code{.ps} and @code{.s} registers are not.
|
|
For example, if a point size of 11@dmn{pt} is requested for a DVI
|
|
device, 10.95@dmn{pt} are actually used (as specified in the
|
|
@file{DESC} file).
|
|
|
|
Both registers are associated with the current environment
|
|
(@pxref{Environments}).
|
|
@endDefreg
|
|
|
|
The @code{\s} escape has the following syntax for working with
|
|
fractional type sizes:
|
|
|
|
@table @code
|
|
@item \s[@var{n}]
|
|
@itemx \s'@var{n}'
|
|
Set the point size to @var{n} scaled points; @var{n}@w{ }is a numeric
|
|
expression with a default scale indicator of @samp{z}.
|
|
|
|
@item \s[+@var{n}]
|
|
@itemx \s[-@var{n}]
|
|
@itemx \s+[@var{n}]
|
|
@itemx \s-[@var{n}]
|
|
@itemx \s'+@var{n}'
|
|
@itemx \s'-@var{n}'
|
|
@itemx \s+'@var{n}'
|
|
@itemx \s-'@var{n}'
|
|
Increase or or decrease the point size by @var{n} scaled points;
|
|
@var{n} is a numeric expression with a default scale indicator of
|
|
@samp{z}.
|
|
@end table
|
|
|
|
@xref{Font Files}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Strings, Conditionals and Loops, Sizes, gtroff Reference
|
|
@section Strings
|
|
@cindex strings
|
|
|
|
@code{gtroff} has string variables, which are entirely for user
|
|
convenience (i.e.@: there are no built-in strings exept @code{.T}, but
|
|
even this is a read-write string variable).
|
|
|
|
@cindex string interpolation
|
|
@cindex string expansion
|
|
@cindex interpolation of strings
|
|
@cindex expansion of strings
|
|
@Defreq {ds, name [@Var{string}]}
|
|
@Defescx {\\*, , n, }
|
|
@Defescx {\\*, @lparen{}, nm, }
|
|
@Defescx {\\*, @lbrack{}, name, @rbrack{}}
|
|
Define and access a string variable @var{name} (one-character name
|
|
@var{n}, two-character name @var{nm}). If @var{name} already exists,
|
|
@code{ds} overwrites the previous definition.
|
|
|
|
Example:
|
|
|
|
@Example
|
|
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d
|
|
.
|
|
The \*(UX Operating System
|
|
@endExample
|
|
|
|
The @code{\*} escape @dfn{interpolates} (expands in-place) a
|
|
previously-defined string variable. To be more precise, the stored
|
|
string is pushed onto the input stack which is then parsed by
|
|
@code{gtroff}. Similar to number registers, it is possible to nest
|
|
strings, i.e. a string variables can be called within string
|
|
variables.
|
|
|
|
If the string named by the @code{\*} does not exist, it is defined as
|
|
empty, and a warning of type @samp{mac} is emitted (see
|
|
@ref{Debugging}, for more details).
|
|
|
|
@cindex comments, with @code{ds}
|
|
@strong{Caution:} Unlike other requests, the second argument to the
|
|
@code{ds} request takes up the entire line including trailing spaces.
|
|
This means that comments on a line with such a request can introduce
|
|
unwanted space into a string.
|
|
|
|
@Example
|
|
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
|
|
@endExample
|
|
|
|
@noindent
|
|
Instead the comment should be put on another line or have the comment
|
|
escape adjacent with the end of the string.
|
|
|
|
@Example
|
|
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
|
|
@endExample
|
|
|
|
@cindex trailing quotes
|
|
@cindex quotes, trailing
|
|
@cindex leading spaces with @code{ds}
|
|
@cindex spaces with @code{ds}
|
|
To produce leading space the string can be started with a double
|
|
quote. No trailing quote is needed; in fact, any trailing quote is
|
|
included in your string.
|
|
|
|
@Example
|
|
.ds sign " Yours in a white wine sauce,
|
|
@endExample
|
|
|
|
@esindex \@key{RET}
|
|
@cindex multi-line strings
|
|
@cindex strings, multi-line
|
|
@cindex newline character in strings, escaping
|
|
@cindex escaping newline characters in strings
|
|
Strings are not limited to a single line of text. A string can span
|
|
several lines by escaping the newlines with a backslash. The
|
|
resulting string is stored @emph{without} the newlines.
|
|
|
|
@Example
|
|
.ds foo lots and lots \
|
|
of text are on these \
|
|
next several lines
|
|
@endExample
|
|
|
|
It is not possible to have real newlines in a string.
|
|
|
|
@cindex name space of macros and strings
|
|
@cindex macros, shared name space with strings
|
|
@cindex strings, shared name space with macros
|
|
Strings, macros, and diversions (and boxes) share the same name space.
|
|
Internally, even the same mechanism is used to store them. This has
|
|
some interesting consequences. For example, it is possible to call a
|
|
macro with string syntax and vice versa.
|
|
|
|
@Example
|
|
.de xxx
|
|
a funny test.
|
|
..
|
|
This is \*[xxx]
|
|
@result{} This is a funny test.
|
|
|
|
.ds yyy a funny test
|
|
This is
|
|
.yyy
|
|
@result{} This is a funny test.
|
|
@endExample
|
|
|
|
Diversions and boxes can be also called with string syntax. It is not
|
|
possible to pass arguments to a macro if called with @code{\*}.
|
|
|
|
Another consequence is that you can copy one-line diversions or boxes
|
|
to a string.
|
|
|
|
@Example
|
|
.di xxx
|
|
a \fItest\fR
|
|
.br
|
|
.di
|
|
.ds yyy This is \*[xxx]\c
|
|
\*[yyy].
|
|
@result{} @r{This is a }@i{test}.
|
|
@endExample
|
|
|
|
@noindent
|
|
As the previous example shows, it is possible to store formatted
|
|
output in strings. The @code{\c} escape prevents the insertion of an
|
|
additional blank line in the output.
|
|
|
|
Copying diversions longer than a single output line produces
|
|
unexpected results.
|
|
|
|
@Example
|
|
.di xxx
|
|
a funny
|
|
.br
|
|
test
|
|
.br
|
|
.di
|
|
.ds yyy This is \*[xxx]\c
|
|
\*[yyy].
|
|
@result{} test This is a funny.
|
|
@endExample
|
|
|
|
Usually, it is not predictable whether a diversion contains one or
|
|
more output lines, so this mechanism should be avoided. With
|
|
@acronym{UNIX} @code{troff}, this was the only solution to strip off a
|
|
final newline from a diversion. Another disadvantage is that the
|
|
spaces in the copied string are already formatted, making them
|
|
unstretchable. This can cause ugly results.
|
|
|
|
@rqindex chop
|
|
@rqindex unformat
|
|
A clean solution to this problem is available in GNU @code{troff},
|
|
using the requests @code{chop} to remove the final newline of a
|
|
diversion, and @code{unformat} to make the horizontal spaces
|
|
stretchable again.
|
|
|
|
@Example
|
|
.box xxx
|
|
a funny
|
|
.br
|
|
test
|
|
.br
|
|
.box
|
|
.chop xxx
|
|
.unformat xxx
|
|
This is \*[xxx].
|
|
@result{} This is a funny test.
|
|
@endExample
|
|
|
|
@xref{Gtroff Internals}, for more information.
|
|
@endDefreq
|
|
|
|
@cindex appending to strings
|
|
@cindex strings, appending
|
|
@Defreq {as, name [@Var{string}]}
|
|
The @code{as} request is similar to @code{ds} but appends @var{string}
|
|
to the string stored as @var{name} instead of redefining it. If
|
|
@var{name} doesn't exist yet, it is created.
|
|
|
|
@Example
|
|
.as sign " with shallots, onions and garlic,
|
|
@endExample
|
|
@endDefreq
|
|
|
|
Rudimentary string manipulation routines are given with the next two
|
|
requests.
|
|
|
|
@cindex substring
|
|
@Defreq {substring, str n1 [@Var{n2}]}
|
|
Replace the string in register@w{ }@var{str} with the substring
|
|
defined by the indices @var{n1} and@w{ }@var{n2}. The first character
|
|
in the string has index one. If @var{n2} is omitted, it is taken to
|
|
be equal to the string's length. If the index value @var{n1} or
|
|
@var{n2} is negative or zero, it is counted from the end of the
|
|
string, going backwards: The last character has index@w{ }0, the
|
|
character before the last character has index@w{ }@minus{}1, etc.
|
|
|
|
@Example
|
|
.ds xxx abcdefgh
|
|
.substring xxx 2 -3
|
|
\*[xxx]
|
|
@result{} bcde
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex length of a string
|
|
@cindex string, length of
|
|
@Defreq {length, reg str}
|
|
Compute the length of @var{str} and returns it in the number
|
|
register@w{ }@var{reg}. If @var{reg} doesn't exist, it is created.
|
|
|
|
@Example
|
|
.ds xxx abcdefgh
|
|
.length yyy xxx
|
|
\n[yyy]
|
|
@result{} 8
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex rename request
|
|
@cindex rename macro
|
|
@cindex rename string
|
|
@Defreq {rn, xx yy}
|
|
Rename the request, macro, or string @var{xx} to @var{yy}.
|
|
@endDefreq
|
|
|
|
@cindex remove request
|
|
@cindex remove macro
|
|
@cindex remove string
|
|
@Defreq {rm, xx}
|
|
Remove the request, macro, or string @var{xx}. @code{gtroff} treats
|
|
subsequent invocations as if the object had never been defined.
|
|
@endDefreq
|
|
|
|
@cindex alias
|
|
@Defreq {als, new old}
|
|
Create an alias named @var{new} for the request, string, macro, or
|
|
diversion object named @var{old}. The new name and the old name are
|
|
exactly equivalent (it is similar to a hard rather than a soft
|
|
link). If @var{old} is undefined, @code{gtroff} generates a warning of
|
|
type @samp{mac} and ignores the request.
|
|
@endDefreq
|
|
|
|
@Defreq {chop, xx}
|
|
Remove (chop) the last character from the macro, string, or diversion
|
|
named @var{xx}. This is useful for removing the newline from the end
|
|
of diversions that are to be interpolated as strings. This command
|
|
can be used repeatedly; see @ref{Gtroff Internals}, for details on
|
|
nodes inserted by @code{gtroff} automatically.
|
|
@endDefreq
|
|
|
|
@xref{Identifiers}, and @ref{Comments}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
|
|
@section Conditionals and Loops
|
|
@cindex conditionals and loops
|
|
@cindex loops and conditionals
|
|
|
|
@menu
|
|
* Operators in Conditionals::
|
|
* if-else::
|
|
* while::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
|
|
@subsection Operators in Conditionals
|
|
|
|
@rqindex if
|
|
@rqindex while
|
|
@cindex @code{if}, operators to use with it
|
|
@cindex @code{while}, operators to use with it
|
|
In @code{if} and @code{while} requests, there are several more
|
|
operators available:
|
|
|
|
@table @code
|
|
@item e
|
|
@itemx o
|
|
True if the current page is even or odd numbered (respectively).
|
|
|
|
@item n
|
|
@rqindex nroff
|
|
True if the document is being processed in nroff mode (i.e., the
|
|
@code{.nroff} command has been issued).
|
|
|
|
@item t
|
|
@rqindex troff
|
|
True if the document is being processed in troff mode (i.e., the
|
|
@code{.troff} command has been issued).
|
|
|
|
@item v
|
|
Always false.
|
|
|
|
@item '@var{xxx}'@var{yyy}'
|
|
True if the string @var{xxx} is equal to the string @var{yyy}. Other
|
|
characters can be used in place of the single quotes; the same set of
|
|
delimiters as for the @code{\D} escape is used (@pxref{Escapes}).
|
|
@code{gtroff} formats the strings before being compared:
|
|
|
|
@Example
|
|
.ie "|"\fR|\fP" \
|
|
true
|
|
.el \
|
|
false
|
|
@result{} true
|
|
@endExample
|
|
|
|
@noindent
|
|
The resulting motions, character sizes, and fonts have to
|
|
match,@footnote{The created output nodes must be identical.
|
|
@xref{Gtroff Internals}.} and not the individual motion, size, and
|
|
font requests. In the previous example, @samp{|} and @samp{\fR|\fP}
|
|
both result in a roman @samp{|} character with the same point size and
|
|
at the same location on the page, so the strings are equal. If
|
|
@samp{.ft@w{ }I} had been added before the @samp{.ie}, the result
|
|
would be ``false'' because (the first) @samp{|} produces an italic
|
|
@samp{|} rather than a roman one.
|
|
|
|
@item r @var{xxx}
|
|
True if there is a number register named @var{xxx}.
|
|
|
|
@item d @var{xxx}
|
|
True if there is a string, macro, diversion, or request named @var{xxx}.
|
|
|
|
@item c @var{ch}
|
|
@rqindex char
|
|
True if there is a character @var{ch} available; @var{ch} is either an
|
|
@acronym{ASCII} character or a special character (@code{\(@var{ch}} or
|
|
@code{\[@var{ch}]}); the condition is also true if @var{ch} has been
|
|
defined by the @code{char} request.
|
|
@end table
|
|
|
|
Note that these operators can't be combined with other operators like
|
|
@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
|
|
between the exclamation mark and the operator) can be used to negate
|
|
the result.
|
|
|
|
@Example
|
|
.nr xxx 1
|
|
.ie !r xxx \
|
|
true
|
|
.el \
|
|
false
|
|
@result{} false
|
|
@endExample
|
|
|
|
A whitespace after @samp{!} always evaluates to zero (this bizarre
|
|
behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
|
|
|
|
@Example
|
|
.nr xxx 1
|
|
.ie ! r xxx \
|
|
true
|
|
.el \
|
|
false
|
|
@result{} r xxx true
|
|
@endExample
|
|
|
|
It is possible to omit the whitespace before the argument to the
|
|
@samp{r}, @samp{d}, and @samp{c} operators.
|
|
|
|
@xref{Expressions}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node if-else, while, Operators in Conditionals, Conditionals and Loops
|
|
@subsection if-else
|
|
@cindex if-else
|
|
|
|
@code{gtroff} has if-then-else constructs like other languages, although
|
|
the formatting can be painful.
|
|
|
|
@Defreq {if, expr anything}
|
|
Evaluate the expression @var{expr}, and executes @var{anything} (the
|
|
remainder of the line) if @var{expr} evaluates to non-zero (true).
|
|
@var{anything} is interpreted as though it was on a line by itself
|
|
(except that leading spaces are swallowed). @xref{Expressions}, for
|
|
more info.
|
|
|
|
@Example
|
|
.nr xxx 1
|
|
.nr yyy 2
|
|
.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
|
|
@result{} true
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@c XXX .nop request
|
|
|
|
@Defreq {ie, expr anything}
|
|
@Defreqx {el, anything}
|
|
Use the @code{ie} and @code{el} requests to write an if-then-else.
|
|
The first request is the `if' part and the latter is the `else' part.
|
|
|
|
@Example
|
|
.ie n .ls 2 \" double spacing in nroff
|
|
.el .ls 1 \" single spacing in troff
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@c this is a bug in makeinfo: you can't have `@{' as an argument
|
|
@c to deffn
|
|
|
|
@esindex \@{
|
|
@esindex \@}
|
|
@c @Defesc {\\@@@{, , , }
|
|
@c @Defescx {\\@@@}, , , }
|
|
In many cases, an if (or if-else) construct needs to execute more than
|
|
one request. This can be done using the @code{\@{} and @code{\@}}
|
|
escapes. The following example shows the possible ways to use these
|
|
escapes (note the position of the opening and closing braces).
|
|
|
|
@Example
|
|
.ie t \@{\
|
|
. ds lq ``
|
|
. ds rq ''
|
|
.\@}
|
|
.el \
|
|
.\@{\
|
|
. ds lq "
|
|
. ds rq "\@}
|
|
@endExample
|
|
@c @endDefesc
|
|
|
|
@xref{Expressions}.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node while, , if-else, Conditionals and Loops
|
|
@subsection while
|
|
@cindex while
|
|
|
|
@code{gtroff} provides a looping construct using the @code{while}
|
|
request, which is used much like the @code{if} (and related) requests.
|
|
|
|
@Defreq {while, expr anything}
|
|
Evaluate the expression @var{expr}, and repeatedly execute
|
|
@var{anything} (the remainder of the line) until @var{expr} evaluates
|
|
to@w{ }0.
|
|
|
|
@Example
|
|
.nr a 0 1
|
|
.while (\na < 9) \@{\
|
|
\n+a,
|
|
.\@}
|
|
\n+a
|
|
@result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
|
@endExample
|
|
|
|
Some remarks.
|
|
|
|
@rqindex de
|
|
@itemize @bullet
|
|
@item
|
|
The body of a @code{while} request is treated like the body of a
|
|
@code{de} request: @code{gtroff} temporarily stores it in a macro
|
|
which is deleted after the loop has been exited. It can considerably
|
|
slow down a macro if the body of the @code{while} request (within the
|
|
macro) is large. Each time the macro is executed, the @code{while}
|
|
body is parsed and stored again as a temporary macro.
|
|
|
|
@Example
|
|
.de xxx
|
|
. nr num 10
|
|
. while (\\n[num] > 0) \@{\
|
|
. \" many lines of code
|
|
. nr num -1
|
|
. \@}
|
|
..
|
|
@endExample
|
|
|
|
@cindex recursive macros
|
|
@cindex macros, recursive
|
|
@noindent
|
|
The traditional and ofter better solution (@acronym{UNIX} @code{troff}
|
|
doesn't have the @code{while} request) is to use a recursive macro
|
|
instead which is parsed only once during its definition.
|
|
|
|
@Example
|
|
.de yyy
|
|
. if (\\n[num] > 0) \@{\
|
|
. \" many lines of code
|
|
. nr num -1
|
|
. yyy
|
|
. \@}
|
|
..
|
|
.
|
|
.de xxx
|
|
. nr num 10
|
|
. yyy
|
|
..
|
|
@endExample
|
|
|
|
@noindent
|
|
Note that the number of available recursion levels is set to@w{ }1000
|
|
(this is a compile-time constant value of @code{gtroff}).
|
|
|
|
@item
|
|
The closing brace of a @code{while} body must end a line.
|
|
|
|
@Example
|
|
.if 1 \@{\
|
|
. nr a 0 1
|
|
. while (\n[a] < 10) \@{\
|
|
. nop \n+[a]
|
|
.\@}\@}
|
|
@result{} unbalanced \@{ \@}
|
|
@endExample
|
|
@end itemize
|
|
@endDefreq
|
|
|
|
@rqindex while
|
|
@cindex @code{break}, in a @code{while} loop
|
|
@cindex @code{continue}, in a @code{while} loop
|
|
@Defreq {break, }
|
|
Break out of a @code{while} loop. Be sure not to confuse this with
|
|
the @code{br} request (causing a line break).
|
|
@endDefreq
|
|
|
|
@Defreq {continue, }
|
|
Finishes the current iteration of a @code{while} loop, immediately
|
|
restarting the next iteration.
|
|
@endDefreq
|
|
|
|
@xref{Expressions}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
|
|
@section Writing Macros
|
|
@cindex writing macros
|
|
@cindex macros, writing
|
|
|
|
A @dfn{macro} is a collection of text and embedded commands which can
|
|
be invoked multiple times. Use macros to define common operations.
|
|
|
|
@Defreq {de, name [@Var{end}]}
|
|
Define a new macro named @var{name}. @code{gtroff} copies subsequent
|
|
lines (starting with the next one) into an internal buffer until it
|
|
encounters the line @samp{..} (two dots). The optional second
|
|
argument to @code{de} changes this to a macro to @samp{.@var{end}}.
|
|
|
|
Note that no leading whitespace is allowed in the line containing the
|
|
ending token (either @samp{..} or the macro @samp{.@var{end}}).
|
|
|
|
Here a small example macro called @samp{P} which causes a break and
|
|
inserts some vertical space. It could be used to separate paragraphs.
|
|
|
|
@Example
|
|
.de P
|
|
. br
|
|
. sp .8v
|
|
..
|
|
@endExample
|
|
|
|
@c XXX add info about macro definitions in macros.
|
|
|
|
@c XXX give example for end macro.
|
|
|
|
@c XXX add info about indirect macro calls:
|
|
@c
|
|
@c .de xxx
|
|
@c from yyy\c
|
|
@c ..
|
|
@c
|
|
@c test \*[xxx] test
|
|
@c => test from yyy test
|
|
|
|
@c XXX info about common identifier pool for strings, macros, and
|
|
@c diversions.
|
|
@endDefreq
|
|
|
|
@cindex appending, to a macro
|
|
@Defreq {am, xx}
|
|
Works similarly to @code{de} except it appends onto the macro named
|
|
@var{xx}. So, to make the previously defined @samp{P} macro actually
|
|
do indented instead of block paragraphs, add the necessary code to the
|
|
existing macro like this:
|
|
|
|
@Example
|
|
.am P
|
|
.ti +5n
|
|
..
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex alias
|
|
@Defreq {als, new old}
|
|
Create an alias named @var{new} for the request, string, macro, or
|
|
diversion object named @var{old}. The new name and the old name are
|
|
exactly equivalent (it is similar to a hard rather than a soft
|
|
link). If @var{old} is undefined, @code{gtroff} generates a warning of
|
|
type @samp{mac} and ignores the request.
|
|
|
|
The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds},
|
|
and @code{as} requests only create a new object if the name
|
|
of the macro, diversion or string diversion is currently
|
|
undefined or if it is defined to be a request; normally
|
|
they modify the value of an existing object.
|
|
@endDefreq
|
|
|
|
@menu
|
|
* Copy-in Mode::
|
|
* Parameters::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
|
|
@subsection Copy-in Mode
|
|
@cindex copy-in mode
|
|
@cindex mode, copy-in
|
|
|
|
@esindex \n
|
|
@esindex \$
|
|
@esindex \*
|
|
@esindex \\
|
|
@esindex \@key{RET}
|
|
@cindex @code{\n}, when reading text for a macro
|
|
@cindex @code{\$}, when reading text for a macro
|
|
@cindex @code{\*}, when reading text for a macro
|
|
@cindex @code{\\}, when reading text for a macro
|
|
@cindex \@key{RET}, when reading text for a macro
|
|
When @code{gtroff} reads in the text for a macro or diversion, it copies
|
|
the text (including request lines, but excluding escapes) into an
|
|
internal buffer. Escapes are converted into an internal form,
|
|
except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and
|
|
@code{\@key{RET}} which are evaluated and inserted into the text where
|
|
the escape was located. This is known as @dfn{copy-in} mode or
|
|
@dfn{copy} mode.
|
|
|
|
What this means is that you can specify when these escapes are to be
|
|
evaluated (either at copy-in time or at the time of use) by insulating
|
|
the escapes with an extra backslash. Compare this to the @code{\def}
|
|
and @code{\edef} commands in @TeX{}.
|
|
|
|
The following example prints the numbers 20 and@w{ }10:
|
|
|
|
@Example
|
|
.nr x 20
|
|
.de y
|
|
.nr x 10
|
|
\&\nx
|
|
\&\\nx
|
|
..
|
|
.y
|
|
@endExample
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Parameters, , Copy-in Mode, Writing Macros
|
|
@subsection Parameters
|
|
@cindex parameters
|
|
|
|
@vindex .$
|
|
The arguments to a macro can be examined using a variety of escapes.
|
|
The number of arguments is available in the @code{.$} number register.
|
|
Any individual argument can be retrieved with one of the following
|
|
escapes:
|
|
|
|
@cindex copy-in mode, and macro arguments
|
|
@Defesc {\\$, n, , }
|
|
@Defescx {\\$, @lparen{}, nn, }
|
|
@Defescx {\\$, @lbrack{}, nnn, @rbrack{}}
|
|
The escapes @code{\$@var{n}}, @code{\$(@var{nn}} and
|
|
@code{\$[@var{nnn}]} retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or
|
|
@var{nnn}@dmn{th} argument. As usual, the first form only accepts a
|
|
single number (larger than zero), the second a two-digit number (larger
|
|
or equal to@w{ }10), and the third any positive integer value (larger
|
|
than zero). Macros can have an unlimited number of arguments. Note
|
|
that due to copy-in mode, use two backslashes on these in actual use to
|
|
prevent interpolation until the macro is actually invoked.
|
|
@endDefesc
|
|
|
|
@Defreq {shift, [@Var{n}]}
|
|
Shifts the arguments 1@w{ }position, or as
|
|
many positions as specified by its argument. After executing this
|
|
request, argument@w{ }@var{i} becomes argument @var{i}-@var{n};
|
|
arguments 1 to@w{ }@var{n} are no longer available. Shifting by
|
|
negative amounts is currently undefined.
|
|
@endDefreq
|
|
|
|
@Defesc {\\$*, , , }
|
|
@Defescx {\\$@@, , , }
|
|
In some cases it is convenient to use all of the arguments at once (for
|
|
example, to pass the arguments along to another macro). The @code{\$*}
|
|
escape concatenates all the arguments separated by spaces. A
|
|
similar escape is @code{\$@@}, which concatenates all the
|
|
arguments with each surrounded by double quotes, and separated by
|
|
spaces.
|
|
@endDefesc
|
|
|
|
@rqindex als
|
|
@cindex @code{als}, use with @code{\$0}
|
|
@Defesc {\\$0, , , }
|
|
The name used to invoke the current macro.
|
|
The @code{als} request can make a macro have more than one name.
|
|
|
|
@Example
|
|
.de vl
|
|
.ie \\n(.$=1 .ds Vl Pre-Release Version
|
|
.el .ds Vl Version \\$3, \\$4.
|
|
..
|
|
@endExample
|
|
|
|
@noindent
|
|
This would be called as
|
|
|
|
@Example
|
|
.vl $Id: groff.texinfo,v 1.77 2001/05/07 13:36:24 wlemb Exp $
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@xref{Request Arguments}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
|
|
@section Page Motions
|
|
@cindex page motions
|
|
@cindex motions, page
|
|
|
|
@cindex @code{sp}, as vertical page motion
|
|
@Defreq {sp, [@Var{len}]}
|
|
Motions up and down the page can be done with the @code{sp} request.
|
|
However, this causes a break so that the actual effect is to move to the
|
|
left margin and then to the specified location.
|
|
@endDefreq
|
|
|
|
@Defreq {mk, [@Var{reg}]}
|
|
@Defreqx {rt, reg}
|
|
The request @code{mk} can be used to mark a location on a page, for
|
|
movement to later. This request takes a register name as an argument in
|
|
which to store the current page location. With no argument it
|
|
stores the location in an internal register. The results of this can be
|
|
used later by the @code{rt} or the @code{sp} request. The @code{rt}
|
|
request returns @emph{upwards} to the location given in the register
|
|
name given as an argument; with no argument it returns to the
|
|
location marked with the @code{mk} request.
|
|
|
|
@c XXX example
|
|
@ignore
|
|
@Example
|
|
... dual column example ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
The following escapes give fine control of movements about the page.
|
|
|
|
@cindex vertical motion
|
|
@cindex motion, vertical
|
|
@Defesc {\\v, ', e, '}
|
|
The @code{\v'@var{e}'} escape enables arbitrary vertical motion from the
|
|
current location on the page. The argument@w{ }@var{e} specifies the
|
|
distance to move; positive is downwards and negative upwards. The
|
|
default unit for this escape @samp{v}. Beware, however, that
|
|
@code{gtroff} continues text processing at the point where the motion
|
|
ends, so you should always balance motions to avoid interference with
|
|
text processing.
|
|
@endDefesc
|
|
|
|
There are some special case escapes for vertical motion.
|
|
|
|
@ftable @code
|
|
@item \r
|
|
move upwards@w{ }1@dmn{v}.
|
|
|
|
@item \u
|
|
move upwards@w{ }.5@dmn{v}.
|
|
|
|
@item \d
|
|
move down@w{ }.5@dmn{v}.
|
|
@end ftable
|
|
|
|
@cindex inserting horizontal space
|
|
@cindex horizontal space
|
|
@cindex space, horizontal
|
|
@Defesc {\\h, ', e, '}
|
|
The @code{\h'@var{e}'} escape provides horizontal motions. The
|
|
expression@w{ }@var{e} indicates how far to move: positive is rightwards
|
|
and negative leftwards.
|
|
@c XXX Is there a default unit for this?
|
|
@endDefesc
|
|
|
|
There are a number of special case escapes for horizontal motion:
|
|
|
|
@ftable @code
|
|
@item \@key{SP}
|
|
An unbreakable and unpaddable (i.e.@: not expanded during filling)
|
|
space. (Note: This is a backslash followed by a space.)
|
|
|
|
@item \~
|
|
An unbreakable space that stretches like a normal inter-word space
|
|
when a line is adjusted.
|
|
|
|
@item \|
|
|
A 1/6@dmn{th} em space. Ignored for tty output devices (rounded to
|
|
zero).
|
|
|
|
@item \^
|
|
A 1/12@dmn{th} em space. Ignored for tty output devices (rounded to
|
|
zero).
|
|
|
|
@item \0
|
|
A space the size of a digit.
|
|
|
|
@item \&
|
|
@cindex zero width space character
|
|
@cindex character, zero width space
|
|
@cindex space character, zero width
|
|
A zero width space.
|
|
|
|
@item \)
|
|
Like @code{\&} except that it behaves like a character declared with the
|
|
@code{cflags} request to be transparent for the purposes of end of
|
|
sentence recognition.
|
|
@end ftable
|
|
|
|
The following string sets the @TeX{} logo:
|
|
|
|
@Example
|
|
.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
|
|
@endExample
|
|
|
|
@cindex width escape
|
|
@cindex escape, width
|
|
@Defesc {\\w, ', text, '}
|
|
Used as @code{\w'@var{text}'},
|
|
returns the width of the specified @var{text} in basic units.
|
|
This allows horizontal movement based on the width of some
|
|
arbitrary text (e.g.@: given as an argument to a macro).
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... strlen example ...
|
|
@endExample
|
|
@end ignore
|
|
|
|
Font changes may occur in @var{text} which don't affect current
|
|
settings.
|
|
|
|
After use, @code{\w} sets several registers:
|
|
|
|
@table @code
|
|
@item st
|
|
@itemx sb
|
|
@vindex st
|
|
@vindex sb
|
|
The highest and lowest point, respectively, in @var{text}.
|
|
|
|
@item rst
|
|
@itemx rsb
|
|
@vindex rst
|
|
@vindex rsb
|
|
Like the @code{st} and @code{sb} registers, but takes account of the
|
|
heights and depths of characters.
|
|
|
|
@item ct
|
|
@vindex ct
|
|
Defines the kinds of characters occurring in @var{text}:
|
|
|
|
@table @asis
|
|
@item 0
|
|
only short characters, no descenders or tall characters.
|
|
|
|
@item 1
|
|
at least one descender.
|
|
|
|
@item 2
|
|
at least one tall character.
|
|
|
|
@item 3
|
|
at least one each of a descender and a tall character.
|
|
@end table
|
|
|
|
@item ssc
|
|
@vindex ssc
|
|
The amount of horizontal space (possibly negative) that should be added
|
|
to the last character before a subscript.
|
|
|
|
@item skw
|
|
@vindex skw
|
|
How far to right of the center of the last character in the @code{\w}
|
|
argument, the center of an accent from a roman font should be placed
|
|
over that character.
|
|
@end table
|
|
@endDefesc
|
|
|
|
@Defesc {\\k, ', x, '}
|
|
Stores the current horizontal position in register @var{x}.
|
|
Use this, for example, to return to the beginning of a string
|
|
for highlighting or other decoration.
|
|
@endDefesc
|
|
|
|
@Defreg {.k}
|
|
A read-only number register containing the current horizontal output
|
|
position.
|
|
@endDefreg
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Drawing Requests, Traps, Page Motions, gtroff Reference
|
|
@section Drawing Requests
|
|
@cindex drawing requests
|
|
@cindex requests for drawing
|
|
|
|
@code{gtroff} provides a number of ways to draw lines and other figures
|
|
on the page. Used in combination with the page motion commands (see
|
|
@ref{Page Motions}, for more info), a wide variety of figures can be
|
|
drawn. However, for complex drawings these operations can be quite
|
|
cumbersome, and it may be wise to use graphic preprocessors like
|
|
@code{gpic} or @code{ggrn}. @xref{gpic}, and @ref{ggrn}, for more
|
|
information.
|
|
|
|
All drawing is done via escapes.
|
|
|
|
@cindex drawing horizontal lines
|
|
@cindex horizontal line, drawing
|
|
@cindex line, horizontal, drawing
|
|
@Defesc {\\l, ', l c, '}
|
|
Draws a line rightwards from the current
|
|
location. The full syntax for this escape is:
|
|
|
|
@Example
|
|
\l'@var{l}@var{c}'
|
|
@endExample
|
|
|
|
@noindent
|
|
where @var{l} is the length of the line to be drawn, starting at the
|
|
current location; positive numbers draw to the right, and negative
|
|
numbers draw towards the left. This can also be specified absolutely
|
|
(i.e.@: with a leading @samp{|}) which draws back to the beginning
|
|
of the line.
|
|
|
|
@cindex underscore character
|
|
@cindex character, underscore
|
|
@cindex line drawing character
|
|
@cindex character for line drawing
|
|
The optional second parameter @var{c} is a character to draw the line
|
|
with. If this second argument is not specified, @code{gtroff} uses
|
|
the underscore character.
|
|
|
|
@cindex zero width space character
|
|
@cindex character, zero width space
|
|
@cindex space character, zero width
|
|
@esindex \&
|
|
To separate the two arguments (to prevent @code{gtroff} from
|
|
interpreting a drawing character as a scaling indicator) use @code{\&}.
|
|
|
|
Here a small useful example:
|
|
|
|
@Example
|
|
.de box
|
|
\(br\\$*\(br\l'|0\(rn'\l'|0\(ul'
|
|
..
|
|
@endExample
|
|
|
|
@opindex |
|
|
@noindent
|
|
Note that this works by outputting a box rule (a vertical line), then
|
|
the text given as an argument and then another box rule. Then the line
|
|
drawing escapes both draw from the current location to the beginning of
|
|
the @emph{input} line.
|
|
@endDefesc
|
|
|
|
@cindex drawing vertical lines
|
|
@cindex vertical line drawing
|
|
@cindex line, vertical, drawing
|
|
@cindex line drawing character
|
|
@cindex character for line drawing
|
|
@cindex box rule character
|
|
@cindex character, box rule
|
|
@Defesc {\\L, ', l c, '}
|
|
Draws vertical lines. Its parameters are
|
|
similar to the @code{\l} escape. The
|
|
movement is downwards for positive values,
|
|
and upwards for negative values. The
|
|
default character is the box rule character. As with the vertical
|
|
motion escapes, text processing blindly continues where the line
|
|
ends.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
...box macro...
|
|
@endExample
|
|
@end ignore
|
|
@endDefesc
|
|
|
|
@Defesc {\\D, ', command arg @dots{}, '}
|
|
The @code{\D} escape provides a variety of drawing functions.
|
|
While the previous escapes work on a character device, these
|
|
escapes do not.
|
|
|
|
@table @code
|
|
@item \D'l @var{dx} @var{dy}'
|
|
Draw a line from the current location to the relative point specified by
|
|
(@var{dx},@var{dy}).
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
...revised box macro...
|
|
@endExample
|
|
@end ignore
|
|
|
|
@item \D'c @var{d}'
|
|
@cindex circle drawing
|
|
@cindex drawing a circle
|
|
Draw a circle with a diameter of @var{d} with the leftmost point at the
|
|
current position.
|
|
|
|
@item \D'C @var{d}'
|
|
Draw a solid circle with the same parameters as an outlined circle.
|
|
|
|
@item \D'e @var{dx} @var{dy}'
|
|
@cindex drawing an ellipse
|
|
@cindex ellipse drawing
|
|
Draw an ellipse with a horizontal diameter of @var{dx} and a vertical
|
|
diameter of @var{dy} with the leftmost point at the current position.
|
|
|
|
@item \D'E @var{dx} @var{dy}'
|
|
Draw a solid ellipse with the same parameters as an outlined ellipse.
|
|
|
|
@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
|
|
@cindex arc drawing
|
|
@cindex drawing an arc
|
|
Draw an arc clockwise from the current location through the two
|
|
specified locations (@var{dx1},@var{dy1}) and (@var{dx2},@var{dy2}).
|
|
|
|
@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
|
|
@cindex drawing a spline
|
|
@cindex spline drawing
|
|
Draw a spline from the current location to (@var{dx1},@var{dy1}) and
|
|
then to (@var{dx2},@var{dy2}), and so on.
|
|
|
|
@item \D'f @var{n}'
|
|
@cindex gray shading
|
|
@cindex shading
|
|
@cindex shades for filling objects
|
|
Set the shade of gray to be used for filling solid objects to@w{
|
|
}@var{n}; @var{n}@w{ }must be an integer between 0 and@w{ }1000, where 0
|
|
corresponds solid white and 1000 to solid black, and values in between
|
|
correspond to intermediate shades of gray. This applies only to solid
|
|
circles, solid ellipses and solid polygons. By default, a level of@w{
|
|
}1000 is used.
|
|
|
|
@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
|
|
@cindex drawing a polygon
|
|
@cindex polygon drawing
|
|
Draw a polygon from the current location to (@var{dx1},@var{dy1}) and
|
|
then to (@var{dx2},@var{dy2}) and so on. When the specified data points
|
|
are exhausted, a line is drawn back to the starting point.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... box example (yes, again)...
|
|
@endExample
|
|
@end ignore
|
|
|
|
@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
|
|
Draw a solid polygon with the same parameters as an outlined polygon.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... shaded box example ...
|
|
@endExample
|
|
@end ignore
|
|
|
|
@item \D't @var{n}'
|
|
@cindex line thickness
|
|
@cindex thickness of lines
|
|
Set the current line thickness to @var{n} machine units. A value of
|
|
zero selects the smallest available line thickness. A negative value
|
|
makes the line thickness proportional to the current point size (this is
|
|
the default behaviour of @code{ditroff}).
|
|
@end table
|
|
@endDefesc
|
|
|
|
@cindex pile, character
|
|
@cindex character pile
|
|
@Defesc {\\b, ', string, '}
|
|
@dfn{Piles} a sequence of characters
|
|
vertically, and centers it vertically on the current line. Use it
|
|
to build large brackets and braces.
|
|
|
|
@Example
|
|
\b'\(lt\(bv\(lk\(bv\(lb'
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@xref{Drawing Functions}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Traps, Diversions, Drawing Requests, gtroff Reference
|
|
@section Traps
|
|
@cindex traps
|
|
|
|
@dfn{Traps} are locations, which, when reached, call a specified
|
|
macro. These traps can occur at a given location on the page, at a
|
|
given location in the current diversion, after a certain number of input
|
|
lines or at the end of input.
|
|
|
|
@menu
|
|
* Page Location Traps::
|
|
* Diversion Traps::
|
|
* Input Line Traps::
|
|
* End-of-input Traps::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Page Location Traps, Diversion Traps, Traps, Traps
|
|
@subsection Page Location Traps
|
|
@cindex page location traps
|
|
@cindex traps, page location
|
|
|
|
@dfn{Page location traps} perform an action when @code{gtroff}
|
|
reaches a certain vertical location on the page. Page location
|
|
traps have a variety of purposes, including:
|
|
|
|
@itemize
|
|
@item
|
|
setting headers and footers
|
|
|
|
@item
|
|
setting body text in multiple columns
|
|
|
|
@item
|
|
setting footnotes
|
|
@end itemize
|
|
|
|
@cindex vertical position trap enable register
|
|
@Defreq {vpt, flag}
|
|
@Defregx {.vpt}
|
|
Enables vertical position traps if @var{flag} is non-zero, or disables
|
|
them otherwise. Vertical position traps are traps set by the @code{wh}
|
|
or @code{dt} requests. Traps set by the @code{it} request are not
|
|
vertical position traps. The parameter that controls whether vertical
|
|
position traps are enabled is global. Initially vertical position traps
|
|
are enabled. The current setting of this is available in the
|
|
@code{.vpt} read-only number register.
|
|
@endDefreq
|
|
|
|
@Defreq {wh, dist macro}
|
|
Sets a page location trap. Positive values for @var{dist} set
|
|
the trap relative to the top of the page; negative values set
|
|
the trap relative to the bottom of the page.
|
|
|
|
@var{macro} is the name of the macro to execute when the
|
|
trap is sprung.
|
|
|
|
@cindex page headers
|
|
@cindex page footers
|
|
@cindex headers
|
|
@cindex footers
|
|
The following is a simple example of how many macro packages
|
|
set headers and footers.
|
|
|
|
@Example
|
|
.de hd \" Page header
|
|
'sp .5i
|
|
.tl 'Title''date'
|
|
'sp .3i
|
|
..
|
|
.de fo \" Page footer
|
|
'sp 1v
|
|
.tl ''%''
|
|
'bp
|
|
..
|
|
.wh 0 hd \" trap at top of the page
|
|
.wh -1i fo \" trap one inch from bottom
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex distance to next trap
|
|
@cindex trap, distance
|
|
@Defreg {.t}
|
|
A read-only number register holding the distance to the next trap.
|
|
@endDefreg
|
|
|
|
@cindex changing trap location
|
|
@cindex trap, changing location
|
|
@Defreq {ch, dist macro}
|
|
Changes the location of a trap.
|
|
The first argument is the name of the macro to be invoked at
|
|
the trap, and the second argument is the new location for the trap
|
|
(note that the parameters are specified the opposite of the @code{.wh} request).
|
|
This is useful for building up footnotes in a diversion to allow more
|
|
space at the bottom of the page for them.
|
|
|
|
@c XXX
|
|
|
|
@ignore
|
|
@Example
|
|
... (simplified) footnote example ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
@Defreg {.ne}
|
|
The read-only number register @code{.ne} contains the amount of space
|
|
that was needed in the last @code{ne} request that caused a trap to be
|
|
sprung. Useful in conjunction with the @code{.trunc} register.
|
|
@xref{Page Control}, for more information.
|
|
@endDefreg
|
|
|
|
@rqindex ne
|
|
@cindex @code{ne}, and the @code{.trunc} register
|
|
@Defreg {.trunc}
|
|
A read-only register containing the amount of vertical space truncated
|
|
by the most recently sprung vertical position trap, or, if the trap was
|
|
sprung by an @code{ne} request, minus the amount of vertical motion
|
|
produced by the @code{ne} request. In other words, at the point a trap
|
|
is sprung, it represents the difference of what the vertical position
|
|
would have been but for the trap, and what the vertical position
|
|
actually is.
|
|
@endDefreg
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
|
|
@subsection Diversion Traps
|
|
@cindex diversion traps
|
|
@cindex traps, diversion
|
|
|
|
@vindex .t
|
|
@cindex @code{.t}, and diversions
|
|
@Defreq {dt, dist macro}
|
|
Sets a trap @emph{within} a diversion.
|
|
@var{dist} is the first argument is the location of the trap
|
|
(identical to the @code{.wh} request)
|
|
and @var{macro} is the name of the macro to be invoked. The
|
|
number register @code{.t} still works within diversions.
|
|
@xref{Diversions}, for more information.
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Input Line Traps, End-of-input Traps, Diversion Traps, Traps
|
|
@subsection Input Line Traps
|
|
@cindex input line traps
|
|
@cindex traps, input line
|
|
|
|
@Defreq {it, n macro}
|
|
Sets an input line trap.
|
|
@var{n} is the number of lines of input which may be read before
|
|
@dfn{springing} the trap, @var{macro} is the macro to be invoked.
|
|
Request lines are not counted as input lines.
|
|
|
|
For example, one possible use is to have a macro which prints the
|
|
next @var{n}@w{ }lines in a bold font.
|
|
|
|
@Example
|
|
.de B
|
|
.it \\$1 B-end
|
|
.ft B
|
|
..
|
|
.de B-end
|
|
.ft R
|
|
..
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node End-of-input Traps, , Input Line Traps, Traps
|
|
@subsection End-of-input Traps
|
|
@cindex end-of-input traps
|
|
@cindex traps, end-of-input
|
|
|
|
@Defreq {em, macro}
|
|
Sets a trap at the end of input. The @var{macro}
|
|
specified is executed after the last line of the
|
|
input file has been processed.
|
|
|
|
For example, if the document had to have a section at the bottom of the
|
|
last page for someone to approve it, the @code{em} request could be
|
|
used.
|
|
|
|
@Example
|
|
.de approval
|
|
.ne 5v
|
|
.sp |(\\n(.t-6v)
|
|
.in +4i
|
|
.lc _
|
|
.br
|
|
Approved:\t\a
|
|
.sp
|
|
Date:\t\t\a
|
|
..
|
|
.em approval
|
|
@endExample
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Diversions, Environments, Traps, gtroff Reference
|
|
@section Diversions
|
|
@cindex diversions
|
|
|
|
In @code{gtroff} it is possible to @dfn{divert} text into a named
|
|
storage area. Due to the similarity to defining macros it is sometimes
|
|
said to be stored in a macro. This is used for saving text for output
|
|
at a later time, which is useful for keeping blocks of text on the same
|
|
page, footnotes, tables of contents and indices.
|
|
|
|
@c XXX describe top-level diversion
|
|
@c XXX index entry for top-level diversion
|
|
|
|
@Defreq {di, macro}
|
|
@Defreqx {da, macro}
|
|
Begins a diversion. Like the @code{de}
|
|
request, it takes an argument of a macro name to divert subsequent text
|
|
into. The @code{da} macro appends to an existing diversion.
|
|
|
|
@code{di} or @code{da} without an argument ends the diversion.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... end-note example ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
@vindex nl
|
|
@vindex .h
|
|
@cindex nested diversions
|
|
@cindex diversion, nested
|
|
@Defreg {.z}
|
|
@Defregx {.d}
|
|
Diversions may be nested. The read-only number register @code{.z}
|
|
contains the name of the current diversion (this is a string-valued
|
|
register). The read-only number register @code{.d} contains the current
|
|
vertical place in the diversion. If not in a diversion it is the same
|
|
as the register @code{nl}.
|
|
@endDefreg
|
|
|
|
@c XXX more info
|
|
|
|
@Defreg {.h}
|
|
The @dfn{high-water mark} on the current page. It corresponds to the
|
|
text baseline of the lowest line on the page. This is a read-only
|
|
register.
|
|
@endDefreg
|
|
|
|
@Defreg {dn}
|
|
@Defregx {dl}
|
|
After completing a diversion, the read-write number registers @code{dn}
|
|
and @code{dl} contain the vertical and horizontal size of the diversion.
|
|
|
|
@example
|
|
@group
|
|
.\" Center text both horizontally & vertically
|
|
.de (c
|
|
.br
|
|
.nf
|
|
.di @@c
|
|
..
|
|
@end group
|
|
@group
|
|
.de )c
|
|
.br
|
|
.di
|
|
.nr @@s (((\\n(.tu-\\n(dnu)/2u)-1v)
|
|
.sp \\n(@@su
|
|
.ce 1000
|
|
.nf
|
|
.@c
|
|
.br
|
|
.ce 0
|
|
.sp \\n(@@su
|
|
.br
|
|
.fi
|
|
.rr @@s
|
|
..
|
|
@end group
|
|
@end example
|
|
@endDefreg
|
|
|
|
@cindex transparent output
|
|
@cindex output, transparent
|
|
@Defesc {\\!, , , }
|
|
@Defescx {\\?, , @Var{anything}, \\?}
|
|
Prevents requests, macros and escapes from being
|
|
interpreted when read into a diversion. This takes the given text
|
|
and @dfn{transparently} embeds it into the diversion. This is useful for
|
|
macros which shouldn't be invoked until the diverted text is actually
|
|
output.
|
|
|
|
@c XXX anything is read in copy mode. (what about \! ??)
|
|
|
|
The @code{\!} escape transparently embeds text up to
|
|
and including the end of the line.
|
|
The @code{\?} escape transparently embeds text until the next
|
|
occurrence of the @code{\?} escape. For example:
|
|
|
|
@Example
|
|
\?@var{anything}\?
|
|
@endExample
|
|
|
|
@noindent
|
|
@var{anything} may not contain newlines; use @code{\!} to embed
|
|
newlines in a diversion. The escape sequence @code{\?} is also
|
|
recognized in copy mode and turned into a single internal code; it is
|
|
this code that terminates anything. Thus the following example
|
|
prints@w{ }4.
|
|
|
|
@Example
|
|
.nr x 1
|
|
.nf
|
|
.di d
|
|
\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
|
|
.di
|
|
.nr x 2
|
|
.di e
|
|
.d
|
|
.di
|
|
.nr x 3
|
|
.di f
|
|
.e
|
|
.di
|
|
.nr x 4
|
|
.f
|
|
@endExample
|
|
@endDefesc
|
|
|
|
@cindex unformatting diversions
|
|
@cindex diversion, unformatting
|
|
@Defreq {asciify, div}
|
|
@dfn{Unformats} the diversion specified by @var{div}
|
|
in such a way that @acronym{ASCII} and space characters that
|
|
were formatted and diverted are treated like ordinary input
|
|
characters when the diversion is reread. It can be also used for gross
|
|
hacks; for example, the following sets register @code{n} to@w{ }1.
|
|
|
|
@Example
|
|
.tr @@.
|
|
.di x
|
|
@@nr n 1
|
|
.br
|
|
.di
|
|
.tr @@@@
|
|
.asciify x
|
|
.x
|
|
@endExample
|
|
|
|
@xref{Copy-in Mode}.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Environments, Suppressing output, Diversions, gtroff Reference
|
|
@section Environments
|
|
@cindex environments
|
|
|
|
It happens frequently that some text should be printed in a certain
|
|
format regardless of what may be in effect at the time, for example, in
|
|
a trap invoked macro to print headers and footers. To solve this
|
|
@code{gtroff} processes text in @dfn{environments}. An
|
|
environment contains most of the parameters that control text
|
|
processing. It is possible to switch amongst these environments; by
|
|
default @code{gtroff} processes text in environment@w{ }0. The
|
|
following is the information kept in an environment.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
font parameters (size, family, style, character height and slant, space
|
|
and sentence space size)
|
|
|
|
@item
|
|
page parameters (line length, title length, vertical spacing,
|
|
line spacing, indentation, line numbering, hyphenation data)
|
|
|
|
@item
|
|
fill and adjust mode
|
|
|
|
@item
|
|
tab stops, tab and leader characters, escape character, no-break and
|
|
hyphen indicators, margin character data
|
|
|
|
@item
|
|
partially collected lines
|
|
@end itemize
|
|
|
|
These environments may be given arbitrary names (see @ref{Identifiers},
|
|
for more info). Old versions of @code{troff} only had environments
|
|
named @samp{0}, @samp{1} and@w{ }@samp{2}.
|
|
|
|
@cindex switch environments
|
|
@cindex current environment number/name register
|
|
@Defreq {ev, env}
|
|
@Defregx {.ev}
|
|
Switches to another environment. The argument @var{env} is the name of
|
|
the environment to switch to. With no argument, @code{gtroff} switches
|
|
back to the previous environment. There is no limit on the number of
|
|
named environments; they are created the first time that they are
|
|
referenced. The @code{.ev} read-only register contains the name or
|
|
number of the current environment. This is a string-valued register.
|
|
|
|
Note that a call to @code{ev} (with argument) pushes the previously
|
|
active environment onto a stack. If, say, environments @samp{foo},
|
|
@samp{bar}, and @samp{zap} are called (in that order), the first
|
|
@code{ev} request without parameter switches back to environment
|
|
@samp{bar} (which is popped off the stack), and a second call
|
|
switches back to environment @samp{foo}.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... page break macro, revised ...
|
|
@endExample
|
|
@end ignore
|
|
|
|
Here is an example:
|
|
|
|
@Example
|
|
.ev footnote-env
|
|
.fam N
|
|
.ps 6
|
|
.vs 8
|
|
.ll -.5i
|
|
.ev
|
|
|
|
...
|
|
|
|
.ev footnote-env
|
|
\(dg Note the large, friendly letters.
|
|
.ev
|
|
@endExample
|
|
@endDefreq
|
|
|
|
@cindex copy environment
|
|
@Defreq {evc, env}
|
|
Copies the environment @var{env} into the current environment.
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Suppressing output, I/O, Environments, gtroff Reference
|
|
@section Suppressing output
|
|
@cindex suppressing output
|
|
|
|
@Defesc {\\O, , num, }
|
|
Disables or enables output depending on the value of @var{num}:
|
|
|
|
@table @samp
|
|
@item \O0
|
|
Disable any ditroff glyphs from being emitted to the device driver.
|
|
|
|
@item \O1
|
|
Enable output of glyphs.
|
|
@end table
|
|
|
|
@vindex opminx
|
|
@vindex opminy
|
|
@vindex opmaxx
|
|
@vindex opmaxy
|
|
@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
|
|
@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
|
|
@xref{Register Index}. These four registers mark the top left and
|
|
bottom right hand corners of a box which encompasses all written glyphs.
|
|
|
|
The following two forms of @code{\O} are specific to @code{grohtml}.
|
|
|
|
@table @samp
|
|
@item \O2
|
|
Disable any ditroff glyphs from being emitted to the device driver. Also
|
|
write out to @code{stderr} the page number and four registers encompassing
|
|
the glyphs previously written since the last call to @code{\O}.
|
|
|
|
@item \O3
|
|
Enable output of glyphs (the default). Also write out to @code{stderr}
|
|
the page number and four registers encompassing the glyphs previously
|
|
written since the last call to @code{\O}.
|
|
@end table
|
|
@endDefesc
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node I/O, Postprocessor Access, Suppressing output, gtroff Reference
|
|
@section I/O
|
|
@cindex i/o
|
|
@cindex input and output requests
|
|
@cindex requests for input and output
|
|
@cindex output and input requests
|
|
|
|
@code{gtroff} has several requests for including files:
|
|
|
|
@cindex including a file
|
|
@cindex file inclusion
|
|
@Defreq {so, file}
|
|
Reads in the specified @var{file} and
|
|
includes it in place of the @code{so} request. This is quite useful for
|
|
large documents, e.g.@: keeping each chapter in a separate file.
|
|
@xref{gsoelim}, for more information.
|
|
@endDefreq
|
|
|
|
@Defreq {mso, file}
|
|
Identical to the @code{so} request except that @code{gtroff}
|
|
searches for the specified
|
|
@var{file} in the same directories as macro files for the
|
|
the @option{-m} command line option. If the file name to be included
|
|
has the form @file{@var{name}.tmac} and it isn't found, @code{mso} tries
|
|
to include @file{tmac.@var{name}} and vice versa.
|
|
@endDefreq
|
|
|
|
@cindex transparent output
|
|
@cindex output, transparent
|
|
@Defreq {cf, file}
|
|
@Defreqx {trf, file}
|
|
Transparently outputs the contents of @var{file}. Each line is output
|
|
as it were preceded by @code{\!}; however, the lines are not subject to
|
|
copy mode interpretation. If the file does not end with a newline, then
|
|
a newline is added. For example, to define a macro@w{ }@code{x}
|
|
containing the contents of file@w{ }@file{f}, use
|
|
|
|
@Example
|
|
.di x
|
|
.trf f
|
|
.di
|
|
@endExample
|
|
|
|
The request @w{@code{.cf @var{filename}}}, when used in a diversion,
|
|
embeds an object in the diversion which, when reread, causes the
|
|
contents of @var{filename} to be transparently copied through to the
|
|
output.
|
|
|
|
In @acronym{UNIX} @code{troff}, the contents of @var{filename}
|
|
is immediately copied through to the output regardless of whether there
|
|
is a current diversion; this behaviour is so anomalous that it must be
|
|
considered a bug. This request causes a line break.
|
|
|
|
@rqindex trf
|
|
With @code{trf}, unlike @code{cf}, the file cannot contain characters
|
|
such as NUL that are not valid @code{gtroff} input characters
|
|
(@pxref{Identifiers}). This request causes a line break.
|
|
@endDefreq
|
|
|
|
@Defreq {nx, }
|
|
Forces @code{gtroff} to continue processing of
|
|
the file specified as an argument.
|
|
@endDefreq
|
|
|
|
@Defreq {rd, }
|
|
The @code{rd} request reads from standard input, and includes what is
|
|
read as though it were part of the input file. Text is read until a
|
|
blank line is encountered.
|
|
@endDefreq
|
|
|
|
@cindex form letters
|
|
@cindex letters, form
|
|
Using the @code{nx} and @code{rd} requests,
|
|
it is easy to set up form letters. The form
|
|
letter template is constructed like this:
|
|
|
|
@Example
|
|
.ce
|
|
\*(td
|
|
.sp 2
|
|
.nf
|
|
.rd
|
|
.sp
|
|
.rd
|
|
.fi
|
|
Body of letter.
|
|
.bp
|
|
.nx repeat.let
|
|
@endExample
|
|
|
|
@rqindex ex
|
|
@noindent
|
|
When this is run, the following file should be redirected in. Note that
|
|
requests included in this file are executed as though they were part of
|
|
the form letter. The last block of input is the @code{ex} requests
|
|
which tells groff to stop processing. If this was not there, groff
|
|
would not know when to stop.
|
|
|
|
@Example
|
|
Trent A. Fisher
|
|
708 NW 19th Av., #202
|
|
Portland, OR 97209
|
|
|
|
Dear Trent,
|
|
|
|
Len Adollar
|
|
4315 Sierra Vista
|
|
San Diego, CA 92103
|
|
|
|
Dear Mr. Adollar,
|
|
|
|
.ex
|
|
@endExample
|
|
|
|
@Defreq {pi, pipe}
|
|
Pipes the output of @code{gtroff} to the shell command(s)
|
|
specified by @var{pipe}. This request must occur before
|
|
@code{gtroff} has a chance to print anything.
|
|
@endDefreq
|
|
|
|
@Defreq {sy, cmds}
|
|
@Defregx {systat}
|
|
In @dfn{unsafe} mode, executes the shell command(s) specified by
|
|
@var{cmds}. The output is not saved anyplace, so it is up to the user
|
|
to do so.
|
|
|
|
@c XXX add info about safer and unsafe mode
|
|
|
|
For example, the following example introduces the current time
|
|
into a document:
|
|
|
|
@cindex time, current
|
|
@cindex current time
|
|
@pindex perl
|
|
@Example
|
|
.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
|
|
(localtime(time))[2,1,0]' > /tmp/x\n[$$]
|
|
.so /tmp/x\n[$$]
|
|
.sy rm /tmp/x\n[$$]
|
|
\nH:\nM:\nS
|
|
@endExample
|
|
|
|
@noindent
|
|
Note that this works by having the @code{perl} script (run by @code{sy})
|
|
print out the @code{nr} requests which set the number registers
|
|
@samp{H}, @samp{M} and @samp{S}, and then reads those commands in with
|
|
the @code{so} request.
|
|
|
|
@cindex @code{system()} return value register
|
|
The @code{systat} read-write number register contains the return value
|
|
of the @code{system()} function executed by the last @code{sy} request.
|
|
@endDefreq
|
|
|
|
@Defreq {open, stream file}
|
|
@Defreqx {opena, stream file}
|
|
Opens the specified @var{file} for writing and
|
|
associates the specified @var{stream} with it.
|
|
|
|
The @code{opena} is like @code{open}, but if the file exists, append to
|
|
it instead of truncating it.
|
|
@endDefreq
|
|
|
|
@cindex copy-in mode, and @code{write} requests
|
|
@cindex mode, copy-in, and @code{write} requests
|
|
@Defreq {write, stream data}
|
|
Writes to the file associated with the specified @var{stream}.
|
|
The stream must previously have
|
|
been the subject of an open request. The remainder of the line is
|
|
interpreted as the @code{ds} request reads its second argument: A
|
|
leading @samp{"} is stripped, and it is read in copy-in mode.
|
|
@endDefreq
|
|
|
|
@Defreq {close, stream}
|
|
Closes the specified @var{stream};
|
|
the stream is no longer an acceptable argument to the
|
|
@code{write} request.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... example of open write &c...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
@Defesc {\\V, ', xxx, '}
|
|
Interpolates the contents of the specified
|
|
environment variable, as returned by the function @code{getenv}.
|
|
Specify the argument to @code{\V} as an identifier, i.e.@:
|
|
@samp{\V@var{x}}, @samp{\V(@var{xx}} or @samp{\V[@var{xxx}]}. @code{\V}
|
|
is interpreted in copy-in mode.
|
|
@endDefesc
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
|
|
@section Postprocessor Access
|
|
@cindex postprocessor access
|
|
@cindex access of postprocessor
|
|
|
|
There are two escapes which give information directly to the
|
|
postprocessor. This is particularly useful for embedding
|
|
@sc{PostScript} into the final document.
|
|
|
|
@Defesc {\\X, ', xxx, '}
|
|
Embeds its argument into the @code{gtroff}
|
|
output preceded with @w{@samp{x X}}.
|
|
@endDefesc
|
|
|
|
@Defesc {\\Y, ', xxx, '}
|
|
The @code{\Y} escape is called with an identifier (i.e.@:
|
|
@code{\Y@var{x}}, @code{\Y(@var{xx}} or @code{\Y[@var{xxx}]}). This is
|
|
approximately equivalent to @samp{\X'\*[@var{xxx}]'}. However, the
|
|
contents of the string or macro @var{xxx} are not interpreted; also it
|
|
is permitted for @var{xxx} to have been defined as a macro and thus
|
|
contain newlines (it is not permitted for the argument to @code{\X} to
|
|
contain newlines). The inclusion of newlines requires an extension to
|
|
the @acronym{UNIX} @code{troff} output format, and confuses drivers
|
|
that do not know about this extension.
|
|
@endDefesc
|
|
|
|
@xref{Output Devices}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
|
|
@section Miscellaneous
|
|
@cindex miscellaneous
|
|
|
|
This section documents parts of @code{gtroff} which cannot (yet) be
|
|
categorized elsewhere in this manual.
|
|
|
|
@cindex line numbers
|
|
@cindex numbers, line
|
|
@Defreq {nm, start inc space indent}
|
|
Prints line numbers in the left margin.
|
|
@var{start} is the line number of the @emph{next}
|
|
output line; this defaults to@w{ }1. @var{inc} indicates on
|
|
which lines numbers are printed, i.e.@: 5 means put line numbers on
|
|
every 5@w{ }lines; this defaults to@w{ }1. @var{space} is the
|
|
space to be left between the number and the text; this defaults to@w{
|
|
}1. The fourth argument is the indentation of the line numbers.
|
|
Without arguments, line numbers are turned off.
|
|
@endDefreq
|
|
|
|
@c XXX xref ln register
|
|
|
|
@Defreq {nn, [@Var{skip}]}
|
|
Temporarily turns off line numbering. The
|
|
argument is the number of lines not to be numbered; this defaults
|
|
to@w{ }1.
|
|
|
|
@c XXX (does this disable incrementing or display?)
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... line numbering example ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
@cindex margin characters
|
|
@cindex characters for margins
|
|
@Defreq {mc, char dist}
|
|
Prints margin characters to the right of the text.
|
|
The first argument is the character to be
|
|
printed, and the second argument is the distance away from the main body
|
|
text. With no arguments the margin characters are turned off. If this
|
|
occurs before a break, no margin character is printed.
|
|
|
|
@pindex nrchbar
|
|
@pindex changebar
|
|
This is quite useful for indicating text that has changed, and, in fact,
|
|
there are programs available for doing this (they are called
|
|
@code{nrchbar} and @code{changebar} and can be found in any
|
|
@samp{comp.sources.unix} archive.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... margin char example ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
@pindex soelim
|
|
@cindex multi-file documents
|
|
@cindex documents, multi-file
|
|
@Defreq {lf, line filename}
|
|
A debugging aid for
|
|
documents which are split into many files, then put together
|
|
with @code{soelim} and other preprocessors. The second argument is the
|
|
name of the file and the first argument is the input line number in
|
|
that file. This way @code{gtroff} can produce error messages which are
|
|
intelligible to the user.
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... example of soelim'ed doc ...
|
|
@endExample
|
|
@end ignore
|
|
@endDefreq
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
|
|
@section @code{gtroff} Internals
|
|
|
|
@cindex input token
|
|
@cindex token, input
|
|
@cindex output node
|
|
@cindex node, output
|
|
@code{gtroff} processes input in three steps. One or more input
|
|
characters are converted to an @dfn{input token}. Then, one or more
|
|
input tokens are converted to an @dfn{output node}. Finally, output
|
|
nodes are converted to the intermediate output language understood by
|
|
all output devices.
|
|
|
|
For example, the input string @samp{fi\[:u]} is converted in a
|
|
character token @samp{f}, a character token @samp{i}, and a special
|
|
token @samp{:u} (representing u@w{ }umlaut). Later on, the character
|
|
tokens @samp{f} and @samp{i} are merged to a single output node
|
|
representing the ligature glyph @samp{fi}; the same happens with
|
|
@samp{:u}. All output glyph nodes are `processed' which means that
|
|
they are invariably associated with a given font, font size, advance
|
|
width, etc. During the formatting process, @code{gtroff} itself adds
|
|
various nodes to control the data flow.
|
|
|
|
Macros, diversions, and strings collect elements in two chained lists:
|
|
a list of input tokens which have been passed unprocessed, and a list
|
|
of output nodes. Consider the following the diversion.
|
|
|
|
@Example
|
|
.di xxx
|
|
a
|
|
\!b
|
|
c
|
|
.br
|
|
.di
|
|
@endExample
|
|
|
|
@noindent
|
|
It contains these elements.
|
|
|
|
@multitable {@i{vertical size node}} {token list} {element number}
|
|
@item node list @tab token list @tab element number
|
|
|
|
@item @i{line start node} @tab --- @tab 1
|
|
@item @i{glyph node @code{a}} @tab --- @tab 2
|
|
@item @i{word space node} @tab --- @tab 3
|
|
@item --- @tab @code{b} @tab 4
|
|
@item --- @tab @code{\n} @tab 5
|
|
@item @i{glyph node @code{c}} @tab --- @tab 6
|
|
@item @i{vertical size node} @tab --- @tab 7
|
|
@item @i{vertical size node} @tab --- @tab 8
|
|
@item --- @tab @code{\n} @tab 9
|
|
@end multitable
|
|
|
|
@esindex \v
|
|
@rqindex unformat
|
|
@noindent
|
|
Elements 1, 7, and@w{ }8 are inserted by @code{gtroff}; the latter two
|
|
(which are always present) specify the vertical extent of the last
|
|
line, possibly modified by @code{\v}. The @code{br} request finishes
|
|
the current partial line, inserting a newline input token which is
|
|
subsequently converted to a space when the diversion is reread. Note
|
|
that the word space node has a fixed width which isn't stretchable
|
|
anymore. To convert horizontal space nodes back to input tokens, use
|
|
the @code{unformat} request.
|
|
|
|
Macros only contain elements in the token list (and the node list is
|
|
empty); diversions and strings can contain elements in both lists.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
|
|
@section Debugging
|
|
@cindex debugging
|
|
|
|
@code{gtroff} is not easy to debug, but there are some useful features
|
|
and strategies for debugging.
|
|
|
|
@Defreq {tm, string}
|
|
Sends the @var{string} to the standard error stream;
|
|
this is very useful for printing debugging output among other things.
|
|
@endDefreq
|
|
|
|
@cindex aborting
|
|
@Defreq {ab, [@Var{string}]}
|
|
Similar to the @code{tm} request, except that
|
|
it causes @code{gtroff} to stop processing. With no argument it
|
|
prints @samp{User Abort}.
|
|
@endDefreq
|
|
|
|
@cindex @code{ex}, use in debugging
|
|
@cindex exiting
|
|
@Defreq {ex, }
|
|
The @code{ex} request also causes @code{gtroff} to stop processing
|
|
if encountered at the topmost level; see also @ref{I/O}.
|
|
@endDefreq
|
|
|
|
When doing something involved it is useful to leave the debugging
|
|
statements in the code and have them turned on by a command line flag.
|
|
|
|
@Example
|
|
.if \n(DB .tm debugging output
|
|
@endExample
|
|
|
|
@noindent
|
|
To activate these statements say
|
|
|
|
@Example
|
|
groff -rDB=1 file
|
|
@endExample
|
|
|
|
@c XXX .tm1, .tmc requests
|
|
|
|
If it is known in advance that there will be many errors and no useful
|
|
output, @code{gtroff} can be forced to suppress formatted output with
|
|
the @option{-z} flag.
|
|
|
|
@cindex dumping symbol table
|
|
@cindex symbol table, dumping
|
|
@Defreq {pm, }
|
|
The @code{pm} request prints out the entire symbol table on @code{stderr}.
|
|
@endDefreq
|
|
|
|
@cindex dumping number registers
|
|
@cindex number registers, dumping
|
|
@Defreq {pnr, }
|
|
Prints the names and contents of all
|
|
currently defined number registers on @code{stderr}.
|
|
@endDefreq
|
|
|
|
@cindex dumping traps
|
|
@cindex traps, dumping
|
|
@Defreq {ptr, }
|
|
Prints the names and positions of all traps
|
|
(not including input line traps and diversion traps) on @code{stderr}.
|
|
Empty slots in the page trap list are printed as well, because they can
|
|
affect the priority of subsequently planted traps.
|
|
@endDefreq
|
|
|
|
@cindex flush output
|
|
@cindex output, flush
|
|
@cindex interactive use of @code{gtroff}
|
|
@cindex @code{gtroff}, interactive use
|
|
@Defreq {fl, }
|
|
Instructs @code{gtroff} to flush its output
|
|
immediately. The intent is for interactive use.
|
|
@code{gtroff}; there is little other use for it. This
|
|
request causes a line break.
|
|
@endDefreq
|
|
|
|
@cindex backtrace of input stack
|
|
@cindex input stack, backtrace
|
|
@Defreq {backtrace, }
|
|
The @code{backtrace} request prints a backtrace of the input stack
|
|
to the standard error stream.
|
|
@endDefreq
|
|
|
|
@cindex warnings
|
|
@code{gtroff} has command line options for printing out more warnings
|
|
(@option{-w}) and for printing backtraces (@option{-b}) when a warning
|
|
or an error occurs. The most verbose level of warnings is @option{-ww}.
|
|
|
|
@cindex level of warnings
|
|
@cindex warnings, level
|
|
@Defreq {warn, [@Var{flags}]}
|
|
@Defregx {.warn}
|
|
Controls the level of warnings checked for. The @var{flags} are the sum
|
|
of the numbers associated with each warning that is to be enabled; all
|
|
other warnings are disabled. The number associated with each warning is
|
|
listed below. For example, @w{@code{.warn 0}} disables all warnings,
|
|
and @w{@code{.warn 1}} disables all warnings except that about missing
|
|
characters. If an argument is not given, all warnings are enabled.
|
|
|
|
The read-only number register @code{.warn} contains the current warning
|
|
level.
|
|
@endDefreq
|
|
|
|
@menu
|
|
* Warnings::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Warnings, , Debugging, Debugging
|
|
@subsection Warnings
|
|
@cindex warnings
|
|
|
|
The warnings that can be given to @code{gtroff} are divided into the
|
|
following categories. The name associated with each warning is used by
|
|
the @option{-w} and @option{-W} options; the number is used by the
|
|
@code{warn} request and by the @code{.warn} register.
|
|
|
|
@table @samp
|
|
@item char
|
|
@itemx 1
|
|
Non-existent characters. This is enabled by default.
|
|
|
|
@item number
|
|
@itemx 2
|
|
Invalid numeric expressions. This is enabled by default.
|
|
@xref{Expressions}.
|
|
|
|
@item break
|
|
@itemx 4
|
|
@cindex fill mode
|
|
@cindex mode, fill
|
|
In fill mode, lines which could not be broken so that their length was
|
|
less than the line length. This is enabled by default.
|
|
|
|
@item delim
|
|
@itemx 8
|
|
Missing or mismatched closing delimiters.
|
|
|
|
@item el
|
|
@itemx 16
|
|
@rqindex ie
|
|
@rqindex el
|
|
Use of the @code{el} request with no matching @code{ie} request.
|
|
@xref{if-else}.
|
|
|
|
@item scale
|
|
@itemx 32
|
|
Meaningless scaling indicators.
|
|
|
|
@item range
|
|
@itemx 64
|
|
Out of range arguments.
|
|
|
|
@item syntax
|
|
@itemx 128
|
|
Dubious syntax in numeric expressions.
|
|
|
|
@item di
|
|
@itemx 256
|
|
@rqindex di
|
|
@rqindex da
|
|
@cindex @code{di}, debugging
|
|
@cindex @code{da}, debugging
|
|
Use of @code{di} or @code{da} without an argument when there is no
|
|
current diversion.
|
|
|
|
@item mac
|
|
@itemx 512
|
|
@rqindex de
|
|
@c XXX more index entries
|
|
Use of undefined strings, macros and diversions. When an undefined
|
|
string, macro or diversion is used, that string is automatically defined
|
|
as empty. So, in most cases, at most one warning is given for each
|
|
name.
|
|
|
|
@item reg
|
|
@itemx 1024
|
|
@rqindex nr
|
|
@c XXX more index entries
|
|
Use of undefined number registers. When an undefined number register is
|
|
used, that register is automatically defined to have a value of@w{ }0.
|
|
A definition is automatically made with a value of@w{ }0. So, in most
|
|
cases, at most one warning is given for use of a particular name.
|
|
|
|
@item tab
|
|
@itemx 2048
|
|
Use of a tab character where a number was expected.
|
|
|
|
@item right-brace
|
|
@itemx 4096
|
|
@esindex \@}
|
|
@cindex @code{\@}}, debugging
|
|
Use of @code{\@}} where a number was expected.
|
|
|
|
@item missing
|
|
@itemx 8192
|
|
Requests that are missing non-optional arguments.
|
|
|
|
@item input
|
|
@itemx 16384
|
|
Illegal input characters.
|
|
|
|
@item escape
|
|
@itemx 32768
|
|
Unrecognized escape sequences. When an unrecognized escape sequence is
|
|
encountered, the escape character is ignored.
|
|
|
|
@item space
|
|
@itemx 65536
|
|
@cindex compatibility mode
|
|
Missing space between a request or macro and its argument. This warning
|
|
is given when an undefined name longer than two characters is
|
|
encountered, and the first two characters of the name make a defined
|
|
name. The request or macro is not invoked. When this warning is
|
|
given, no macro is automatically defined. This is enabled by default.
|
|
This warning never occurs in compatibility mode.
|
|
|
|
@item font
|
|
@itemx 131072
|
|
Non-existent fonts. This is enabled by default.
|
|
|
|
@item all
|
|
All warnings except @samp{di}, @samp{mac} and @samp{reg}. It is
|
|
intended that this covers all warnings that are useful with traditional
|
|
macro packages.
|
|
|
|
@item w
|
|
All warnings.
|
|
@end table
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Implementation Differences, Summary, Debugging, gtroff Reference
|
|
@section Implementation Differences
|
|
@cindex implementation differences
|
|
@cindex differences in implementation
|
|
@cindex incompatibilities with Unix @code{troff}
|
|
@cindex compatibility mode
|
|
@cindex mode, compatibility
|
|
|
|
GNU @code{troff} has a number of features which cause incompatibilities
|
|
with documents written with old versions of @code{troff}.
|
|
|
|
@cindex long names
|
|
@cindex names, long
|
|
Long names cause some incompatibilities. @acronym{UNIX} @code{troff}
|
|
interprets
|
|
|
|
@Example
|
|
.dsabcd
|
|
@endExample
|
|
|
|
@esindex \*
|
|
@esindex \n
|
|
@cindex @code{\*}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{\n}, incompatibilities with Unix @code{troff}
|
|
@rqindex cp
|
|
@vindex .C
|
|
@noindent
|
|
as defining a string @samp{ab} with contents @samp{cd}. Normally, GNU
|
|
@code{troff} interprets this as a call of a macro named
|
|
@code{dsabcd}. Also @acronym{UNIX} @code{troff} interprets
|
|
@code{\*[} or @code{\n[} as references to a string or number register
|
|
called @samp{[}. In GNU @code{troff}, however, this is normally
|
|
interpreted as the start of a long name. In compatibility mode GNU
|
|
@code{troff} interprets long names in the traditional way
|
|
(which means that they are not recognized as names).
|
|
Compatibility mode can be turned on with the @option{-C} command line
|
|
option, and turned on or off with the @code{cp} request. The number
|
|
register @code{.C} is@w{ }1 if compatibility mode is on, 0@w{
|
|
}otherwise.
|
|
|
|
@esindex \A
|
|
@esindex \|
|
|
@esindex \^
|
|
@esindex \&
|
|
@esindex \@{
|
|
@esindex \@}
|
|
@esindex \@key{SP}
|
|
@esindex \'
|
|
@esindex \`
|
|
@esindex \-
|
|
@esindex \_
|
|
@esindex \!
|
|
@esindex \%
|
|
@esindex \c
|
|
GNU @code{troff} does not allow the use of the escape sequences
|
|
@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
|
|
@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
|
|
@code{\%}, and @code{\c} in names of strings, macros, diversions, number
|
|
registers, fonts or environments; @acronym{UNIX} @code{troff} does. The
|
|
@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
|
|
avoiding use of these escape sequences in names.
|
|
|
|
@cindex fractional point sizes
|
|
@cindex point sizes, fractional
|
|
@rqindex ps
|
|
@cindex @code{ps}, incompatibilities with Unix @code{troff}
|
|
Fractional point sizes cause one noteworthy incompatibility. In
|
|
@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
|
|
indicators and thus
|
|
|
|
@Example
|
|
.ps 10u
|
|
@endExample
|
|
|
|
@noindent
|
|
sets the point size to 10@w{ }points, whereas in GNU @code{troff} it
|
|
sets the point size to 10@w{ }scaled points. @xref{Fractional Type
|
|
Sizes}, for more information.
|
|
|
|
@rqindex bd
|
|
@rqindex cs
|
|
@rqindex tkf
|
|
@rqindex tr
|
|
@rqindex fp
|
|
@cindex @code{bd}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{cs}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{tkf}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{tr}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{fp}, incompatibilities with Unix @code{troff}
|
|
@cindex input and output characters, compatibility with Unix
|
|
@cindex output characters, compatibility with Unix
|
|
@cindex characters, input and output, compatibility with Unix
|
|
In GNU @code{troff} there is a fundamental difference between
|
|
unformatted, input characters, and formatted, output characters.
|
|
Everything that affects how an output character is output is stored
|
|
with the character; once an output character has been constructed it is
|
|
unaffected by any subsequent requests that are executed, including
|
|
@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests.
|
|
Normally output characters are constructed from input characters at the
|
|
moment immediately before the character is added to the current output
|
|
line. Macros, diversions and strings are all, in fact, the same type of
|
|
object; they contain lists of input characters and output characters in
|
|
any combination. An output character does not behave like an input
|
|
character for the purposes of macro processing; it does not inherit any
|
|
of the special properties that the input character from which it was
|
|
constructed might have had. For example,
|
|
|
|
@Example
|
|
.di x
|
|
\\\\
|
|
.br
|
|
.di
|
|
.x
|
|
@endExample
|
|
|
|
@esindex \e
|
|
@esindex \!
|
|
@esindex \?
|
|
@cindex @code{\e}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{\!}, incompatibilities with Unix @code{troff}
|
|
@cindex @code{\?}, incompatibilities with Unix @code{troff}
|
|
@cindex transparent output, incompatibilities with Unix @code{troff}
|
|
@cindex output, transparent, incompatibilities with Unix @code{troff}
|
|
@noindent
|
|
prints @samp{\\} in GNU @code{troff}; each pair of input backslashes
|
|
is turned into one output backslash and the resulting output backslashes
|
|
are not interpreted as escape characters when they are reread.
|
|
@acronym{UNIX} @code{troff} would interpret them as escape characters
|
|
when they were reread and would end up printing one @samp{\}. The
|
|
correct way to obtain a printable backslash is to use the @code{\e}
|
|
escape sequence: This always prints a single instance of the current
|
|
escape character, regardless of whether or not it is used in a
|
|
diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
|
|
@code{troff}. To store, for some reason, an escape sequence in a
|
|
diversion that will be interpreted when the diversion is reread, either
|
|
use the traditional @code{\!} transparent output facility, or, if this
|
|
is unsuitable, the new @code{\?} escape sequence.
|
|
|
|
@c XXX .tl compatibility mode -> input stack level
|
|
@c XXX .if compatibility mode -> input stack level
|
|
|
|
@xref{Diversions}, for more information.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Summary, , Implementation Differences, gtroff Reference
|
|
@section Summary
|
|
@cindex summary
|
|
|
|
@c XXX documentation
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Preprocessors, Output Devices, gtroff Reference, Top
|
|
@chapter Preprocessors
|
|
@cindex preprocessors
|
|
|
|
This chapter describes all preprocessors that come with @code{groff} or
|
|
which are freely available.
|
|
|
|
@menu
|
|
* geqn::
|
|
* gtbl::
|
|
* gpic::
|
|
* ggrn::
|
|
* grap::
|
|
* grefer::
|
|
* gsoelim::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node geqn, gtbl, Preprocessors, Preprocessors
|
|
@section @code{geqn}
|
|
@cindex @code{eqn}
|
|
@cindex @code{geqn}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking geqn::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking geqn, , geqn, geqn
|
|
@subsection Invoking @code{geqn}
|
|
@cindex invoking @code{geqn}
|
|
@cindex @code{geqn}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node gtbl, gpic, geqn, Preprocessors
|
|
@section @code{gtbl}
|
|
@cindex @code{tbl}
|
|
@cindex @code{gtbl}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking gtbl::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking gtbl, , gtbl, gtbl
|
|
@subsection Invoking @code{gtbl}
|
|
@cindex invoking @code{gtbl}
|
|
@cindex @code{gtbl}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node gpic, ggrn, gtbl, Preprocessors
|
|
@section @code{gpic}
|
|
@cindex @code{pic}
|
|
@cindex @code{gpic}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking gpic::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking gpic, , gpic, gpic
|
|
@subsection Invoking @code{gpic}
|
|
@cindex invoking @code{gpic}
|
|
@cindex @code{gpic}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node ggrn, grap, gpic, Preprocessors
|
|
@section @code{ggrn}
|
|
@cindex @code{grn}
|
|
@cindex @code{ggrn}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking ggrn::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking ggrn, , ggrn, ggrn
|
|
@subsection Invoking @code{ggrn}
|
|
@cindex invoking @code{ggrn}
|
|
@cindex @code{ggrn}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grap, grefer, ggrn, Preprocessors
|
|
@section @code{grap}
|
|
@cindex @code{grap}
|
|
|
|
A free implementation of @code{grap}, written by Ted Faber,
|
|
is available as an extra package from the following address:
|
|
|
|
@display
|
|
@url{http://www.lunabase.org/~faber/Vault/software/grap/}
|
|
@end display
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grefer, gsoelim, grap, Preprocessors
|
|
@section @code{grefer}
|
|
@cindex @code{refer}
|
|
@cindex @code{grefer}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grefer::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grefer, , grefer, grefer
|
|
@subsection Invoking @code{grefer}
|
|
@cindex invoking @code{grefer}
|
|
@cindex @code{grefer}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node gsoelim, , grefer, Preprocessors
|
|
@section @code{gsoelim}
|
|
@cindex @code{soelim}
|
|
@cindex @code{gsoelim}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking gsoelim::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking gsoelim, , gsoelim, gsoelim
|
|
@subsection Invoking @code{gsoelim}
|
|
@cindex invoking @code{gsoelim}
|
|
@cindex @code{gsoelim}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Output Devices, File formats, Preprocessors, Top
|
|
@chapter Output Devices
|
|
@cindex output devices
|
|
@cindex devices for output
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Special Characters::
|
|
* grotty::
|
|
* grops::
|
|
* grodvi::
|
|
* grolj4::
|
|
* grolbp::
|
|
* grohtml::
|
|
* gxditview::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Special Characters, grotty, Output Devices, Output Devices
|
|
@section Special Characters
|
|
@cindex special characters
|
|
@cindex characters, special
|
|
|
|
@c XXX
|
|
|
|
@xref{Font Files}.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grotty, grops, Special Characters, Output Devices
|
|
@section @code{grotty}
|
|
@cindex @code{grotty}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grotty::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grotty, , grotty, grotty
|
|
@subsection Invoking @code{grotty}
|
|
@cindex invoking @code{grotty}
|
|
@cindex @code{grotty}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grops, grodvi, grotty, Output Devices
|
|
@section @code{grops}
|
|
@cindex @code{grops}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grops::
|
|
* Embedding PostScript::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grops, Embedding PostScript, grops, grops
|
|
@subsection Invoking @code{grops}
|
|
@cindex invoking @code{grops}
|
|
@cindex @code{grops}, invoking
|
|
|
|
@c XXX
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Embedding PostScript, , Invoking grops, grops
|
|
@subsection Embedding @sc{PostScript}
|
|
@cindex embedding postscript
|
|
@cindex postscript, embedding
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grodvi, grolj4, grops, Output Devices
|
|
@section @code{grodvi}
|
|
@cindex @code{grodvi}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grodvi::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grodvi, , grodvi, grodvi
|
|
@subsection Invoking @code{grodvi}
|
|
@cindex invoking @code{grodvi}
|
|
@cindex @code{grodvi}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grolj4, grolbp, grodvi, Output Devices
|
|
@section @code{grolj4}
|
|
@cindex @code{grolj4}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grolj4::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grolj4, , grolj4, grolj4
|
|
@subsection Invoking @code{grolj4}
|
|
@cindex invoking @code{grolj4}
|
|
@cindex @code{grolj4}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grolbp, grohtml, grolj4, Output Devices
|
|
@section @code{grolbp}
|
|
@cindex @code{grolbp}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grolbp::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grolbp, , grolbp, grolbp
|
|
@subsection Invoking @code{grolbp}
|
|
@cindex invoking @code{grolbp}
|
|
@cindex @code{grolbp}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node grohtml, gxditview, grolbp, Output Devices
|
|
@section @code{grohtml}
|
|
@cindex @code{grohtml}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking grohtml::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking grohtml, , grohtml, grohtml
|
|
@subsection Invoking @code{grohtml}
|
|
@cindex invoking @code{grohtml}
|
|
@cindex @code{grohtml}, invoking
|
|
|
|
@c XXX
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node gxditview, , grohtml, Output Devices
|
|
@section @code{gxditview}
|
|
@cindex @code{gxditview}
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* Invoking gxditview::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Invoking gxditview, , gxditview, gxditview
|
|
@subsection Invoking @code{gxditview}
|
|
@cindex invoking @code{gxditview}
|
|
@cindex @code{gxditview}, invoking
|
|
|
|
@c XXX
|
|
@c X11's xditview
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node File formats, Installation, Output Devices, Top
|
|
@chapter File formats
|
|
@cindex file formats
|
|
@cindex formats, file
|
|
|
|
@c XXX
|
|
|
|
@menu
|
|
* gtroff Output::
|
|
* Font Files::
|
|
@end menu
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node gtroff Output, Font Files, File formats, File formats
|
|
@section @code{gtroff} Output
|
|
@cindex @code{gtroff} output
|
|
@cindex output, @code{gtroff}
|
|
|
|
This section describes the format output of GNU @code{troff}. The
|
|
output format used by GNU @code{troff} is very similar -- but
|
|
not identical -- to that used by
|
|
@acronym{UNIX} device-independent @code{troff} (@code{ditroff}).
|
|
|
|
@menu
|
|
* Output Format::
|
|
* Device Control::
|
|
* Drawing Functions::
|
|
* Line Continuation::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Output Format, Device Control, gtroff Output, gtroff Output
|
|
@subsection Output Format
|
|
@cindex output format
|
|
@cindex format of output
|
|
|
|
@cindex 8-bit input
|
|
@cindex input, 8-bit
|
|
The output format is text based, as opposed to a binary format (like
|
|
@TeX{} DVI). The output format is @w{8-bit} clean, thus single
|
|
characters can have the eighth bit set, as can the names of fonts and
|
|
special characters.
|
|
|
|
The output format consists of single command characters with attached
|
|
parameters which are separated from subsequent text by whitespace or a
|
|
newline.
|
|
|
|
The names of characters and fonts can be of arbitrary length; drivers
|
|
should not assume that they are only two characters long (as
|
|
@code{ditroff} does).
|
|
|
|
When a character is to be printed, that character is always in the
|
|
current font. Unlike @code{ditroff}, it is not necessary for drivers to
|
|
search special fonts to find a character.
|
|
|
|
@table @code
|
|
@item H@var{n}
|
|
@c XXX
|
|
|
|
@item V@var{n}
|
|
@c XXX
|
|
|
|
@item h@var{n}
|
|
@c XXX
|
|
|
|
@item v@var{n}
|
|
@c XXX
|
|
|
|
@item c@var{n}
|
|
@c XXX
|
|
|
|
@item C@var{n}
|
|
@c XXX
|
|
|
|
@item @var{nn}@var{c}
|
|
@c XXX
|
|
|
|
@item t@var{xxx}
|
|
@var{xxx} is any sequence of characters terminated by a space or a
|
|
newline; the first character should be printed at the current position,
|
|
the the current horizontal position should be increased by the width of
|
|
the first character, and so on for each character. The width of the
|
|
character is that given in the font file, appropriately scaled for the
|
|
current point size, and rounded so that it is a multiple of the
|
|
horizontal resolution. Special characters cannot be printed using this
|
|
command.
|
|
|
|
@kindex tcommand
|
|
@pindex DESC@r{, and @code{tcommand}}
|
|
This command is only allowed if the @samp{tcommand} line is present in
|
|
the @file{DESC} file.
|
|
|
|
@item u@var{n} @var{xxx}
|
|
This is same as the @samp{t} command except that after printing each
|
|
character, the current horizontal position is increased by the sum of
|
|
the width of that character and@w{ }@var{n}.
|
|
|
|
This command is only allowed if the @samp{tcommand} line is present in
|
|
the @file{DESC} file.
|
|
|
|
@item n@var{a}@var{b}
|
|
@c XXX
|
|
|
|
@item p@var{n}
|
|
@c XXX
|
|
|
|
@item s@var{n}
|
|
@kindex sizescale
|
|
@pindex DESC@r{, and @code{sizescale}}
|
|
The argument to the @samp{s} command is in scaled points (units of
|
|
points/@var{n}, where @var{n} is the argument to the @samp{sizescale}
|
|
command in the @file{DESC} file).
|
|
|
|
@item f@var{n}
|
|
@item x @dots{} \n
|
|
Device control.
|
|
@c XXX more info
|
|
|
|
@item D@var{c} @var{x}@dots{}\n
|
|
@c XXX
|
|
@end table
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Device Control, Drawing Functions, Output Format, gtroff Output
|
|
@subsection Device Control
|
|
@cindex device control
|
|
@cindex control of devices
|
|
|
|
The @samp{x} command is normally followed by a letter or word indicating
|
|
the function to perform, followed by white space separated arguments.
|
|
|
|
The first argument can be abbreviated to the first letter.
|
|
|
|
@table @code
|
|
@item x init
|
|
@c XXX
|
|
|
|
@item x T
|
|
@c XXX
|
|
|
|
@item x res @var{n} @var{h} @var{v}
|
|
@c XXX
|
|
|
|
@item x H
|
|
@c XXX more info
|
|
The argument to the @w{@samp{x Height}} command is also in scaled
|
|
points.
|
|
@end table
|
|
|
|
The first three output commands are guaranteed to be:
|
|
|
|
@Example
|
|
x T device
|
|
x res n h v
|
|
x init
|
|
@endExample
|
|
|
|
@noindent
|
|
For example, the input
|
|
|
|
@Example
|
|
crunchy \fH\s+2frog\s0\fP!?
|
|
@endExample
|
|
|
|
@noindent
|
|
produces
|
|
|
|
@c XXX example
|
|
|
|
@ignore
|
|
@Example
|
|
... sample output here ...
|
|
@endExample
|
|
@end ignore
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Drawing Functions, Line Continuation, Device Control, gtroff Output
|
|
@subsection Drawing Functions
|
|
@cindex drawing functions
|
|
@cindex functions for drawing
|
|
|
|
@pindex gpic
|
|
The @samp{D} drawing command has been extended. These extensions are
|
|
used by GNU @code{pic} only if the @option{-x} option is given.
|
|
|
|
@xref{Drawing Requests}.
|
|
|
|
@table @code
|
|
@c XXX ...
|
|
@item Df @var{n}
|
|
Set the shade of gray to be used for filling solid objects to@w{
|
|
}@var{n}; @var{n}@w{ }must be an integer between 0 and@w{ }1000, where 0
|
|
corresponds solid white and 1000 to solid black, and values in between
|
|
correspond to intermediate shades of gray. This applies only to solid
|
|
circles, solid ellipses and solid polygons. By default, a level of@w{
|
|
}1000 is used. Whatever color a solid object has, it should
|
|
completely obscure everything beneath it. A value greater than@w{ }1000
|
|
or less than@w{ }0 can also be used: this means fill with the shade of
|
|
gray that is currently being used for lines and text. Normally this
|
|
is black, but some drivers may provide a way of changing this.
|
|
|
|
@item DC @var{d}
|
|
Draw a solid circle with a diameter of@w{ }@var{d} with the leftmost
|
|
point at the current position.
|
|
|
|
@item DE @var{dx} @var{dy}
|
|
Draw a solid ellipse with a horizontal diameter of@w{ }@var{dx} and a
|
|
vertical diameter of@w{ }@var{dy} with the leftmost point at the current
|
|
position.
|
|
|
|
@item Dp @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{} @var{dxn} @var{dyn}
|
|
Draw a polygon with automatic closure. The first vertex is at the
|
|
current position, the second vertex at an offset (@var{dx1},@var{dy1})
|
|
from the current position, the second vertex at an offset
|
|
(@var{dx2},@var{dy2}) from the first vertex, and so on up to the
|
|
@var{n}@dmn{th} vertex. At the moment, GNU @code{pic} only uses this
|
|
command to generate triangles and rectangles.
|
|
|
|
@item DP @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{} @var{dxn} @var{dyn}
|
|
Like @code{Dp} but draw a solid rather than outlined polygon.
|
|
|
|
@item Dt @var{n}
|
|
@cindex line thickness
|
|
@cindex thickness of lines
|
|
Set the current line thickness to @var{n}@w{ }machine units.
|
|
Traditionally, @acronym{UNIX} @code{troff} drivers use a line thickness
|
|
proportional to the current point size; drivers should continue to do
|
|
this if no @code{Dt} command has been given, or if a @code{Dt} command
|
|
has been given with a negative value of@w{ }@var{n}. A zero value of@w{
|
|
}@var{n} selects the smallest available line thickness.
|
|
@end table
|
|
|
|
@esindex \D
|
|
A difficulty arises in how the current position should be changed after
|
|
the execution of these commands. This is not of great importance since
|
|
the code generated by GNU @code{pic} does not depend on this. Given a
|
|
drawing command of the form
|
|
|
|
@Example
|
|
\D'@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}'
|
|
@endExample
|
|
|
|
@esindex \w
|
|
@vindex st
|
|
@vindex sb
|
|
@noindent
|
|
where @var{c} is not one of @samp{c}, @samp{e}, @samp{l}, @samp{a} or
|
|
@samp{~}, @acronym{UNIX} @code{troff} treats each x@w{ }value
|
|
as a horizontal quantity, and each y@w{ }value as a vertical
|
|
quantity; it assumes that the width of the drawn object is the sum of
|
|
all x@w{ }values, and that the height is the sum of all y@w{ }values.
|
|
(The assumption about the height can be seen by examining the @code{st}
|
|
and @code{sb} registers after using such a @code{D}@w{ }command in a
|
|
@code{\w} escape sequence.) This rule also holds for all the original
|
|
drawing commands with the exception of @code{De}. For the sake of
|
|
compatibility GNU @code{troff} also follows this rule, even though it
|
|
produces an ugly result in the case of the @code{Df}, @code{Dt}, and, to
|
|
a lesser extent, @code{DE}@w{ }commands. Thus after executing a
|
|
@code{D}@w{ }command of the form
|
|
|
|
@Example
|
|
D@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}
|
|
@endExample
|
|
|
|
@noindent
|
|
the current position should be increased horizontally by the sum of all
|
|
x@w{ }values and vertically by the sum of all y@w{ }values.
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Line Continuation, , Drawing Functions, gtroff Output
|
|
@subsection Line Continuation
|
|
@cindex line continuation in output commands
|
|
@cindex output commands, line continuation
|
|
|
|
There is a continuation convention which permits the argument to the
|
|
@w{@samp{x X}} command to contain newlines: When outputting the argument
|
|
to the @w{@samp{x X}} command, GNU @code{troff} follows each newline
|
|
in the argument with a @samp{+} character (as usual, it terminates
|
|
the entire argument with a newline); thus if the line after the line
|
|
containing the @w{@samp{x X}} command starts with @samp{+}, then the
|
|
newline ending the line containing the @w{@samp{x X}} command should be
|
|
treated as part of the argument to the @w{@samp{x X}} command, the
|
|
@samp{+} should be ignored, and the part of the line following the
|
|
@samp{+} should be treated like the part of the line following the
|
|
@w{@samp{x X}} command.
|
|
|
|
|
|
@c =====================================================================
|
|
|
|
@node Font Files, , gtroff Output, File formats
|
|
@section Font Files
|
|
@cindex font files
|
|
@cindex files, font
|
|
|
|
The @code{gtroff} font format is roughly a superset of the
|
|
@code{ditroff} font format. Unlike the @code{ditroff} font format,
|
|
there is no associated binary format; all files are text files. The
|
|
font files for device @var{name} are stored in a directory
|
|
@file{dev@var{name}}. There are two types of file: a device description
|
|
file called @file{DESC} and for each font@w{ }@var{f} a font file
|
|
called@w{ }@file{@var{f}}.
|
|
|
|
@menu
|
|
* DESC File Format::
|
|
* Font File Format::
|
|
@end menu
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node DESC File Format, Font File Format, Font Files, Font Files
|
|
@subsection @file{DESC} File Format
|
|
@cindex @file{DESC} file format
|
|
@cindex font description file format
|
|
@cindex format of font description file
|
|
@pindex DESC@r{ file format}
|
|
|
|
The @file{DESC} file can contain the following types of line:
|
|
|
|
@table @code
|
|
@item res @var{n}
|
|
@kindex res
|
|
There are @var{n} machine units per inch.
|
|
|
|
@item hor @var{n}
|
|
@kindex hor
|
|
The horizontal resolution is @var{n} machine units.
|
|
|
|
@item vert @var{n}
|
|
@kindex vert
|
|
The vertical resolution is @var{n} machine units.
|
|
|
|
@item sizescale @var{n}
|
|
@kindex sizescale
|
|
The scale factor for point sizes. By default this has a value of@w{ }1.
|
|
One scaled point is equal to one point/@var{n}. The arguments to the
|
|
@code{unitwidth} and @code{sizes} commands are given in scaled points.
|
|
@xref{Fractional Type Sizes}, for more information.
|
|
|
|
@item unitwidth @var{n}
|
|
@kindex unitwidth
|
|
Quantities in the font files are given in machine units for fonts whose
|
|
point size is @var{n}@w{ }scaled points.
|
|
|
|
@item tcommand
|
|
@kindex tcommand
|
|
This means that the postprocessor can handle the @samp{t} and @samp{u}
|
|
output commands.
|
|
|
|
@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
|
|
@kindex sizes
|
|
This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
|
|
@var{sn} scaled points. The list of sizes must be terminated by a@w{
|
|
}0. Each @var{si} can also be a range of sizes @var{m}-@var{n}. The
|
|
list can extend over more than one line.
|
|
|
|
@item styles @var{S1} @var{S2} @dots{} @var{Sm}
|
|
@kindex styles
|
|
The first @var{m}@w{ }font positions are associated with styles
|
|
@var{S1} @dots{} @var{Sm}.
|
|
|
|
@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
|
|
@kindex fonts
|
|
Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
|
|
@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
|
|
styles. This command may extend over more than one line. A font name
|
|
of@var{ }0 means no font is mounted on the corresponding font position.
|
|
|
|
@item family @var{fam}
|
|
@kindex family
|
|
The default font family is @var{fam}.
|
|
|
|
@item charset
|
|
@kindex charset
|
|
This line and everything following in the file are ignored. It is
|
|
allowed for the sake of backwards compatibility.
|
|
@end table
|
|
|
|
The @code{res}, @code{unitwidth}, @code{fonts} and @code{sizes} lines
|
|
are mandatory. Other commands are ignored by @code{gtroff} but may be
|
|
used by postprocessors to store arbitrary information about the device
|
|
in the @file{DESC} file.
|
|
|
|
@c XXX add other commands resp. xrefs to output devices
|
|
@c XXX add obsolete commands
|
|
|
|
@c ---------------------------------------------------------------------
|
|
|
|
@node Font File Format, , DESC File Format, Font Files
|
|
@subsection Font File Format
|
|
@cindex font file format
|
|
@cindex format of font files
|
|
|
|
A font file has two sections. The first section is a sequence of lines
|
|
each containing a sequence of blank delimited words; the first word in
|
|
the line is a key, and subsequent words give a value for that key.
|
|
|
|
@table @code
|
|
@item name @var{f}
|
|
@kindex name
|
|
The name of the font is@w{ }@var{f}.
|
|
|
|
@item spacewidth @var{n}
|
|
@kindex spacewidth
|
|
The normal width of a space is@w{ }@var{n}.
|
|
|
|
@item slant @var{n}
|
|
@kindex slant
|
|
The characters of the font have a slant of @var{n}@w{ }degrees.
|
|
(Positive means forward.)
|
|
|
|
@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
|
|
@kindex ligatures
|
|
Characters @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
|
|
possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
|
|
@samp{ffl}. For backwards compatibility, the list of ligatures may be
|
|
terminated with a@w{ }0. The list of ligatures may not extend over more
|
|
than one line.
|
|
|
|
@item special
|
|
@kindex special
|
|
The font is special; this means that when a character is requested that
|
|
is not present in the current font, it is searched for in any
|
|
special fonts that are mounted.
|
|
@end table
|
|
|
|
Other commands are ignored by @code{gtroff} but may be used by
|
|
postprocessors to store arbitrary information about the font in the font
|
|
file.
|
|
|
|
@cindex comments in font files
|
|
@cindex font files, comments
|
|
@kindex #
|
|
The first section can contain comments which start with the @samp{#}
|
|
character and extend to the end of a line.
|
|
|
|
The second section contains one or two subsections. It must contain a
|
|
@code{charset} subsection and it may also contain a @code{kernpairs}
|
|
subsection. These subsections can appear in any order. Each
|
|
subsection starts with a word on a line by itself.
|
|
|
|
@kindex charset
|
|
The word @code{charset} starts the character set subsection. The
|
|
@code{charset} line is followed by a sequence of lines. Each line gives
|
|
information for one character. A line comprises a number of fields
|
|
separated by blanks or tabs. The format is
|
|
|
|
@c XXX fix it for new HTML additions
|
|
|
|
@Example
|
|
@var{name} @var{metrics} @var{type} @var{code} @var{comment}
|
|
@endExample
|
|
|
|
@cindex 8-bit input
|
|
@cindex input, 8-bit
|
|
@esindex \N
|
|
@kindex ---
|
|
@noindent
|
|
@var{name} identifies the character: If @var{name} is a single
|
|
character@w{ }@var{c} then it corresponds to the @code{gtroff} input
|
|
character @var{c}; if it is of the form @samp{\@var{c}} where @var{c} is
|
|
a single character, then it corresponds to the @code{gtroff} input
|
|
character@w{ }\@var{c}; otherwise it corresponds to the groff input
|
|
character @samp{\[@var{name}]}. (If it is exactly two characters
|
|
@var{xx} it can be entered as @samp{\(@var{xx}}.) @code{gtroff}
|
|
supports 8-bit characters; however some utilities have difficulties with
|
|
eight-bit characters. For this reason, there is a convention that the
|
|
name @samp{char@var{n}} is equivalent to the single character whose code
|
|
is@w{ }@var{n}. For example, @samp{char163} would be equivalent to the
|
|
character with code@w{ }163 which is the pounds sterling sign in @w{ISO
|
|
Latin-1} character set. The name @samp{---} is special and indicates
|
|
that the character is unnamed; such characters can only be used by means
|
|
of the @code{\N} escape sequence in @code{gtroff}.
|
|
|
|
@c XXX input encodings vs. output encodings
|
|
|
|
The @var{type} field gives the character type:
|
|
|
|
@table @code
|
|
@item 1
|
|
the character has an descender, for example, `p';
|
|
|
|
@item 2
|
|
the character has an ascender, for example, `b';
|
|
|
|
@item 3
|
|
the character has both an ascender and a descender, for example, `('.
|
|
@end table
|
|
|
|
The @var{code} field gives the code which the postprocessor uses to
|
|
print the character. The character can also be input to @code{gtroff}
|
|
using this code by means of the @code{\N} escape sequence. The code can
|
|
be any integer. If it starts with @samp{0} it is interpreted as
|
|
octal; if it starts with @samp{0x} or @samp{0X} it is interpreted as
|
|
hexadecimal.
|
|
|
|
Anything on the line after the @var{code} field is ignored.
|
|
|
|
The @var{metrics} field has the form:
|
|
|
|
@Example
|
|
@var{width}[,@var{height}[,@var{depth}[,@var{italic_correction}
|
|
[,@var{left_italic_correction}[,@var{subscript_correction}]]]]]
|
|
@endExample
|
|
|
|
@noindent
|
|
There must not be any spaces between these subfields (it has been split
|
|
here into two lines for better legibility only). Missing subfields are
|
|
assumed to be@w{ }0. The subfields are all decimal integers. Since
|
|
there is no associated binary format, these values are not required to
|
|
fit into a variable of type @samp{char} as they are in @code{ditroff}.
|
|
The @var{width} subfield gives the width of the character. The
|
|
@var{height} subfield gives the height of the character (upwards is
|
|
positive); if a character does not extend above the baseline, it should
|
|
be given a zero height, rather than a negative height. The @var{depth}
|
|
subfield gives the depth of the character, that is, the distance below
|
|
the lowest point below the baseline to which the character extends
|
|
(downwards is positive); if a character does not extend below above the
|
|
baseline, it should be given a zero depth, rather than a negative depth.
|
|
The @var{italic_correction} subfield gives the amount of space that
|
|
should be added after the character when it is immediately to be
|
|
followed by a character from a roman font. The
|
|
@var{left_italic_correction} subfield gives the amount of space that
|
|
should be added before the character when it is immediately to be
|
|
preceded by a character from a roman font. The
|
|
@var{subscript_correction} gives the amount of space that should be
|
|
added after a character before adding a subscript. This should be less
|
|
than the italic correction.
|
|
|
|
A line in the @code{charset} section can also have the format
|
|
|
|
@Example
|
|
@var{name} "
|
|
@endExample
|
|
|
|
@noindent
|
|
This indicates that @var{name} is just another name for the character
|
|
mentioned in the preceding line.
|
|
|
|
@kindex kernpairs
|
|
The word @code{kernpairs} starts the kernpairs section. This contains a
|
|
sequence of lines of the form:
|
|
|
|
@Example
|
|
@var{c1} @var{c2} @var{n}
|
|
@endExample
|
|
|
|
@noindent
|
|
This means that when character @var{c1} appears next to character
|
|
@var{c2} the space between them should be increased by@w{ }@var{n}.
|
|
Most entries in the kernpairs section have a negative value for@w{
|
|
}@var{n}.
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Installation, Request Index, File formats, Top
|
|
@chapter Installation
|
|
@cindex installation
|
|
|
|
@c XXX
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Request Index, Escape Index, Installation, Top
|
|
@chapter Request Index
|
|
|
|
Requests appear without the leading control character (normally either
|
|
@samp{.} or @samp{'}).
|
|
|
|
@printindex rq
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Escape Index, Operator Index, Request Index, Top
|
|
@chapter Escape Index
|
|
|
|
@printindex es
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Operator Index, Register Index, Escape Index, Top
|
|
@chapter Operator Index
|
|
|
|
@printindex op
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Register Index, Macro Index, Operator Index, Top
|
|
@chapter Register Index
|
|
|
|
@printindex vr
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Macro Index, String Index, Register Index, Top
|
|
@chapter Macro Index
|
|
|
|
@printindex ma
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node String Index, Glyph Name Index, Macro Index, Top
|
|
@chapter String Index
|
|
|
|
@printindex st
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Glyph Name Index, Font File Keyword Index, String Index, Top
|
|
@chapter Glyph Name Index
|
|
|
|
A glyph name @code{xx} consisting of exactly two characters can be
|
|
accessed as @samp{\(xx}. Glyph names @code{xxx} of any length can be
|
|
accessed as @samp{\[xxx]}.
|
|
|
|
@printindex gl
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
|
|
@chapter Font File Keyword Index
|
|
|
|
@printindex ky
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Program and File Index, Concept Index, Font File Keyword Index, Top
|
|
@chapter Program and File Index
|
|
|
|
@printindex pg
|
|
|
|
|
|
|
|
@c =====================================================================
|
|
@c =====================================================================
|
|
|
|
@node Concept Index, , Program and File Index, Top
|
|
@chapter Concept Index
|
|
|
|
@printindex cp
|
|
|
|
|
|
|
|
@summarycontents
|
|
@contents
|
|
@bye
|