unroff accepts Scheme code in a number of places. First, several Scheme files are loaded on startup:
scm/troff.scm scm/format/common.scm scm/format/package.scm ~/.unroff
The first three path names are relative to a site-specific library directory where the files have been installed by the system administrator. ``troff.scm'' contains definitions that are independent of the actual output format and troff macro-package; and the file ``.unroff'' (loaded from the caller's home directory) typically contains Scheme code to define user-preferences and to tailor and extend the translation rules implemented by the files loaded from a central location. See the manual page unroff(1) for more information.
Additional files with user-supplied Scheme definitions (e.g. translation rules for user-defined macros) can be passed to unroff by mentioning them in the command line. In general, troff input files and Scheme source files can be mixed arbitrarily when calling unroff. Finally, Scheme code can be embedded directly in the troff documents by means of the new ``.##'' troff request and the corresponding extension to the ``.ig'' request as explained in the manual page. Such inline Scheme code is executed on-the-fly when it is encountered by the parser while processing the document.