---
name: "prerex"
section: "1"
platform: "linux"
package: "prerex"
version: "6.8.0-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/prerex"
---

# prerex(1)

interactive editor of prerequisite-chart descriptions

## NAME

prerex - interactive editor of prerequisite-chart descriptions

## SYNOPSIS

**prerex** \[ *options* \]  \[  *basefile*\[*.tex*\] \[  *chartfile*\[*.tex*\] \]  \]

## DESCRIPTION

**prerex** is an interactive program for editing prerequisite-chart descriptions in the [**prerex**(5)](/prerex/5.md) format. The user does not normally have to be familiar with details of the format.   The editor supports add, remove, cut-and-paste, and edit operations on diagram elements, and vertical or horizontal shifts of a list of specified elements, all the elements in a rectangular region, or the entire diagram.  The edited diagram  may be saved, re-processed, and viewed in a PDF  viewer, without exiting the editor. Alternatively, [**vprerex**(1)](/vprerex/1.md) will open a  [**prerex**(1)](/prerex/1.md) window and display the corresponding PDF file alongside.

## TERMINOLOGY

A prerequisite chart consists of several *course boxes,* linked by  *arrows.* Courses are either *half* or *full,* and may be *required* or *optional* (or neither). Each course box contains a course *code* (upper left corner), a course  *title* (lower half), and *timetable* information (upper right corner). An arrow is either a *prerequisite* (solid), a *corequisite* (dotted), or  *recommended* (dashed). When a conventional arrow would be inappropriate, a *mini* course just above a target box may be used. A line of text may have been placed anywhere in the chart.

In some implementations of the [**prerex**(5)](/prerex/5.md) format, (some) arrows may be curved and by default have non-zero curvature. The curvature of individual arrows may be edited using the [**prerex**(1)](/prerex/1.md) editor. Negative curvatures are supported. To modify the default curvature (or set it to zero), see [**prerex.sty**(7)](/prerex.sty/7.md).

## COORDINATE SYSTEM

A conventional two-dimensional coordinate system is used to specify the locations of diagram elements; the origin (where *x = 0* and *y = 0*) is at the lower-left corner of the diagram. For convenience, a coordinate grid is normally displayed in the background while a diagram is being edited.

The coordinates of a *box,* *mini,* or *text-line* are those of its centre point.   An *arrow* is described by the coordinates of the centre points of its source and target boxes/minis/text-lines.

The notation *x0,y0***:***x1,y1* denotes all the nodes (course boxes, minis, texts) in the rectangle whose northwest and southeast corners are at coordinates *x0,y0* and *x1,y1.*

## USAGE

If  **prerex** is invoked on one existing file, a back-up copy is made of it, the  *x,y* coordinate grid is turned on, the file is processed by using a system call to [**pdflatex**(1)](/pdflatex/1.md), and then the user gets  a command summary and an interactive prompt  of the form

-

  *file.tex\>*

If no file argument is given on the command line, the user is prompted to supply a file name. In either case,  if the file name provided does not have a  *.tex* extension,  *.tex* is appended to it.

If the  *file.tex* file named does  *not* already exist,  a new "empty" chart file with that name is created, and then it is processed as above.

If a  *second* filename is provided, the first filename is treated as the base file of a LaTeX document and the second as an included file that contains the  *chart* environment to be edited.  This allows more than one document to share an included chart file and allows more than one chart to be included in a single document.

The user may enter commands at the interactive command prompt as follows:

- **box** *x,y*

  edit a course box at *x,y,* if necessary, creating a new course box there

- **mini** *x,y*

  edit a mini at *x,y,* if necessary, creating a new mini there

- **text** *x,y*

  edit a text-line at *x,y,* if necessary, creating a new text-line there

- **arrow** *x0,y0,x1,y1*

  edit an arrow from *x0,y0* to  *x1,y1,* if necessary, creating a new such arrow

- **cut** *xi,yi ...*

  (temporarily) remove the box, mini, or text at  *xi,yi* (including arrows into/out of the box/mini/text)

- **paste \[***x,y***\]**

  re-insert most recently cut but not yet pasted box, mini, or text at  *x,y* (including arrows into/out of the box/mini/text), or at the original coordinates if   *x,y* omitted

- **xchange** *x0,y0 x1,y1*

  exchange the box, mini or text at  *x0,y0* with that at *x1,y1.* This is implemented as a sequence of two cuts followed by two pastes to the same points.

- **delete \[** *x,y* **\|** *x0,y0,x1,y1* **\|** *x0,y0***:***x1,y1* **\]** *...*

  remove the specified boxes, minis, texts, or arrows  (including automatically all arrows into/out of each box/mini/text)

- **undo**

  undo the most recent editing command (not already undone)

- **shift \[-\]***s* **\[** *x,y* **\|** *x0,y0***:***x1,y1* **\]** *...*

  move specified diagram elements  *x* units right \[left\]; if no elements are specified, the whole diagram is shifted

- **raise \[-\]***r* **\[** *x,y* **\|** *x0,y0***:***x1,y1* **\]** *...*

  move specified diagram elements  *y* units up \[down\]; if no elements are specified, the whole diagram is raised

- **write, !**

  save to the current *chartfile.tex* and process the chart by calling [**pdflatex**(1)](/pdflatex/1.md) on the base file.

- **quit, exit, x, ^D**

  turn off the coordinate grid, restore write-access, save to the current *chartfile.tex,* process the base file and exit.

- **!***cmd*

  restore write access to  *chartfile.tex,* execute shell command *cmd,* re-load and re-process  the base file (in case the command changed anything), and remove write-access.

