Custom Configuration

From Wiki
Revision as of 21:17, 6 April 2021 by Thangalin (talk | contribs) (→‎Environment Variables)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

< Installation hints


This page describes how to configure and persist changes to default settings, including directory paths. For the purposes of this wiki page, it is assumed that ConTeXt is installed at:


Default Variables

The file /opt/context/tex/texmf/web2c/texmfcnf.lua contains a number of variables, including:


Do not change this file as upgrading ConTeXt overwrites these files. To customize texmf.cnf, change the variables as noted in the following section.

Custom Variables

Modify a variable as follows:

  1. Change to the location of setuptex (e.g., /opt/context/tex/).
  2. Create a new file called texmfcnf.lua (or texmf.cnf).
  3. Set only the required variables.

For example, to change the cache directory, use:

 return {
   content = {
     variables = {
       TEXMFCACHE = "/var/cache/context/texmf-cache",

Save the file.

The allowed locations for texmfcnf.lua are determined by the variable TEXMFCNF set in texk/kpathsea/texmf.cnf in the LuaTeX source code.

Most options in texmf.cnf of modern TeX distributions also work with ConTeXt.

Environment Variables

By default, ConTeXt creates a directory named luatex-cache in the user's home directory. One way to change the cache location includes:

export TEXMFCACHE=/tmp
mtxrun --generate
context filename.tex

Another way is to run the context executable indirectly via mtxrun, as follows:

export TEXMFCACHE=/tmp
mtxrun --autogenerate --script mtx-context filename.tex

Running ConTeXt in either of these ways will create luatex-cache inside the /tmp directory, rather than the user's home directory.

Security Concerns

ConTeXt requires enabling the write18 function to run MetaPost and other tools. This implies that malicious TeX code can run any program with user rights. The function is disabled by default. This can be enabled by changing the setting inside texmf.cnf:

 shell_escape = t

For MikTeX users, the counterpart to texmf.cnf was miktex.ini, now the config is stored separately for each program

File Priority

The texmf.cnf files are read in the following order:

  1. /opt/context/bin/x86_64-linux/texmf.cnf
  2. /opt/context/bin/texmf.cnf
  3. /opt/context/texmf.cnf
  4. /opt/context/texmf/web2c/texmf.cnf

Variables set in a particular file are not overwritten by files that are read later.

The first configuration file listed is useful for system dependent configuration. On multi-platform installations you could create a file /opt/context/bin/win32/texmf.cnf on the server that contains:

OSFONTDIR = $SystemRoot/Fonts

and this only affects Windows clients, even if the third file contains the line:

OSFONTDIR = /usr/share/fonts/