Skip to content

Optimizations

Note added 2002. Computers have gotten a lot faster, so most of the optimizations discussed below will not be necessary on new machines. I am leaving this stuff in the manual for people who want to write thick books, where some of it still might be useful.

Implementing the principle of least surprises, the default settings of RefTeX ensure a safe ride for beginners and casual users. However, when using RefTeX for a large project and/or on a small computer, there are ways to improve speed or memory usage.

  • Removing Lookup Buffers RefTeX will load other parts of a multifile document as well as BibTeX database files for lookup purposes. These buffers are kept, so that subsequent use of the same files is fast. If you can’t afford keeping these buffers around, and if you can live with a speed penalty, try

    emacs-lisp
    (setq reftex-keep-temporary-buffers nil)
  • Partial Document Scans A C-u prefix on the major RefTeX commands reftex-label (C-u C-c (), reftex-reference (C-u C-c )), reftex-citation (C-u C-c [), reftex-toc (C-u C-c =), and reftex-view-crossref (C-u C-c &) initiates re-parsing of the entire document in order to update the parsing information. For a large document this can be unnecessary, in particular if only one file has changed. RefTeX can be configured to do partial scans instead of full ones. C-u re-parsing then does apply only to the current buffer and files included from it. Likewise, the r key in both the label selection buffer and the table-of-contents buffer will only prompt scanning of the file in which the label or section macro near the cursor was defined. Re-parsing of the entire document is still available by using C-u C-u as a prefix, or the capital R key in the menus. To use this feature, try

    emacs-lisp
    (setq reftex-enable-partial-scans t)
  • Saving Parser Information Even with partial scans enabled, RefTeX still has to make one full scan, when you start working with a document. To avoid this, parsing information can be stored in a file. The file MASTER.rel is used for storing information about a document with master file MASTER.tex. It is written automatically when you kill a buffer in reftex-mode or when you exit Emacs. The information is restored when you begin working with a document in a new editing session. To use this feature, put into .emacs:

    emacs-lisp
    (setq reftex-save-parse-info t)
  • Identifying label types by prefix RefTeX normally parses around each label to check in which environment this label is located, in order to assign a label type to the label. If your document contains thousands of labels, document parsing will take considerable time. If you have been using label prefixes like tab: and fn: consistently, you can tell RefTeX to get the label type directly from the prefix, without additional parsing. This will be faster and also allow labels to end up in the correct category if for some reason it is not possible to derive the correct type from context. For example, to enable this feature for footnote and equation labels, use

    emacs-lisp
    (setq reftex-trust-label-prefix '("fn:" "eq:"))
  • Automatic Document Scans

    At rare occasions, RefTeX will automatically rescan a part of the document. If this gets into your way, it can be turned off with

    emacs-lisp
    (setq reftex-allow-automatic-rescan nil)

    RefTeX will then occasionally annotate new labels in the selection buffer, saying that their position in the label list in uncertain. A manual document scan will fix this.

  • Multiple Selection Buffers

    Normally, the selection buffer *RefTeX Select* is re-created for every selection process. In documents with very many labels this can take several seconds. RefTeX provides an option to create a separate selection buffer for each label type and to keep this buffer from one selection to the next. These buffers are updated automatically only when a new label has been added in the buffers category with reftex-label. Updating the buffer takes as long as recreating it - so the time saving is limited to cases where no new labels of that category have been added. To turn on this feature, use

    emacs-lisp
    (setq reftex-use-multiple-selection-buffers t)

    You can also inhibit the automatic updating entirely. Then the selection buffer will always pop up very fast, but may not contain the most recently defined labels. You can always update the buffer by hand, with the g key. To get this behavior, use instead

    emacs-lisp
    (setq reftex-use-multiple-selection-buffers t
          reftex-auto-update-selection-buffers nil)

As a summary, here are the settings I recommend for heavy use of RefTeX with large documents:

emacs-lisp
(setq reftex-enable-partial-scans t
      reftex-save-parse-info t
      reftex-use-multiple-selection-buffers t)