- **Backup**

  copy the current *chartfile.tex* to the back-up file *.chartfile.tex;* equivalent to **!cp** *chartfile.tex .chartfile.tex*

- **Restore**

  delete the current  *chartfile.tex* and editing buffer, and replace them using the current back-up in *.chartfile.tex.*

- **grid** \[y/n\]

  turn on/off coordinate-grid background

- **help, ?**

  print a command summary

After most editing commands, the editing buffer is automatically saved to *chartfile.tex* and the basefile is processed; the  **cut** and **paste** commands are exceptions: saving and processing take place only when all outstanding cuts have been pasted.   Saving and processing can be  *forced* by using the **write** (or  **!**) command, or  *suppressed* for  all commands (except **write** and **!**) by appending a ";" to the command immediately prior to entering it. To exit the editor *without* saving to the current *chartfile.tex*, use  **quit;** (.i.e.,  **quit** followed by a semi-colon) or a similar combination. Starting in Version 3.8, **^C** and other interrupts result in the editing buffer being saved to *chartfile.tex* before the editor is exited.

## OPTIONS

- **-v**

  output program name and version number, and quit

- **-h**

  output usage summary and quit

## NOTES

The main difference between  **mini** and  **text** is in the maximum lengths for the text displayed; the latter allows a full line of text, not  merely a course code. Also a text-line does not have an associated URI (when the grid is off). The text "line" may actually be displayed as a paragraph by using a LaTeX \\parbox.

To save the current state of  *chartfile.tex,* use  **Backup** or a comparable shell command. A history list of interpreted commands is maintained and is accessible using the up-arrow key.

If  processing of the chart fails,  **prerex** will attempt to display the LaTeX error message from the log file.  The chart file  can be fixed using a conventional text editor or LaTeX-oriented  editor. LaTeX processing should fail only if there is an initial problem or if ill-formed LaTeX markup has been inserted into a text field.

Any (non-empty) prefix of a command suffices; for example, **q**, **qu**, or **qui** may be used instead of **quit**. Some of the commands will begin a dialogue with the user in order to fill in or modify properties; the prompts should be self-explanatory.

Since version 5.5, **prerex** no longer automatically calls a PDF viewer (because it may be embedded in an instance of [**vprerex**(1)](/vprerex/1.md) which already provides a PDF display). If  **prerex** is being used by itself, a PDF viewer may be invoked using the **!***cmd* shell-escape mechanism. Also, **prerex** no longer interacts with the user until a PDF file is available; this is for use with [**vprerex**(1)](/vprerex/1.md). For example, if the .tex file is initially read-only,  **prerex** aborts.

## FILES

A LaTeX style file  [**prerex.sty**(7)](/prerex.sty/7.md) that implements the macro calls defined by the  [**prerex**(5)](/prerex/5.md) format must be available to **\[pdf\]latex**(1) to process the chart file. Before any editing is allowed,  *chartfile.tex* is copied to  *.chartfile.tex* as a backup.

## ENVIRONMENT

The most convenient viewing program to use with **prerex** is one like [**gv**(1)](/gv/1.md), **gsview**(1), **[kghostview(1)](/kghostview/1.md),** [**kpdf**(1)](/kpdf/1.md) or [**okular**(1)](/okular/1.md) that may be configured to "watch" the pdf file and re-load the display automatically when the file changes. [**evince**(1)](/evince/1.md) has a Reload button and [**xpdf**(1)](/xpdf/1.md) supports re-loading using the keystroke "R", but  re-loading is much less convenient with **acroread**(1) and [**gpdf**(1)](/gpdf/1.md), which may have to be re-started.

Recent versions of some PDF viewers show the URIs of hyperlinks in a tooltip or in the status bar; this mechanism is used by some implementations of  [**prerex.sty**(7)](/prerex.sty/7.md) to allow display of the coordinates of a box, mini, text-line, or arrow when the mouse hovers over it (while the coordinate grid is on and the relevant chart file is presumably being edited).

The  **prerex** package at  **http://www.ctan.org/tex-archive/graphics/prerex/** has source code for [**vprerex**(1)](/vprerex/1.md), a GUI front-end for  **prerex** which is prerex-enabled.

## BUGS

**prerex** analyzes chart files without using TeX; thus, macro calls are  *not* expanded, and anything in the chart file before or after the (first) **\\begin{chart} ... \\end{chart}** environment is ignored (but preserved) by the editor. Lines that begin with "%" within the chart environment are  preserved but other comments within the chart environment are *not* preserved and may interfere with command parsing.

From  version 5.6, **prerex** no longer supports the latex -\> dvips -\> ps2pdf toolchain as an option.

## AUTHOR

R. D. Tennent (rdt@cs.queensu.ca)

## DEPENDENCIES

**prerex** uses the   [**editline**(3)](/editline/3.md) library if available and the GNU [**readline**(3)](/readline/3.md) and [**history**(3)](/history/3.md) libraries otherwise.

## SEE ALSO

**acroread**(1), [**evince**(1)](/evince/1.md), [**gpdf**(1)](/gpdf/1.md), **gsview**(1), [**gv**(1)](/gv/1.md), [**kghostview**(1)](/kghostview/1.md), [**kpdf**(1)](/kpdf/1.md), [**okular**(1)](/okular/1.md), [**pdflatex**(1)](/pdflatex/1.md), [**prerex**(5)](/prerex/5.md), [**prerex.sty**(7)](/prerex.sty/7.md), **previewer**(1), [**vprerex**(1)](/vprerex/1.md), [**xpdf**(1)](/xpdf/1.md).
