Classes are particularly useful for East Asian languages such as Chinese, Japanese, and Korean, where the number of needed characters is much larger than in European languages, and where large sets of characters share the same properties.
groff, a character class (or simply “class”) is a set
of characters, grouped by some user aspect. The
defines such classes so that other requests can refer to all characters
belonging to this set with a single class name. Currently, only the
cflags request can handle character classes.
class request takes a class name followed by a list of
entities. In its simplest form, the entities are characters or symbols:
.class [prepunct] , : ; > }
Since class and glyph names share the same namespace, it is recommended
to start and end the class name with
respectively, to avoid collisions with normal
groff symbols (and
symbols defined by the user). In particular, the presence of
in the symbol name intentionally prevents the usage of
thus you must use the
\C escape to access a class with such a
You can also use a special character range notation, consisting of a
start character or symbol, followed by ‘-’, and an end character or
gtroff converts these two symbol names to
Unicode values (according to the groff glyph gist), which then give the
start and end value of the range. If that fails, the class definition
Finally, classes can be nested, too.
Here is a more complex example:
.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
The class ‘prepunctx’ now contains the contents of the class
prepunct as defined above (the set ‘, : ; > }’), and
characters in the range between
If you want to add ‘-’ to a class, it must be the first character value in the argument list, otherwise it gets misinterpreted as a range.
Note that it is not possible to use class names within range definitions.
Typical use of the
class request is to control line-breaking and
hyphenation rules as defined by the
cflags request. For example,
to inhibit line breaks before the characters belonging to the
prepunctx class, you can write:
.cflags 2 \C'[prepunctx]'
cflags request in Using Symbols, for more details.