$ sudo su -
$ rm -rf /opt/context
$ mkdir -p /opt/context
$ cd /opt/context
$ wget http://lmtx.pragma-ade.nl/install-lmtx/context-linux-64.zip
$ unzip *zip
$ export TEXMFCACHE=/tmp
$ sh install.sh
$ exit
$ cat test.tex
\starttext
Test
\stoptext
$ export TEXMFCACHE=/tmp
$ sudo rm -rf /tmp/luatex-cache
$ /opt/context/tex/texmf-linux-64/bin/mtxrun --autogenerate --script
mtx-context --autopdf test.tex
resolvers | resolving | remembered file 'mtx-context.lua'
resolvers | resolving | remembered file 'mtx-contexts.lua'
resolvers | resolving | remembered file 'mtx-context.lua'
resolvers | resolving | remembered file 'mtx-t-mtx-context.lua'
resolvers | resolving | remembered file 'mtx-t-mtx-contexts.lua'
resolvers | resolving | remembered file 'mtx-t-mtx-context.lua'
resolvers | resolving | remembered file 'mtx-context.lua'
mtxrun | unknown script 'mtx-context.lua' or 'mtx-mtx-context.lua'
If
the cache directory isn't deleted, the PDF is generated. However, as
soon as the computer reboots, or the temporary directory is otherwise
erased, two runs are required.
I've
addressed this in my code, but it's a little awkward and somewhat
brittle because the code cannot know what makes for a valid luatex-cache
directory:
private boolean reinitialize() {
// variable assignments ... exists = check for luatex-cache directory
mArgs.clear();
mArgs.add( TYPESETTER.getName() );
if( exists ) {
mArgs.add( "--autogenerate" );
mArgs.add( "--script" );
mArgs.add( "mtx-context" );
mArgs.add( ... remaining args ... );
}
else {
mArgs.add( "--generate" );
}
return exists;
}
private boolean typeset() throws Exception {
return reinitialize() ? call() : call() && reinitialize() && call();
}
// Invoke ConTeXt to either typeset the document or generate the cache directory
public Boolean call() throws Exception {
final var builder = new ProcessBuilder( mArgs );
builder.directory( mDirectory.toFile() );
final var cacheDir = getCacheDir();
final var env = builder.environment();
env.put( "TEXMFCACHE", cacheDir.toString() );
builder.redirectOutput( DISCARD );
builder.redirectError( DISCARD );
final var process = builder.start();
process.waitFor();
final var exit = process.exitValue();
process.destroy();
return exit == 0;
}
Also,
unless my application installs ConTeXt, setting the TEXMFCACHE
directory before the installation begins will require asking users to do
this. Ideally, using the software would take the following steps:
1. Download text editor
2. Download and install ConTeXt (e.g., click link, extract archive, run install.sh)
3. Run text editor
4. Export PDF (editor configures ConTeXt as required, reducing the number of steps for end users)
At
some point in the future, the editor may prompt the user for permission
to install ConTeXt on their behalf---to simplify step 2---but that's
much more effort.
Stay safe!